آشنایی با نحوه قفلگذاری بر روی یک برنامه
آشنایی با نحوه قفلگذاری بر روی یک برنامه
الف: طراح به سورس برنامه دسترسی دارد. در این حالت طراح پس از انتخاب روش قفل گذاری، کافیست آن را به زبان مورد نظر خود پیاده سازی نموده و در برنامه خود بگنجاند.
ب: طراح (مجری پروژه) به سورس برنامه دسترسی ندارد. گاهی اوقات به یکسری برنامههای ارزشمندی برخورد میکنیم که فاقد قفل هستند، بنابراین نیاز به قفلگذاری وجود دارد (البته این حالت بیشتر در کشور ما و چند کشور دیگر که در آن ها قانون Copyright معنی ندارد، کاربرد دارد). جهت تزریق قفل به این گونه برنامهها، نیاز به آشنایی کامل به ساختار فایلهای اجرایی (EXEY, COM, SYS) وجود دارد چرا که باید برنامهای راطراحی کنیم تا همانند یک ویروس کامپیوتری به فایل اجرایی مشخصی بچسبد. البته جهت اینکار بهترین زبان برنامه نویسی، اسمبلی میباشد (بدلیل توانایی دخالت در روند اجرای برنامه). ضمناً برای بالا بردن سطح امنیت برنامه لازم است تا یکسری کدهای ضد دیباگ در برنامه گنجانده شوند.
کدهای ضد دیباگ، دستوراتی به زبان اسمبلی هستند که در حالت اجرای عادی برنامه، هیچ تغییری در روند اجرائی نمیگذارند بلکه در صورتی که برنامه توسط دیباگرها اجرا گردد (مورد ارزیابی قرار گیرد) بتواند از اجرای آن جلوگیری نماید. با اضافه کردن کدهای ضد دیباگ به ابتدای برنامه (یا قبل از کنترل قفل) میتوان احتمال دستکاری در برنامه را پایین آورد.
آشنایی با روشهای قفلگذاری و نحوه طراحی آنها
1- قفلگذاری با استفاده از شماره سریال اصلی دیسکت
همانطور که میدانید، سیستم عامل جهت هر دیسکت یک شماره سریال واحد (UNIQUE) اختصاص میدهد، بطوریکه شماره سریال هر دو دیسکت با هم یکی نیستند. بنابراین همین خود یک راه تشخیص دیکست کلید (قفل) میباشد. جهت استفاده از این قفل میبایست شماره سریال دیسکت را خوانده و سپس در داخل برنامه آنرا کنترل نمائیم. یک راه ساده جهت خواندن شماره سریال، اجرای دستور VOL بصورت زیر است: VOL>> C:\DOS\LCK.TMP بعد با باز کردن فایل LCK.TMP، میتوانیم به محتویات آن دسترسی پیدا کنیم.
راه دیگر مراجعه به Boot Sector جهت کنترل قفل میباشد.
ضریب اطمینان این قفل در مورد دیسکت ها، دو تا پنج درصد بوده و در رابطه با هارد دیسک پنجاه تا شصت درصد میباشد. دلیل این اختلاف این است که در حالت قفل دیسکتی با کپی Boot Sector، قفل بر روی دیسکت دیگر قرار خواهد گرفت اما در رابطه با هارد دیسک اینکار به سادگی انجام پذیر نیست.
2- قفلگذاری با استفاده از مشخصات سیستم
در این نوع قفل نرم افزاری، برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده (که اینکار از طریق مراجعه به بخشهای خاصی از حافظه و یا مراجعه به اطلاعات BIOS انجام میشود). سپس آنرا با فایلی که قبلاً توسط نویسنده نرم افزار بر روی کامپیوتر کپی گردیده، مقایسه میکند و در صورت عدم برابری، اجرای برنامه پایان میپذیرد. این نوع قفل هنوز هم در بسیاری از برنامه ها استفاده میگردد، اما نکته قابل ذکر این است که جهت اطمینان بیشتر به قفل لازم است فایل حاوی مشخصات بصورت کد شده نوشته باشد تا امکان دستکاری آن توسط قفل شکنان به حداقل ممکن برسد. درصد اطمینان این نوع قفل 75%-65% میباشد.
3- قفل با استفاده از موقعیت فایل روی هارد دیسک
این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس میباشد چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش را بدست میآورد، سپس آنرا با شماره کلاستری که قبلاً توسط برنامه نویس بر روی یکی از فایلهای برنامه (ممکن است بصورت کد شده باشد) قرار داده شده، مقایسه کرده و در صورت برابر بودن اجرا میشود. این نوع قفل نسبت به قفل قبلی (شماره 2) استفاده کمتری داشته چرا که در صورتیکه برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد. اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند میباشد (ضمناً امکان Scandisk، Defrag و... نیز وجود ندارد چرا که شماره کلاستر اشاره گر به فایل تغییر خواهد کرد). ضریب اطمینان این نوع قفل نیز 80%-70% میباشد.
4- قفل با استفاده از فرمت غیراستاندارد
این شیوه یکی از رایجترین قفلهای نرم افزاری است که هنوز هم بصورت جدی مورد استفاده قرار میگیرد. برخی از دلایل اهمیت آن عبارتند از:
امکان استفاده از روشهای متفاوت در این روش �€" راحتی و سرعت زیاد به هنگام استفاده آن �€" عدم وجود نرم افزار خاصی جهت باز کردن این نوع از قفلها همان طور که میدانیم سیستم عامل جهت دسترسی به اطلاعات یک دیسکت از فرمت خاصی (18 سکتور در هر تراک) استفاده میکند اما اگر یک تراک به صورت غیر استاندارد فرمت شود، (مثلاً 19 سکتور در تراک) سیستم عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت و بنابراین تمام نرم افزارهای تحت سیستم عامل مزبور نیز از سکتورهای مخفی استفاده نکرده، در نتیجه امکان کپی برداری از آنها بسیار ضعیف است. ما نیز از همین روش جهت طراحی قفل مورد نظرمان استفاده میکنیم. بصورتیکه تراک آخر دیسک را بصورت یک سکتوری و با شماره 20 فرمت میکنیم. سپس جهت کنترل دیسکت به سکتور فوق مراجعه کرده و در صورت وجود، کنترل برنامه را پی میگیریم. البته غیر از تغییر شماره سکتور میتوان از اندازه غیرمجاز نیز استفاده کرد یعنی بجای اینکه سکتورها را بصورت 512 بایتی فرمت کنیم، از اندازه 1024، 2048 و... استفاده میکنیم. این قفل فقط جهت فلاپی دیسک قابل استفاده میباشد و درصد اطمینان در این روش حدود 95%-85% میباشد.
در این قسمت دو روش دیگر قفلگذاری نرم افزاری و همچنین برخی از روشهای قفلگذاری روس سیدی را بررسی مینماییم.
5- قفل با استفاده از شماره سریال ساختگی
این روش قفلگذاری که قویترین قفل میباشد، بصورت مخلوطی از روشهای 1 و 4 میباشد(به قسمت دوم مراجعه نمایید) یعنی ابتدا تراک خاصی را بصورت غیر استاندارد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار میدهند (شماره سریال فرضی). این قفل فقط جهت فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود 98%-90% میباشد.
6- قفلهای اکتیو ایکس
در واقع یک اکتیو ایکس که مانع اجرای برنامه در شرایط خاصی شود را قفل اکتیو ایکس مینامند. این نوع قفل مانند سایر کامپوننتهای برنامه نویسی است. برنامه نویس به سادگی آن را بر روی فرم برنامه خود قرار میدهد و با تنظیم پارامترها و خصوصیات آن، سبب فعالیت آن میشود. این اکتیو ایکس قبل از قرار گرفتن فرم اصلی در حافظه، شروع به کار میکند و اگر برای اولین بار اجرا میشود برحسب اندازه حافظه، شمارهی سریال و سرعت پردازنده کد ویژه ای تولید میکند این کد تولید شده وابسته به خصوصیات کامپیوتر است بنابراین کد برگشتی این اکتیو ایکس بر روی هر سیستمی متفاوت خواهد بود. پس از ارائه کد، کد معادل آن را از کاربر درخواست میکند. کاربر با ارائه کد تولید شده به شرکت تولید کننده نرم افزار کد معادل آن را دریافت میکند. این کد را کاربر یا از طریق تلفن یا از طریق پست الکترونیکی و یا اینترنت دریافت میکند در صورتیکه کد معادل دریافت شده پس از کد شدن معادل کد ارائه شده باشد یا به عبارتی دیگر کد ارائه شده از طرف کامپیوتر مکمل کد دریافت شده از شرکت باشد اکتیو ایکس اجازه میدهد که برنامه بدون اشکال شروع به کار کند. کاربر نیز میتواند بارها از این کد بر روی کامپیوتر خود (کامپیوتری که کد دریافت کرده) استفاده کند. پس از ورود کد، این کد در مکانی از سیستم مثلاً رجیستری یا یک فایل بصورت کد شده قرار میگیرد و هر بار کامپیوتر برنامه را اجرا کند به جای درخواست کد از کاربر، کد را از رجیستری یا فایل پس از کدیابی مورد استفاده قرار میدهد.
این مبحث ادامه دارد....