محدوديت در تعداد کپي (Copy Limited)
در اين حالت برنامه نصب کننده نرم افزار، فضاي مشخصي در ديسک را با روش خاصي فرمت کرده و تعداد مجاز نسخه برداري را در آن درج ميکند. بدين طريق با هر بار کپي کردن برنامه، يک واحد از اين عدد کم ميشود و هنگامي که تعداد مجاز آن به صفر رسيد، ديگر نميتوان برنامه را بر روي سيستم نصب نمود. حال ممکن است اين سوال مطرح شود که مگر نميتوان پس از نصب برنامه، از آن پشتيبان (Back up) گرفته و سپس از نسخه پشتيبان نيز، بر روي سيستم ديگري استفاده نمود؟ پاسخ منفي است. زيرا هنگام نصب، اطلاعاتي راجع به سخت افزار سيستم که ميتواند مثلاً شامل نوع قطعات و يا شماره سريال قطعات باشد، در جايي، در محدوده قفل ذخيره ميشود و از اين پس هر بار در هنگام اجراي برنامه، اين اطلاعات به دقت چک ميشود و در صورت هر گونه تغيير، برنامه اجرا نميشود. با ادامه اين بخش آموزش تعميرات کامپيوتر همراه من باشيد .
استفاده از ديسکت، در هنگام برنامه (Required Disk)
در اين حالت، ديسکت مورد نظر، يا به روش خاصي فرمت ميشود و سپس در هنگام اجرا، اطلاعات روي آن بررسي ميشود و يا اينکه قسمتي از ديسکت را بصورت فيزيکي و عمدي خراب ميکنند و در اينجا، در واقع همان صدمهاي که به عمد، بر سطح ديسکت وارد شده است، به عنوان قفل و محافظ نرم افزار عمل ميکند. از اين پس براي انتقال برنامه از يک سيستم به سيستم ديگر، اين فلاپي مانند قفل سخت افزاري عمل ميکند و ميبايست مختصات آن توسط برنامه تاييد شود و چنانچه اين فلاپي در درايو نباشد، برنامه اجرا نخواهد شد.
آشنايي با نحوه قفلگذاري بر روي يک برنامه
الف: طراح به سورس برنامه دسترسي دارد. در اين حالت طراح پس از انتخاب روش قفل گذاري، کافيست آن را به زبان مورد نظر خود پياده سازي نموده و در برنامه خود بگنجاند.
ب: طراح (مجري پروژه) به سورس برنامه دسترسي ندارد. گاهي اوقات به يکسري برنامههاي ارزشمندي برخورد ميکنيم که فاقد قفل هستند، بنابراين نياز به قفلگذاري وجود دارد (البته اين حالت بيشتر در کشور ما و چند کشور ديگر که در آن ها قانون 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% ميباشد.