روشهاي Crack در PC
در اين مقاله به اين موضوع خواهيم پرداخت كه چگونه اكثر روشهاي محافظت در برابر كپي گرفتن از INT13 استفاده خواهند كرد. براي شروع تاكيد ميكنيم كه آشنايي با اسمبلر و چگونگي استفاده از Debug مورد نياز خواهند بود، زيرا اين دو نقش مهمي در روشهاي Crack كردن ايفا خواهند كرد.
مروري بر INT-13
بسياري از روشهاي محافظت در برابر كپي گرفتن از وقفه ديسك (INT-13) استفاده ميكنند. INT-13 اغلب براي خواندن يك تراك يا سكتوري كه بطور غيرمعمول فرمت شده يا براي نوشتن يا فرمت كردن تراك يا سكتوري كه آسيب ديده است، بكار برده مي شود. INT-13 مانند هر وقفه ديگر با فرمان اسمبلر INT-13 (CD13) فراخواني ميشود. [AH] براي انتخاب فرمان موردنظر با اكثر رجيسترهاي بكار رفته در دادهها استفاده ميشود.
روش Crack كردن INT-13
اگرچه، INT-13 تقريباً در همه روشهاي محافظتي بكار ميرود، اما فايلهاي DOS آسانترين آنها براي Crack كردن است. توجه داريم كه برنامه محافظتي ممكن است از INT-13 براي بارگذاري برخي از دادههاي ديگر از يك سكتور يا تراك عادي روي ديسك استفاده كند، بنابراين تعيين تراكها يا سكتورهايي كه براي روش محافظتي مهم هستند، حائز اهميت است. براي اين منظور ميتوان از برنامه Lock smITH(LS) يا ديسكت analyser براي تحليل ديسكت استفاده كنيم. هرگونه تراك يا سكتوري كه بنظر غيرعادي است يادداشت نماييد. اين تراكها به احتمال زياد بخشي از روتين محافظتي هستند.
حال ديباگ را اجرا ميكنيم. بعد از بارگذاري شدن فايل اجرايي جستجويي را براي CD13 انجام دهيد. هر آدرسي كه نشان داده ميشود، يادداشت كنيد.
اگر هيچ آدرسي پيدا نشد، ميتواند دو حالت وجود داشته باشد. اينكه اولاً برنامه داراي محافظتي در برابر كپي گرفتن نيست يا اين كنترل روي بخش ديگري از برنامه صورت گرفته كه هنوز بارگذاري نشده است. يك مورد ديگر هم وجود دارد و آن اينكه ممكن است خود CD13 نيز بصورت كد مخفي شده باشد. در اينجا نشان دادهايم كه بك بخش از كد مخفي شده ممكن است چگونه باشد:
-U CS:0000
1B00:0000 31DB XOR BX,BX
1B00:0002 8EDB MOV DS,BX
1B00:0004 BB0D00 MOV BX,000D
1B00:0007 8A07 MOV AL,[BX]
1B00:0009 3412 XOR AL,12
1B00:000B 8807 MOV [BX],AL
1B00:000D DF13 FIST WORD...
در اين بخش از كد، AL در محل 1300:0007 برابر DF ميشود. هنگامي كه شما 12 و DF را XOR ميكنيد، براي كد INT يك CD(hex) بدست ميآوريد كه درست پس از آن عدد 13 قرار گرفته مي شود، كه به شما CD13 يا INT-13 را ميدهد. توجه داريد كه اين نوع كد نميتواند با استفاده از فرمان [S]earch ديباگ پيدا شود.
يافتن INT-13 مخفي شده
يك راه براي پيداكردن INT-13 كد شده استفاده از فرمان [G] ديباگ است. فقط يك Break Point در آدرس داده شده توسط PC-WATCH قرار دهيد (هر دو برنامه آدرس را برميگردانند). مثلاً در كد بالا –G CS:000F ديباگ متوقف ميشود، شما INT-13 را پيدا نميكنيد اما چيزهايي خواهيد يافت كه شما را به سمت آن هدايت ميكند.
پس از پيداكردن INT-13 چه كاري بايد انجام داد
هنگامي كه INT-13 را مييابيد، سخترين قسمت كار انجام شده است. آنچه كه باقي ميماند فريب دادن برنامه است به گونهايي كه تصور كند قفل محافظت وجود دارد. براي يافتن آنچه كه برنامه بدنبال آن است، كد را درست پس از INT-13 امتحان كنيد. بدنبال انشعاباتي باشيد كه در رابطه با CARRYFLAG يا هر CMP با رجيستر باشد. اگر با يك JNE يا JC غيره برخورد كرديد، آدرس ليست شده مربوط به Jump را به زبان اسمبلي بازگردانيد. اگر كه CMP است فقط آن را بخوانيد.
در اينجا بايد مشخص كنيد كه آيا برنامه بدنبال يك تراك محافظت شده يا يك تراك عادي است. اگر برنامه داراي يك CMP AH,D باشد و در يك تراك محافظت شده خوانده شده باشد، ميتوان فرض كرد كه بدنبال آن است تا ببيند آيا برنامه با موفقيت خواندن يا فرمت كردن آن تراك را انجام داده و يا اينكه آيا ديسك كپي شده است، بنابراين (معمولاً) به سيستم عامل DOS باز ميگردد. در اين صورت، فقط بايتها را براي CMP و JMP مشابه NOP كنيد.
اگر برنامه فقط كنترل كند كه Carryflag يك شده است يا نه، در صورتي كه اين تغيير صورت نگرفته باشد، برنامه معمولاً تصور ميكند كه ديسك كپي شده است. كد زير را امتحان كنيد.
INT 13 <-- Read in the sector
JC 1B00 <-- Protection found
INT 19 <-- Reboot
1B00 (rest of program)
برنامه، INT را انجام ميدهد و خطا (سكتوري كه بطور غير معمولي فرمت شده) ميدهد، بنابراين Carryflag ست شده است. برنامه در دستورالعمل بعدي ميبيند كه Carryflag يك شده و ميداند كه محافظت انجام نشده است. در اين صورت، براي فريب دادن برنامه، فقط "JC B00" را به "JMP B00" تغيير دهيد، بنابراين طرح محافظتي شكست ميخورد. توجه داريد كه روتينهاي محافظتي ممكن است در بيشتر از يك بخش از برنامه وجود داشته باشند.
كاركردن با فايلهاي EXE در ديباگ
همانطور كه ميدانيد، ديباگ ميتواند فايلهاي EXE را بخواند اما نميتواند در آنها بنويسيد. براي انجام اين كار ميبايست فايل EXE را بطور عادي بارگذاري كرده و برنامه را Crack كنيد. هنگامي كه طرح محافظتي يافته و آزمايش شد، با استفاده از فرمان [D]UMP ديباگ آدرس +10, -10 بايت از كد اطراف INT13 را يادداشت نماييد. به سيستم عامل DOS باز گرديد و فايل را به يك .ZAP (هر پسوندي غير از .EXE) نامگذاري كنيد و آن را با ديباگ مجدداً بارگذاري كنيد. برنامه را براي +20 بايت اطراف كد جستجو كنيد و آدرسي را كه پيدا كردهايد يادداشت كنيد. پس فقط اين بخش را بارگذاري نماييد و طبق معمول ويرايش كنيد. فايل را ذخيره كرده و سيستم عامل DOS بازگرديد. نام فايل را مجدداً به .EXE برگردانيد و اين فايل Crack شده ميباشد. روش ديگر استفاده از DiskEdit نرم افزار Norton Utility ميباشد.
ديسك ورودي و خروجي (INT-13)
وفقه 13 از رجيستر AH استفاده ميكند تا تابع موردنياز را انتخاب نمايد. در اينجا جدولي را آوردهايم كه اين وقفه را شرح ميدهد.
AH=0 Reset Disk
AH=1 Read the Status of the Disk system in to AL
AL Error
---------------------------------
00 - Successful
01 - Bad command given to INT
*02 - Address mark not found
03 - write attempted on write protected disk
*04 - request sector not found
08 - DMA overrun
09 - attempt to cross DMA boundary
*10 - bad CRC on disk read
20 - controller has failed
40 - seek operation failed
80 - attachment failed
(* denotes most used in copy protection)
AH=2 Read Sectors
input
DL = Drive number (0-3)
DH = Head number (0or1)
CH = Track number
CL = Sector number
AL = # of sectors to read
ES:BX = load address
output
AH =error number (see above)
[Carry Flag Set]
AL = # of sectors read
AH =3 Write (params. as above)
AH =4 Verify (params. as above -ES:BX)
AH=5 Format (params. as above -CL,AL
ES:BX points to format Table
علاقه مندی ها (بوک مارک ها)