آشنایی با چگونگی ساخت قفل های نرم افزاری (قسمت دوم)
● آشنایی با روتین های ضد دیباگ Anti Debug Procedures:
همان طوری که توضیح داده شد، روتین های ضد دیباگ جهت جلوگیری از اجرای برنامه های دیباگر و یا حداقل جهت مشکل تر کردن کار دستکاری قفل توسط قفل شکنان، استفاده می شود. در زیر چند روش به عنوان مثال آورده شده است:
الف) غیر فعال کردن وقفه ها جهت جلوگیری از اجرای مرحله به مرحله ( Trace کردن ) برنامه:
می توان وقفه های کنترلر 8359 را غیر فعال ساخت. (در مورد وقفه ها بحث های نسبتا مفصل و کاملی در سایت میکرو رایانه انجام شده برای مطالعه بیشتر دراین مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) آدرس این کنترلر 21h بوده و IRQ های 7 0 را کنترل می کند IRQ1 همان وقفه مربوط به صفحه کلید می باشد. پس با غیر فعال کردن این وقفه می توان صفحه کلید را غیر فعال نمود. طریقه استفاده:
CS:0100 E421 IN AL,21
CS:0102 0C02 OR AL,02
CS:0104 E621 OUT 21,AL
ب) تغییر بردار وقفه ها
یکی از روش های ساده و راحت جهت ضد دیباگ کردن برنامه ها تغییر برداری است که دیباگر از آن استفاده می کند. (03 ) حتما بخاطر بسپارید که در پایان برنامه دوباره آدرس بردار وقفه تغییر داده شده را بازیابی کنید. طریقه استفاده:
CS:0100 EB04 JMP 0106
CS:0102 0000 ADD [BX+SI],AL
CS:0104 0000 ADD [BX+SI],AL
CS:0106 31C0 XOR AX,AX
CS:0108 8EC0 MOV ES,AX
CS:010A 268B1E0C00 MOV BX,ES:[000C]
CS:010F 891E0201 MOV [0102],BX
CS:0113 268B1E0E00 MOV BX,ES:[000E]
CS:0118 891E0401 MOV [0104],BX
CS:011C 26C7064C000000 MOV Word Ptr ES:[000C],0000
CS:0123 26C7064E000000 MOV Word Ptr ES:[000E],0000
ج) گیج کردن دیباگر
این راه یکی از قویترین تکنیک های ضد دیباگ بوده که در آن به وسط یک دستور، پرش می شود و اینکار باعث قفل کردن (Hang) دیباگر خواهد شد. طریقه استفاده:
CS:0100 E421 IN AL,21
CS:0102 B0FF MOV AL,FF
CS:0104 EB02 JMP 0108
CS:0106 C606E62100 MOV Byte Ptr [21E6],00
CS:010B CD20 INT 20
د) کنترل پرچم های CPU
این روش در برابر دیباگرها بسیار مفید می باشد و به این صورت است که ابتدا پرچم Trace از CPU را خاموش کرده و در بین برنامه آنرا کنترل کنیم. در صورتی که این پرچم روشن شده باشد، مشخص است که دیباگر در پشت صحنه در حال اجراست. طریقه استفاده:
CS:0100 9C PUSHF
CS:0101 58 POP AX
CS:0102 25FFFE AND AX,FEFF
CS:0105 50 PUSH AX
CS:0106 9D POPF
و در بین برنامه از دستورات ذیل استفاده کنید:
CS:1523 9C PUSHF
CS:1524 58 POP AX
CS:1525 250001 AND AX,0100
CS:1528 7402 JZ 152C
CS:152A CD20 INT 20
ه) متوقف ساختن دیباگر
این روش باعث متوقف شدن دیباگر می شود که با اجرای دستور ساده INT 03 می توان این کار را انجام داد. طریقه استفاده:
CS:0100 B96402 MOV CX,0264
CS:0103 BE1001 MOV SI,0110
CS:0106 AC LODSB CS:0107 CC INT 3
CS:0108 98 CBW
CS:0109 01C3 ADD BX,AX
CS:010B E2F9 LOOP 0106 *****
● روش های کد کردن اطلاعات Data Coding Procedures:
الف) افزودن یک عدد به کد های یک فایل
در این روش جهت کد کردن یک فایل، ابتدا آن را خوانده و سپس یک مقدار خاص، مثلا 20 را به مقدار هر بایت فایل اضافه می کنیم. این یکی از ساده ترین روش ها بوده و نسبتا کارایی خوبی نیز دارد. جهت خارج کردن فایل از حالت کد شده (Decode) نیز، کافیست مقدار فوق را از تمام بایت های فایل کم کنیم.
ب) XOR کردن کل فایل
در این روش نیز پس از خواندن کل فایل، تمام بایت های آن را با رشته کاراکتری یا عدد ثابت خاصی XOR کرده و سپس مقدار جدید را در فایل حاصل ضبط می نمائیم. جهت خارج کردن فایل از حالت کد شده، دقیقا عکس آن را انجام می دهیم.
● سایر مقالات مرتبط با این موضوع