anaraki
18 January 2006, 11:17 PM
این مقاله طرز پیدا کردن سریال واقعی را نشان میدهد.
برای اینکه ببینیم برنامه از کجا چک کردن سریال را آغاز میکند از bpx GetDlgItemTextA میتوانیم استفاده میکنیم.
00401078 E8 F4000000 CALL <JMP.&USER32.GetDlgItemTextA> \در اینجا سریالی که وارد کردیم وارد حافظه میشود
0040107D 6A 00 PUSH 0
0040107F 6A 00 PUSH 0
00401081 68 C8204000 PUSH abexcrac.004020C8
00401086 68 90214000 PUSH abexcrac.00402190
0040108B 68 94214000 PUSH abexcrac.00402194
00401090 6A 32 PUSH 32
00401092 68 5C224000 PUSH abexcrac.0040225C
00401097 6A 00 PUSH 0
00401099 E8 B5000000 CALL <JMP.&KERNEL32.GetVolumeInformation>
0040109E 68 F3234000 PUSH abexcrac.004023F3 \"4562-ABEX"به این رشته اشاره میکند
004010A3 68 5C224000 PUSH abexcrac.0040225C \به رشته تهی اشاره میکند
004010A8 E8 94000000 CALL <JMP.&KERNEL32.lstrcatA> \قرار میدهد 40225C رشته بالا را در آدرس
004010AD B2 02 MOV DL,2 \قراردادن شمارش گر با 2
004010AF 8305 5C224000 01 ADD DWORD PTR DS:[40225C],1 \یکی به اولین بایت اضافه کن
004010B6 8305 5D224000 01 ADD DWORD PTR DS:[40225D],1 \یکی به دومین بایت اضافه کن
004010BD 8305 5E224000 01 ADD DWORD PTR DS:[40225E],1 \یکی به سومین بایت اضافه کن
004010C4 8305 5F224000 01 ADD DWORD PTR DS:[40225F],1 \یکی به چهارمین بایت اضافه کن
004010CB FECA DEC DL \کم کردن یک از شمارش گر
004010CD ^75 E0 JNZ SHORT abexcrac.004010AF \اگر صفر شد نپرد
004010CF 68 FD234000 PUSH abexcrac.004023FD \"L2C-5781" اشاره میکند به این رشته
004010D4 68 00204000 PUSH abexcrac.00402000 \به رشته تهی اشاره میکند
004010D9 E8 63000000 CALL <JMP.&KERNEL32.lstrcatA> \قراردادن رشته بالایی در آدرس 402000
004010DE 68 5C224000 PUSH abexcrac.0040225C \6784-ABEX به این رشته که پس از اضافه شدن 2 به اولین 4 بایت بدست آمده اشاره میکند
004010E3 68 00204000 PUSH abexcrac.00402000 \ L2C-5781 به این رشته اشاره میکند
004010E8 E8 54000000 CALL <JMP.&KERNEL32.lstrcatA> \ L2C-57816784-ABEX اضافه کردن 2 رشته بالا=
004010ED 68 24234000 PUSH abexcrac.00402324 \به رشته ای که تایپ کردیم اشاره میکند
004010F2 68 00204000 PUSH abexcrac.00402000 \به آخرین رشته ای که بدست آوردیم اشاره میکند
004010F7 E8 51000000 CALL <JMP.&KERNEL32.lstrcmpiA> \دو رشته را مقایسه میکند
004010FC 83F8 00 CMP EAX,0 \چک میکند که آیا برابر صفر است
004010FF 74 16 JE SHORT abexcrac.00401117 \اگر اینطور بود برو به پیغام مناسب
00401101 6A 00 PUSH 0 \وگرنه برو به پیغام خطا
00401103 68 34244000 PUSH abexcrac.00402434 ; ASCII "Error!"
00401108 68 3B244000 PUSH abexcrac.0040243B ; ASCII "The serial you entered is not correct!"
آخر کار
سریال واقعی در آدرس 004010E8 بدست می آید که در آدرس 4010F7 با رشته ای که وارد کردیم مقایسه میشود
برای اینکه ببینیم برنامه از کجا چک کردن سریال را آغاز میکند از bpx GetDlgItemTextA میتوانیم استفاده میکنیم.
00401078 E8 F4000000 CALL <JMP.&USER32.GetDlgItemTextA> \در اینجا سریالی که وارد کردیم وارد حافظه میشود
0040107D 6A 00 PUSH 0
0040107F 6A 00 PUSH 0
00401081 68 C8204000 PUSH abexcrac.004020C8
00401086 68 90214000 PUSH abexcrac.00402190
0040108B 68 94214000 PUSH abexcrac.00402194
00401090 6A 32 PUSH 32
00401092 68 5C224000 PUSH abexcrac.0040225C
00401097 6A 00 PUSH 0
00401099 E8 B5000000 CALL <JMP.&KERNEL32.GetVolumeInformation>
0040109E 68 F3234000 PUSH abexcrac.004023F3 \"4562-ABEX"به این رشته اشاره میکند
004010A3 68 5C224000 PUSH abexcrac.0040225C \به رشته تهی اشاره میکند
004010A8 E8 94000000 CALL <JMP.&KERNEL32.lstrcatA> \قرار میدهد 40225C رشته بالا را در آدرس
004010AD B2 02 MOV DL,2 \قراردادن شمارش گر با 2
004010AF 8305 5C224000 01 ADD DWORD PTR DS:[40225C],1 \یکی به اولین بایت اضافه کن
004010B6 8305 5D224000 01 ADD DWORD PTR DS:[40225D],1 \یکی به دومین بایت اضافه کن
004010BD 8305 5E224000 01 ADD DWORD PTR DS:[40225E],1 \یکی به سومین بایت اضافه کن
004010C4 8305 5F224000 01 ADD DWORD PTR DS:[40225F],1 \یکی به چهارمین بایت اضافه کن
004010CB FECA DEC DL \کم کردن یک از شمارش گر
004010CD ^75 E0 JNZ SHORT abexcrac.004010AF \اگر صفر شد نپرد
004010CF 68 FD234000 PUSH abexcrac.004023FD \"L2C-5781" اشاره میکند به این رشته
004010D4 68 00204000 PUSH abexcrac.00402000 \به رشته تهی اشاره میکند
004010D9 E8 63000000 CALL <JMP.&KERNEL32.lstrcatA> \قراردادن رشته بالایی در آدرس 402000
004010DE 68 5C224000 PUSH abexcrac.0040225C \6784-ABEX به این رشته که پس از اضافه شدن 2 به اولین 4 بایت بدست آمده اشاره میکند
004010E3 68 00204000 PUSH abexcrac.00402000 \ L2C-5781 به این رشته اشاره میکند
004010E8 E8 54000000 CALL <JMP.&KERNEL32.lstrcatA> \ L2C-57816784-ABEX اضافه کردن 2 رشته بالا=
004010ED 68 24234000 PUSH abexcrac.00402324 \به رشته ای که تایپ کردیم اشاره میکند
004010F2 68 00204000 PUSH abexcrac.00402000 \به آخرین رشته ای که بدست آوردیم اشاره میکند
004010F7 E8 51000000 CALL <JMP.&KERNEL32.lstrcmpiA> \دو رشته را مقایسه میکند
004010FC 83F8 00 CMP EAX,0 \چک میکند که آیا برابر صفر است
004010FF 74 16 JE SHORT abexcrac.00401117 \اگر اینطور بود برو به پیغام مناسب
00401101 6A 00 PUSH 0 \وگرنه برو به پیغام خطا
00401103 68 34244000 PUSH abexcrac.00402434 ; ASCII "Error!"
00401108 68 3B244000 PUSH abexcrac.0040243B ; ASCII "The serial you entered is not correct!"
آخر کار
سریال واقعی در آدرس 004010E8 بدست می آید که در آدرس 4010F7 با رشته ای که وارد کردیم مقایسه میشود