ماهیت و چگونگی کارکرد قفل سخت افزاری
جمعه, اسفند ۹م, ۱۳۸۷اهمیت پیشگیری از استفاده غیرقانونی از نرم افزارها
پیشگیری از استفاده غیرقانونی از نرم افزارها (Piracy Prevention) و پیاده سازیه قانون نشر (Copyright) برای همه انواع ساخته های نرم افزاری از اهمیت بسیاری بالایی برخوردار است که همیشه با صرف هزینه های بالایی هم همراه بوده.
این موضوع که با مهندسی معکوس (Reverse Engineering) و نفوذ در نرم افزار (Cracking) رابطه نزدیکی دارد طبق یکی از تحقیقات قابل استناد موسسه IDC مبنی بر مطالعه آمار استفاده غیرقانونی از نرم افزارها در حدود ۳۰ میلیارد دلار نرم افزار به صورت غیرقانونی در سال ۲۰۰۳ در جهان یا به عبارتی ۳۶% از مجموع ساخته های نرم افزاری در این سال به صورت غیرقانونی مورد استفاده قرار گرفته , در یک مطالعه دیگه هم اینطور تخمین زده شده که اگر این میزان استفاده غیرقانونی از نرم افزار ۱۰% کاهش پیدا کند معادل ایجاد یک میلیون شغل جدید و ۴۰۰ میلیارد دلار رشد اقتصادی جهان خواهد بود.
روش های مختلفی برای حفاظت از اطلاعات منتشر شده وجود دارد که یکی از اونها اصطلاحا قفل کردن نرم افزارهاست , این قفل گذاری به دو روش نرم افزاری و سخت افزاری انجام می شود که در این نوشته قصد دارم فقط در مورد قفل سخت افزاری , ماهیت و چگونگی کارکرد اون بنویسم.
قفل سخت افزاری:
قفل سخت افزاری (Hardware lock) در اصل سخت افزار یا رسانه قابل حمل بخصوص است که برای قفل گذاری و جلوگیری از نسخه برداری غیرمجاز نرم افزارها مورد استفاده قرار می گیرد.
این قفل ها دارای حافظه ای هستند که اطلاعاتی در آنها ذخیره شده و از داخل منبع کد نرم افزار بوسیله یک ActiveX یا DLL با قفل سخت افزاری ارتباط برقرار می شود , اطلاعات خوانده و مورد مورد استفاده قرار می گیرند, برای بالا بردن امنیت نرم افزار وجود قفل و صحت اطلاعات موجود در آن در بخش های مختلف نرم افزار بررسی می شود.
نیاز به استفاده از قفل سخت افزاری:
یکی از مشکلات برنامه نویسان نسخه برداری های غیرمجاز از برنامه های آنهاست که باعث خسارات سنگینی به آنها می شود بیشتر راه حل های مورد استفاده نیز چندان عملی نیست و باز هم بعد از مدت کوتاهی نرم افزار کرک شده با قیمت بسیار پایینی به فروش می رسد که باعث از بین بردن تلاشهای شاید چند ساله برنامه نویسان می شود , در این بین نرم افزارهای حرفه ای مشکلات بیشتری دارند چون از ارزش بیشتری برخوردارند و کرکرها وقت بیشتری برای آنها می گذارند و قفلهای پیچیده تر را نیز می شکنند به همین خاطر بسیاری از برنامه نویسان سراغ برنامه های حرفه ای نمی روند چون امنیتی برای نرم افزارشان نمی بینند.
راههای بسیاری برای جلوگیری از نسخه برداری نشدن برنامه وجود دارد ولی هیچ کدام عملا غیر قابل نفوذ نیستند و فقط کار کرکر را سخت می کنند اگر برنامه ای دارای ارزش پایینی باشد می توان با استفاده از راههای معمول مانند استفاده از شماره سریال قفل گذاری روی لوح فشرده و … جلوی نفوذگران را گرفت ولی برای برنامه هایی با ارزش بالا انواع و اقسام قفلهای روی لوح فشرده مانند قفلهای حجمی , قفلهایی که با دستکاری FAT انجام می شوند و … نمی توانند مفید باشند.
خود برنامه اجرایی باید به طور صحیح روی لوح قرار گیرد و سیستم عامل ویندوز باید بتواند آنرا از روی این رسانه بخواند یا حداکثر باید بتواند در حافظه قرار گیرد , یک کرکر عادی نیز می تواند این برنامه را از حافظه RAM خوانده و در جایی نسخه برداری کند البته معمولا کار به این پیچیدگی ها هم نیست و با نرم افزار های بازیابی اطلاعات می توان آنها را بازگرداند.
راه های دیگری مانند پنهان کردن (Encrypt) برنامه و راههای جلوگیری از اشکال زدایی (Debug) که بوسیله نرم افزارهای جانبی ارایه می شود نیز چندان مفید نبوده و کار کرکر را در پیدا کردن برنامه اصلی و اصطلاحا Dump کردن آن از حافظه RAM بدون این محافظ های اضافی مشکل می کند.
استفاده از شماره سریال لوح سخت (Hard Disk) و … یا ترکیبی از آنها نیز مشکلاتی را دربر دارد که اولا در صورت تغییر سخت افزار ویندوز یا … برنامه شما از کار افتاده و کاربر را ناراضی می کند و یا حتی کاربر برای نصب این برنامه روی کامپیوتر دیگر به راحتی به دروغ به شما می گوید که به علت نصب دوباره ویندوز شماره سریالش از کار افتاده (یا مثلا عوض کردن لوح سخت) و نیاز به شماره سریال جدید دارد , در ضمن تغییر این شماره سریال ها هم احتمالا به راحتی امکان پذیر است مثلا بوسیله یک برنامه کوچک که به عنوان کرک همراه برنامه شما فرستاده می شود می توان شماره سریال لوح سخت را به عددی که با شماره سریال فرستاده همراه لوح فشرده برابر باشد عوض کرد یا اگر از DLL یا تابع خاصی برای این کار استفاده کرده باشید می توان آنرا طوری تغییر داد که همیشه یک عدد را برگرداند و بتوان آنرا روی هر کامپیوتری نصب کرد.
انواع گوناگون قفل سخت افزاری:
این قفل ها امکان داره به صورت یک لوح فشرده (Compact Disk:CD) یا لوح نرم (Flappy Disk) مورد استفاده قرار بگیرن که به سادگی قابل نسخه برداری نباشند , البته این از ساده ترین نوع قفل های سخت افزاری هست , قفل سخت افزاری ممکنه بصورت یک قطعه سخت افزاری خارجی و نصب شونده روی درگاه موازی (Parallel Port) که درگاه متعارف چاپگر LPT هست یا درگاه USB یا (USB Port) هم مورد استفاده قرار بگیره که قفل های USB بدلیل سرعت بالاتر و فن آوری جدیدتر بیشتر مورد استفاده قرار میگیرند.
حافظه قفل سخت افزاری و کارکرد آن:
بخش اصلی قفل از یک حافظه قابل پاک شدن تشکیل شده که با توجه به نوع و حجم اون دارای کارکردی متفاوت هست و عمدتا به یکی از دو روش زیر کار می کند:
روش اول قفل گذاری به این صورت است که تولید کننده نرم افزار یک یا چند بایت (Byte) از اطلاعات را در قفل نوشته و نرم افزار در هنگام اجرا آن را بررسی می کند , در صورتیکه قفل وجود داشته باشد نرم افزار به کار خود ادامه می دهد و اگر قفل وجود نداشته باشد و یا اطلاعات خوانده شده از روی قفل صحیح نباشد نرم افزار متوقف شده و با اعلام پیام خطا از اجرای صحیح خودداری می زند.
این نوع قفل ها دارای ساختاری ساده , حافظه ای در حد چند بایت و قیمتی ارزان هستند.
استفاده از این قفل ها بسیار ساده بوده و نیاز به تخصص خاصی ندارد , تنها کافیست که نرم افزار ویژه قفل را که بوسیله شرکت تولید کننده قفل ارائه شده اجرا نمود.
در ابتدا که قفل فاقد اطلاعات است اول یک کلمه دلخواه به عنوان گذرواژه درخواست کرده و سپس با توجه به نوع قفل یک یا چند کلمه اطلاعات را دریافت و در حافظه قفل ثبت کنید , در دفعات بعد می بایست گذرواژه ای که اولین بار ثبت شده وارد شود تا بتوان به اطلاعات درونی قفل دسترسی داشت , البته بعد از ورود به برنامه این واژه قابل تغییر است.
در هر صورت پس از ثبت اطلاعات در قفل تولید کننده نرم افزار , اطلاعات ثبت شده در یک برنامه را بررسی می کند که نحوه بررسی کردن اطلاعات با توجه به نوع قفل متفاوت است , در بعضی فقط اطلاعات درون قفل بررسی می شود و در بعضی دیگر در مرحله اول وجود قفل بررسی شده و در مرحله بعدی اطلاعات درون آن بررسی می شود.
روش دیگر قفل گذاری به این صورت است که تولید کننده نرم افزار بخش کوچکی از برنامه را در حافظه قفل قرار می دهد که در این حالت چنانچه قفل وجود نداشته باشد برنامه به هیچ وجه قادر به اجرا و ادامه کار نخواهد بود.
این نوع قفل ها دارای ساختاری کمی پیچیده , حافظه ای بعضا تا چند کیلو بایت و قیمتی نسبتا گران هستند.
استفاده از این قفل ها به سادگیه نوع قبلی نیست , البته نحوه کلی کار مشابه روش قبلی است.
با اجرای نرم افزار ویژه قفل و وارد نمودن گذرواژه باید نام فایلی را که می خواهیم بر روی آن قفل بگذاریم مشخص کنیم تا بخشی از آن در قفل ثبت گردد.
البته در بعضی دیگر از این نوع قفل ها که حفاظت بیشتری را انجام می دهند می بایست بوسیله تولید کننده نرم افزار دقیقا کنترل شود که چه بخش هایی از فایل باید در قفل ثبت گردد که ابته انجام این کار نیاز به تخصص و تجربه کافی دارد , چرا که بعضا ممکن است که خطا در انجام کار باعث بروز اشکال در برنامه تولیدی شود.
چون با این کار در واقع بخشی از برنامه در قفل ثبت می گردد واضح است که هر قفل فقط برای یک نسخه از برنامه می تواند مورد استفاده قرار بگیرد و به همین علت کاربرد این قفل کمتر است.
ضمنا نوع دیگری از قفل ها هستند که هر دو روش فوق استفاده می کنند اما طرفدار چندانی ندارند.
بالا بردن امنیت قفل های سخت افزاری:
هیچ قفلی غیرقابل نفوذ نیست ولی می توان نفوذ به آن را تا حدی سخت کرد که هک کردن آن برای کسی بصرفه نباشد , در استفاده از قفل های سخت افزاری راهبردهای فراوانی وجود دارد که برای افزایش امنیت در نرم افزار مورد استفاده قرار میگرد.
قفل های سخت افزاری موجود در بازار و از نوع متصل شونده به درگاه موازی بیشتر با چاپگرها مشکل داشته و چون از فن آوری پایینی برخوردارند به راحتی قابل نسخه برداری هستند , حجم زیاد دارند و قدیمی نیز هستند , قفلهای USB موجود نیز بیشتر ساخت کشور چین هستند , قفلهای یک شرکت همگی دارای یک پروتکل می باشند که با کار کردن روی یکی از آنها می توان تمام انواع آنها را هک کرد و یکی از بزرگترین ایراداتی که به آنها وارد می شود این است که دقیقا همین قفلی که در اختیار شماست را هکر نیز می تواند با کتابچه راهنما و به قیمت پایینی تهیه کند تنها فرق آن نیز با قفل شما یک شماره سریال است که بوسیله نرم افزار خاصی بر روی آن قرار می گیرد و هکر نیز می تواند با فهمیدن پروتکل استفاده شده در آن به هر تعدادی از این قفل را تولید کند و به علت استفاده کردن از توابع ثابت نیازی به این کار هم نداشته و می تواند با نوشتن دوباره این توابع که دقیقا نیز در کتابچه راهنما توضیح داده شده قفل شما و همه قفلهای از این نوع را دور بزند.
مثلا با استفاده از EXE Protector امنیت نرم افزارهایتان را تا حد زیادی بالا برده و فایل .EXE خود را در مقابل روش های کرک محافظت نمایید.
برای استفاده از قفل های سخت افزاری معمولا از یک شی COM مثل DLL یا ActiveX استفاده میگردد بطوریکه در بخش های مختلف نرم افزار توسط روتین هایی که شی COM در اختیار برنامه نویس قرار میدهد میتواند از اطلاعاتی که پیشتر در قفل ذخیره شده است استفاده نموده یا آنها را بررسی کند , برای بالا بردن امنیت در نرم افزار روتین های بررسی قفل در بخش های مختلف نرم افزار قرار میگیرد.
استفاده از ActiveX و DLL ها برای راحتی کار شما کار کرکرها را نیز راحت تر می کند دقیقا دسترسی شما به هرکدام از این توابع به راحتی مشخص می شود و امکان تغییر هرکدام از این تابع ها هست پیچیده بودن قفل از معایب آن به شمار نمی رود.
توابع داخلی قفل باید منحصرا برای شما نوشته شود و در دسترس هیچ کس دیگر قرار نگیرد قفلهایی را که می بینید به تعداد زیاد تولید می شوند فقط به خاطر پایین آوردن قیمت نهایی محصول است اگر به فکر امنیت هستید ارزان به دست نمی آید.
این نوشته بطور سطحی پیرامون آشنایی , ماهیت و کارکرد کلی یکی از روش های جلوگیری از استفاده غیرقانونی از نرم افزارها صحبت می کرد.
در نگارش این نوشته مورد استفاده قرار گرفته:
