امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
طریقه از بین بردن محدودیت زمانی
نویسنده پیام
godvb غایب
مدیر بازنشسته بخش نفوذ و امنیت
*****

ارسال‌ها: 430
موضوع‌ها: 77
تاریخ عضویت: اسفند ۱۳۸۶

تشکرها : 886
( 1338 تشکر در 343 ارسال )
ارسال: #1
طریقه از بین بردن محدودیت زمانی
سلام .
در این مقاله طریقه از بین بردن محدودیت زمانی را آموزش میدهم .ابزار :
1. OllyDBG
2. فایل exe برای کرک کردن هم در پایین پیوست شده که تمامی توضیحات هم براساس آن میباشد .

» آموزش :


برای اینکه یک برنامه بفهمد که چه مدت بر روی کامپیوتر نصب شده است یا چند بار اجرا شده است باید از registry یا فایلی را که قبلا در هارد ذخیره کرده است را برگرداند.برای اینکار از تابع های زیادی از جمله توابع زیر استفاده میکند



GetLocalTime
GetSystemTime
GetSystemTimeAsFileTime



(با زدن کلید CTRL+A در ollydbg به توضیحات بیشتری دست پیدا میکنیم)

حالا برنامه را در ollydbg لود میکنیم.یک breackpoint بوسیله bpx GetSystemTime قرار میدهیم.کلید F9 را میزنیم تا برنامه در قسمت موردنظر بایستد

کد:
0040100C  |. 6A 00          PUSH 0                                  

0040100E  |. 68 80000000    PUSH 80                                  

00401013  |. 6A 03          PUSH 3                                  

00401015  |. 6A 00          PUSH 0         \خواص امنیتی ندارد                                  

00401017  |. 6A 00          PUSH 0          \حالت اشتراک ندارد                                

00401019  |. 68 000000C0    PUSH C0000000    \برای خواندن و نوشتن باز کند                        

0040101E  |. 68 A2304000    PUSH timetria.004030A2    \DATA.DET قراردادن              

00401023  |. E8 DE010000    CALL <JMP.&KERNEL32.CreateFileA>  \بازکردن فایل      

00401028  |. 83F8 FF        CMP EAX,-1     \مقایسه میکند که اگر باز نکرده باشد

0040102B  |. 74 07          JE SHORT timetria.00401034   \اگر این طور بود برو به پیغام خطا

0040102D  |. A3 14314000    MOV DWORD PTR DS:[403114],EAX  \دستور ذخیره کردن

00401032  |. EB 18          JMP SHORT timetria.0040104C     \پرش

00401034  |> 6A 30          PUSH 30                                  

00401036  |. 68 38304000    PUSH timetria.00403038                  

0040103B  |. 68 02304000    PUSH timetria.00403002                  

00401040  |. 6A 00          PUSH 0                                  

00401042  |. E8 B3010000    CALL <JMP.&USER32.MessageBoxA>          

00401047  |. E9 22010000    JMP timetria.0040116E \بپر به خروج از برنامه

0040104C  |> 6A 00          PUSH 0                                  

0040104E  |. 68 E0304000    PUSH timetria.004030E0 \خواندن بایت                  

00401053  |. 6A 32          PUSH 32                 \حداکثر 50 بایت بخواند                

00401055  |. 68 AB304000    PUSH timetria.004030AB   \ذخیره داده های فایل در حافظه موقت                

0040105A  |. FF35 14314000  PUSH DWORD PTR DS:[403114]  \;Push file handle              

00401060  |. E8 B9010000    CALL <JMP.&KERNEL32.ReadFile>            

00401065  |. 833D E0304000 >CMP DWORD PTR DS:[4030E0],0B \چک میکند که آیا 11 بایت بخواند

0040106C  |. 0F85 E9000000  JNZ timetria.0040115B        \اگر نبود برود به پیغام خطا

00401072  |. BB AB304000    MOV EBX,timetria.004030AB    \EBX ذخیره اشاره گر حافظه موقت در

00401077  |. 68 E4304000    PUSH timetria.004030E4        \قراردادن اشاره گر در ساختمان زمان سیستم          

0040107C  |. E8 97010000    CALL <JMP.&KERNEL32.GetSystemTime>      

00401081  |. 803B 00        CMP BYTE PTR DS:[EBX],0    \چک کند که اگر بعضی چیزها هنوز ذخیره نشده اند

00401084  |. 75 22          JNZ SHORT timetria.004010A8 \اگر اینطور نبود

00401086  |. 51             PUSH ECX                    \ذخیره زمان و ساعت فعلی

00401087  |. 33C9           XOR ECX,ECX                 \; in a SYSTEMTIME struct (part) in the buffer

00401089  |. EB 15          JMP SHORT timetria.004010A0  \; and do a XOR...

0040108B  |> 66:8B81 E43040>/MOV AX,WORD PTR DS:[ECX+4030E4]



00401096  |. 66:8981 AB3040>|MOV WORD PTR DS:[ECX+4030AB],AX

0040109D  |. 83C1 02        |ADD ECX,2

004010A0  |> 83F9 08         CMP ECX,8     \اگر به خواندن 8 بایت رسید

004010A3  |.^76 E6          \JBE SHORT timetria.0040108B \بپر به پایان حلقه

004010A5  |. 59             POP ECX

004010A6  |. EB 3A          JMP SHORT timetria.004010E2



در کد بالا اگر فایل باز شدد(فقط اگر موجود بود،و اگر برنامه دیگری از آن استفاده نمیکرد)محتوای فایل خوانده میشود.این باید 11 بایت باشد.

10 بایت اول قسمتی از زمان سیستم است(سال،ماه،هفته،روز،ساعت؛هر کدام 2 بایت)،هر بایت XORred با 069h میشود


کد:
004010A8  |> 8B0D AB304000  MOV ECX,DWORD PTR DS:[4030AB]    \ecxاز حافظه موقت در  dword ذخیره

004010AE  |. 81F1 69696969  XOR ECX,69696969                 \از کد خارج کردن به سال-ماه

004010B4  |. A1 E4304000    MOV EAX,DWORD PTR DS:[4030E4]    \eax ذخیره زمان سیستم در

004010B9  |. 3BC1           CMP EAX,ECX                      \چک کن اگر برابر بود

004010BB  |. 0F85 85000000  JNZ timetria.00401146            \اگر نبود برو به پیغام خطا

004010C1  |. 66:8B0D B13040>MOV CX,WORD PTR DS:[4030B1]      \cx ذخیره کلمه روز از بافر در

004010C8  |. 66:81F1 6969   XOR CX,6969                      \از کد خارج کردن روز

004010CD  |. 66:A1 EA304000 MOV AX,WORD PTR DS:[4030EA]      \ax ذخیره روز فعلی در

004010D3  |. 66:2BC1        SUB AX,CX                        \تحت روز فعلی از روز شروع

004010D6  |. 66:83F8 03     CMP AX,3                         \چک کن اگر بیشتر از 3 روز بود(در مقاله اصلی کمتر

004010DA  |. 77 6A          JA SHORT timetria.00401146       \اگر اینطور بود برو به پیغام خطا

004010DC  |. 2805 00304000  SUB BYTE PTR DS:[403000],AL  \Sub the difference from the max allowed value (days)and store.                                    

004010E2  |> A0 B5304000    MOV AL,BYTE PTR DS:[4030B5]       \گرفتن 11 بایت از بافر

004010E7  |. 34 69          XOR AL,69                         \از کد خارج کردن آن

004010E9  |. 3C 00          CMP AL,0                          \اگر صفر بود

004010EB  |. 74 59          JE SHORT timetria.00401146        \اگر بود برو به پیغام خطا

004010ED  |. FEC8           DEC AL                            \و گرنه از ارزشش 1 کم کن

004010EF  |. A2 01304000    MOV BYTE PTR DS:[403001],AL       \ذخیره ارزش

004010F4  |. 34 69          XOR AL,69                         \کد بندی آن

004010F6  |. A2 B5304000    MOV BYTE PTR DS:[4030B5],AL       \ذخیره در بافر فایل

004010FB  |. 6A 00          PUSH 0                                  

004010FD  |. 6A 00          PUSH 0                                  

004010FF  |. 6A 00          PUSH 0                                  

00401101  |. FF35 14314000  PUSH DWORD PTR DS:[403114]              

00401107  |. E8 18010000    CALL <JMP.&KERNEL32.SetFilePointer> \قرار دادن اشاره گر فایل در ابتدای فایل    

0040110C  |. 6A 00          PUSH 0                                  

0040110E  |. 68 E0304000    PUSH timetria.004030E0                  

00401113  |. 6A 0B          PUSH 0B                                  

00401115  |. 68 AB304000    PUSH timetria.004030AB                  

0040111A  |. FF35 14314000  PUSH DWORD PTR DS:[403114]              

00401120  |. E8 05010000    CALL <JMP.&KERNEL32.WriteFile> \نوشتن بافر(حافظه موقت) در فایل          

00401125  |. 833D E0304000 >CMP DWORD PTR DS:[4030E0],0B

0040112C  |. 75 2D          JNZ SHORT timetria.0040115B

0040112E  |. 6A 00          PUSH 0                                  

00401130  |. 68 74114000    PUSH timetria.00401174                  

00401135  |. 6A 00          PUSH 0                                  

00401137  |. 6A 01          PUSH 1                                  

00401139  |. FF35 F4304000  PUSH DWORD PTR DS:[4030F4]              

0040113F  |. E8 B0000000    CALL <JMP.&USER32.DialogBoxParamA>   \نمایش دیالوگ برنامه



اگر بعضی چیزهایی در فایل موجود بود،آنها را از کد خارج میکند و با زمان فعلی مقایسه میکند.اگر اختلاف بیشتر از 3 روز بود برنامه پایان پیدا میکند.چک کردن بعدی،11 بایت در فایل چک میشود،این شماره sessions left میباشد.این با هر بار اجرا کاهش پیدا میکند



پچ کردن برنامه

سه تغییر لازم است

1-در صورت چک کردن زمان سیستم نپرد



004010BB 0F8585000000 jne 00401146 -> NOP (x6)
0F8585000000 -> 909090909090



2-

004010DA 776A ja 00401146 -> NOPNOP
776A -> 9090



3-

004010EB 7459 je 00401146 -> NOPNOP

7459 -> 9090



لازم نیست کارهای زیر را انجام دهید

To make the values make sense in the DialogBox, you could patch the following too:



004010DC 280500304000 sub byte ptr [00403000], al -> mov byte ptr [00403000], 03h

004010EF A201304000 mov byte ptr [00403001], al -> mov byte ptr [00403001], 09h


فایل‌(های) پیوست شده
.zip   timetrial.zip (اندازه: 1.34 KB / تعداد دفعات دریافت: 196)

آنچه توانسته ایم انجام دهیم، لطف پرودگار بوده است.

XMen For Ever
(آخرین ویرایش در این ارسال: ۰۵-تير-۱۳۸۷, ۲۳:۰۴:۳۶، توسط godvb.)
۰۵-تير-۱۳۸۷, ۲۲:۵۳:۲۸
ارسال‌ها
پاسخ
تشکر شده توسط : Di Di, surpriser, ajlajlajl, sayberiya, xsalamx, bagel, online_on, rezaras


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  کمک در باره شکستن قفل سخت افزاری و محدودیت dicomjet5.1 arash.hadavand 8 6,328 ۲۸-آذر-۱۳۹۶, ۱۳:۱۲:۳۵
آخرین ارسال: babyy
  درخواست رفع محدودیت زمانی یک برنامه طار 1 2,120 ۰۹-اردیبهشت-۱۳۹۴, ۰۲:۲۱:۲۸
آخرین ارسال: طار
  [سوال] طریقه کرک نرم افزار vares64 1 2,585 ۲۲-آذر-۱۳۹۰, ۰۸:۱۶:۱۸
آخرین ارسال: sadra1234
  طریقه پیدا کردن سریال اصلی krengaroo 2 4,487 ۱۸-اردیبهشت-۱۳۸۹, ۰۲:۱۷:۰۸
آخرین ارسال: jaber
  طریقه رایت و ساخت سی دی های قفل دار godvb 10 15,825 ۰۶-خرداد-۱۳۸۷, ۲۰:۲۶:۱۸
آخرین ارسال: Di Di
  طریقه EXE Encryption psdcompany 4 3,602 ۲۸-شهریور-۱۳۸۶, ۱۶:۵۱:۲۲
آخرین ارسال: avini

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS