پنجشنبه, ۱۳ اردیبهشت, ۱۴۰۳ / 2 May, 2024
مجله ویستا

روشهای Crack در PC


روشهای Crack در PC
در این مقاله به این موضوع خواهیم پرداخت كه چگونه اكثر روشهای محافظت در برابر كپی گرفتن از INT۱۳ استفاده خواهند كرد. برای شروع تاكید می‌كنیم كه آشنایی با اسمبلر و چگونگی استفاده از Debug مورد نیاز خواهند بود، زیرا این دو نقش مهمی در روشهای Crack كردن ایفا خواهند كرد.
● مروری بر INT-۱۳
بسیاری از روشهای محافظت در برابر كپی گرفتن از وقفه دیسك (INT-۱۳) استفاده می‌كنند. INT-۱۳ اغلب برای خواندن یك تراك یا سكتوری كه بطور غیرمعمول فرمت شده یا برای نوشتن یا فرمت كردن تراك یا سكتوری كه آسیب دیده است، بكار برده می شود. INT-۱۳ مانند هر وقفه دیگر با فرمان اسمبلر INT-۱۳ (CD۱۳) فراخوانی می‌شود. [AH] برای انتخاب فرمان موردنظر با اكثر رجیسترهای بكار رفته در داده‌ها استفاده می‌شود.
● روش Crack كردن INT-۱۳
اگرچه، INT-۱۳ تقریباً در همه روشهای محافظتی بكار می‌رود، اما فایلهای DOS آسانترین آنها برای Crack كردن است. توجه داریم كه برنامه محافظتی ممكن است از INT-۱۳ برای بارگذاری برخی از داده‌های دیگر از یك سكتور یا تراك عادی روی دیسك استفاده كند، بنابراین تعیین تراكها یا سكتورهایی كه برای روش محافظتی مهم هستند، حائز اهمیت است. برای این منظور می‌توان از برنامه Lock smITH(LS) یا دیسكت analyser برای تحلیل دیسكت استفاده كنیم. هرگونه تراك یا سكتوری كه بنظر غیرعادی است یادداشت نمایید. این تراكها به احتمال زیاد بخشی از روتین محافظتی هستند.
حال دیباگ را اجرا می‌كنیم. بعد از بارگذاری شدن فایل اجرایی جستجویی را برای CD۱۳ انجام دهید. هر آدرسی كه نشان داده می‌شود، یادداشت كنید.
اگر هیچ آدرسی پیدا نشد، می‌تواند دو حالت وجود داشته باشد. اینكه اولاً برنامه دارای محافظتی در برابر كپی گرفتن نیست یا این كنترل روی بخش دیگری از برنامه صورت گرفته كه هنوز بارگذاری نشده است. یك مورد دیگر هم وجود دارد و آن اینكه ممكن است خود CD۱۳ نیز بصورت كد مخفی شده باشد. در اینجا نشان داده‌ایم كه بك بخش از كد مخفی شده ممكن است چگونه باشد:
-U CS:۰۰۰۰
۱B۰۰:۰۰۰۰ ۳۱DB XOR BX,BX
۱B۰۰:۰۰۰۲ ۸EDB MOV DS,BX
۱B۰۰:۰۰۰۴ BB۰D۰۰ MOV BX,۰۰۰D
۱B۰۰:۰۰۰۷ ۸A۰۷ MOV AL,[BX]
۱B۰۰:۰۰۰۹ ۳۴۱۲ XOR AL,۱۲
۱B۰۰:۰۰۰B ۸۸۰۷ MOV [BX],AL
۱B۰۰:۰۰۰D DF۱۳ FIST WORD...
در این بخش از كد، AL در محل ۱۳۰۰:۰۰۰۷ برابر DF می‌شود. هنگامی كه شما ۱۲ و DF را XOR می‌كنید، برای كد INT یك CD(hex) بدست می‌آورید كه درست پس از آن عدد ۱۳ قرار گرفته می شود، كه به شما CD۱۳ یا INT-۱۳ را می‌دهد. توجه دارید كه این نوع كد نمی‌تواند با استفاده از فرمان [S]earch دیباگ پیدا شود.
● یافتن INT-۱۳ مخفی شده
یك راه برای پیداكردن INT-۱۳ كد شده استفاده از فرمان [G] دیباگ است. فقط یك Break Point در آدرس داده شده توسط PC-WATCH قرار دهید (هر دو برنامه آدرس را برمی‌گردانند). مثلاً در كد بالا –G CS:۰۰۰F دیباگ متوقف می‌شود، شما INT-۱۳ را پیدا نمی‌كنید اما چیزهایی خواهید یافت كه شما را به سمت آن هدایت می‌كند.
● پس از پیداكردن INT-۱۳ چه كاری باید انجام داد
هنگامی كه INT-۱۳ را می‌یابید، سخترین قسمت كار انجام شده است. آنچه كه باقی می‌ماند فریب دادن برنامه است به گونه‌ایی كه تصور كند قفل محافظت وجود دارد. برای یافتن آنچه كه برنامه بدنبال آن است، كد را درست پس از INT-۱۳ امتحان كنید. بدنبال انشعاباتی باشید كه در رابطه با CARRYFLAG یا هر CMP با رجیستر باشد. اگر با یك JNE یا JC غیره برخورد كردید، آدرس لیست شده مربوط به Jump را به زبان اسمبلی بازگردانید. اگر كه CMP است فقط آن را بخوانید.
در اینجا باید مشخص كنید كه آیا برنامه بدنبال یك تراك محافظت شده یا یك تراك عادی است. اگر برنامه دارای یك CMP AH,D باشد و در یك تراك محافظت شده خوانده شده باشد، می‌توان فرض كرد كه بدنبال آن است تا ببیند آیا برنامه با موفقیت خواندن یا فرمت كردن آن تراك را انجام داده و یا اینكه آیا دیسك كپی شده است، بنابراین (معمولاً) به سیستم عامل DOS باز می‌گردد. در این صورت، فقط بایتها را برای CMP و JMP مشابه NOP كنید.
اگر برنامه فقط كنترل كند كه Carryflag یك شده است یا نه، در صورتی كه این تغییر صورت نگرفته باشد، برنامه معمولاً تصور می‌كند كه دیسك كپی شده است. كد زیر را امتحان كنید.
INT ۱۳ <-- Read in the sector
JC ۱B۰۰ <-- Protection found
INT ۱۹ <-- Reboot
۱B۰۰ (rest of program)
برنامه، INT را انجام می‌دهد و خطا (سكتوری كه بطور غیر معمولی فرمت شده) می‌دهد، بنابراین Carryflag ست شده است. برنامه در دستورالعمل بعدی می‌بیند كه Carryflag یك شده و می‌داند كه محافظت انجام نشده است. در این صورت، برای فریب دادن برنامه، فقط "JC B۰۰" را به "JMP B۰۰" تغییر دهید، بنابراین طرح محافظتی شكست می‌خورد. توجه دارید كه روتینهای محافظتی ممكن است در بیشتر از یك بخش از برنامه وجود داشته باشند.
● كاركردن با فایلهای EXE در دیباگ
همانطور كه می‌دانید، دیباگ می‌تواند فایلهای EXE را بخواند اما نمی‌تواند در آنها بنویسید. برای انجام این كار می‌بایست فایل EXE را بطور عادی بارگذاری كرده و برنامه را Crack كنید. هنگامی كه طرح محافظتی یافته و آزمایش شد، با استفاده از فرمان [D]UMP دیباگ آدرس +۱۰, -۱۰ بایت از كد اطراف INT۱۳ را یادداشت نمایید. به سیستم عامل DOS باز گردید و فایل را به یك .ZAP (هر پسوندی غیر از .EXE) نامگذاری كنید و آن را با دیباگ مجدداً بارگذاری كنید. برنامه را برای +۲۰ بایت اطراف كد جستجو كنید و آدرسی را كه پیدا كرده‌اید یادداشت كنید. پس فقط این بخش را بارگذاری نمایید و طبق معمول ویرایش كنید. فایل را ذخیره كرده و سیستم عامل DOS بازگردید. نام فایل را مجدداً به .EXE برگردانید و این فایل Crack شده می‌باشد. روش دیگر استفاده از DiskEdit نرم افزار Norton Utility می‌باشد.
دیسك ورودی و خروجی (INT-۱۳)
وفقه ۱۳ از رجیستر AH استفاده می‌كند تا تابع موردنیاز را انتخاب نماید. در اینجا جدولی را آورده‌ایم كه این وقفه را شرح می‌دهد.
AH=۰ Reset Disk
AH=۱ Read the Status of the Disk system in to AL
● AL Error
۰۰ - Successful
۰۱ - Bad command given to INT
*۰۲ - Address mark not found
۰۳ - write attempted on write protected disk
*۰۴ - request sector not found
۰۸ - DMA overrun
۰۹ - attempt to cross DMA boundary
*۱۰ - bad CRC on disk read
۲۰ - controller has failed
۴۰ - seek operation failed
۸۰ - attachment failed
(* denotes most used in copy protection)
AH=۲ Read Sectors
input
DL = Drive number (۰-۳)
DH = Head number (۰or۱)
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 =۳ Write (params. as above)
AH =۴ Verify (params. as above -ES:BX)
AH=۵ Format (params. as above -CL,AL
ES:BX points to format Table)
منبع : P۳۰World Forums