Tải bản đầy đủ (.pdf) (9 trang)

Cracker Handbook 1.0 part 108 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (92.48 KB, 9 trang )

Posted by: moonbaby

Jan 28 2004, 08:05 AM

QUOTE


Homepage : http:// www.SoftCab.com ( load from
www.softpile.com )
Production : SoftCab, Inc. (Time Sync Pro v1.3)
Copyright by : All copyrights to Time Sync Pro
Cracked File : timesync.exe ( unpacked file dumped_.exe Microsoft
Visual C++ 6.0 )
Type : Name / Serials
Packed : UPX 0.71 - 0.72 -> Markus & Laszlo
Crack Tool : OllyDbg 1.09d, ImportREC
Unpack Type : Unpack Manual
Carried Out : Correct Serial
Note : None

About Time Sync Pro v1.3
Little program that controls your computer clock.



Dùng PEiD ta biết được chương trình được nén bằng UPX 0.71 - 0.72 ->
Markus & Laszlo .

I - UNPACK :

Load chương trình lên bằng Olly. Chọn No ( không Analysis ) . Ta sẽ đến


đây :



QUOTE

00415000 > $ 60 PUSHAD
00415001 . E8 00000000 CALL timesync.00415006



Kéo màn hình xuống phía dưới cho đến khi gặp dòng lệnh :


QUOTE

00415197 > \61 POPAD
00415198 E9 A61EFFFF JMP timesync.00407043 < === Đặt
BreakPoint tại đây.
0041519D 55 DB 55 ; CHAR 'U'
0041519E 50 DB 50 ; CHAR 'P'



Sau khi đặt BreakPoint ta nhấn F9, chương trình sẽ dừng tại đây. Nhấn F7
ta đến :


QUOTE


00407043 55 PUSH EBP < === Dừng tại đây.
00407044 8BEC MOV EBP,ESP



Ngay tại đây ta chọn Plugins === > OllyDump === > Dump debugged
process . Ghi giá trị tại ô
> Modify ( ở đây là 7043 ). Nhấn OK và lưu lại chương trình ở bất cứ
tên gì mà bạn thích. Với đuôi là .exe.
Giữ nguyên chương trình , dùng chương trình ImportREC v1.6 load
timesync.exe, thay giá trị OEP mà ta vừa tìm được ở trên vào (7043 ).
Nhấn IAT Auto Search, sau khi hoàn tất nhấn tiếp Get Imports, cuối cùng
nhất Fix Dump. Chọn lấy file mà ta đã lưu ở trên.

Thế là chương trình đã được UNPACK thành công.

Để làm sạch chương trình và giảm thiểu kích thước file sau khi được
unpack ta dùng LordPE delux v1.4, chọn Rebuild PE, chọn lấy file đã
được unpack.

Kiểm tra file cuối cùng bằng PEiD, ta biết chương trình được viết bằng
Microsoft Visual C++ 6.0 .

II - SERIAL :

Chương trình này không có AntiDebug.
Chương trình này sau khi tôi UNPACK xong thì chạy bình thường, nhưng
khi load lên bằng Olly thì xuất hiện thông báo : Entry Point Alert. Vi thế
nên khi dùng Search String không thể tìm thấy gì, đòng thời dùng
Win32dsmv10 cũng không thể load lên được. Chính vì thế phải dùng

chuột kéo màn hình để tìm.
>>>>>>>> Sau khi kéo chuột lên trên một đoạn ta tìm thấy dòng :



QUOTE

0040476D 68 78F24000 PUSH dumped_.0040F278 ;
ASCII "Thank you for your support!"


>>>> Ta chọn đọan code sau để tiến hành phân tích:


QUOTE

0040475D E8 DE010000 CALL dumped_.00404940 < === Đặt
BreakPoint tại đây
00404762 85C0 TEST EAX,EAX < === Kiểm tra giá trị trả
về
00404764 74 0E JE SHORT dumped_.00404774 < == Nếu
EAX = 0 thì nhảy đến báo sai
00404766 6A 40 PUSH 40 < === Còn không thì chuyển đến
thông báo đúng.
00404768 68 94F24000 PUSH dumped_.0040F294 ;
ASCII "Thanks"
0040476D 68 78F24000 PUSH dumped_.0040F278 ;
ASCII "Thank you for your support!"
00404772 EB 1A JMP SHORT dumped_.0040478E
00404774 6A 10 PUSH 10

00404776 68 60F14000 PUSH dumped_.0040F160 ;
ASCII "Error"
0040477B C605 C80D4100 0>MOV BYTE PTR DS:[410DC8],0
00404782 C605 480E4100 0>MOV BYTE PTR DS:[410E48],0
00404789 68 40F24000 PUSH dumped_.0040F240 ;
ASCII "You have entered wrong key or name! Please try again"
0040478E 8BCE MOV ECX,ESI
00404790 E8 ABD5FFFF CALL dumped_.00401D40



Quan sát đoạn code trên ta nhận thấy lệnh CALL ở địa chỉ 0040475D là
cốt lõi của quá trình mã hoá. Trace vào trong lệnh này ta đến :


QUOTE

00404940 68 C80D4100 PUSH
dumped_.00410DC8 ; ASCII "123456789"
00404945 68 480E4100 PUSH dumped_.00410E48 ;
ASCII "Moonbaby"
0040494A E8 E1FEFFFF CALL dumped_.00404830 < ===
Trace thẳng vào trong
0040494F 83C4 08 ADD ESP,8
00404952 33C9 XOR ECX,ECX
00404954 85C0 TEST EAX,EAX < === Kiểm tra giá trị trả
về
00404956 0F9FC1 SETG CL < ==== Đúng hay Sai
00404959 8BC1 MOV EAX,ECX
0040495B C3 RETN < == Trở về chương trình chính




Cũng thế, ở đoạn code này thì lệnh CALL ở 0040494A là cốt lõi. Sau khi
trace vào trong ta đến :


QUOTE

00404830




53














PUSH EBX

<
===
Ta đến đây


Trace xuống tiếp một đoạn ta đến :


QUOTE

0040483E FFD6 CALL ESI < === Chiều dài chuỗi S nhập
00404840 83F8 03 CMP EAX,3 < === Phải lớn hơn 3 ký tự
00404843 /0F8C EA000000 JL dumped_.00404933 < ==== Nếu
không nhảy đến báo sai



0040484E FFD6 CALL ESI < === Chiều dài chuỗi U nhập
00404850 83F8 03 CMP EAX,3 < === Phải lớn hơn 3 ký tự
00404853 0F8C DA000000 JL dumped_.00404933 < ==== Nếu
không nhảy đến báo sai




Trace tiếp ta đến :


QUOTE


004048AD 8A03 MOV AL,BYTE PTR DS:[EBX] < ==
Đưa từng ký tự U nhập vào AL
004048AF 33C9 XOR ECX,ECX < === ECX = 00
004048B1 84C0 TEST AL,AL < == Kiểm tra đến hết chuỗi
chưa hay có khoảng trắng không
004048B3 8BD3 MOV EDX,EBX < === EDX chứa chuỗi
U nhập
004048B5 74 33 JE SHORT dumped_.004048EA < ===
Thoát vòng lặp nếu AL = 0
004048B7 3C 20 CMP AL,20 < === So sánh với 20h
004048B9 74 27 JE SHORT dumped_.004048E2 < == Nhảy
nếu bằng
004048BB 3C 0D CMP AL,0D < ==== So sánh với 0Dh
004048BD 74 23 JE SHORT dumped_.004048E2 < == Nhảy
nếu bằng
004048BF 3C 0A CMP AL,0A < ==== So sánh với 0Ah
004048C1 74 1F JE SHORT dumped_.004048E2 < == Nhảy
nếu bằng
004048C3 3C 09 CMP AL,9 < ====== So sánh với 09h
004048C5 74 1B JE SHORT dumped_.004048E2 < == Nhảy
nếu bằng
004048C7 3C 61 CMP AL,61 < ====== So sánh với 61h
004048C9 7C 0C JL SHORT dumped_.004048D7 < == Nhảy
nếu nhỏ hơn
004048CB 3C 7A CMP AL,7A < ====== So sánh với 7Ah
004048CD 7F 08 JG SHORT dumped_.004048D7 < == Nhảy
nếu lớn hơn
004048CF 0FBEC0 MOVSX EAX,AL < === EAX chứa ký
tự của U được lưu ở AL
004048D2 83E8 20 SUB EAX,20 < === EAX = EAX – 20h

004048D5 EB 03 JMP SHORT dumped_.004048DA <
==Nhảy đến địa chỉ
004048D7 0FBEC0 MOVSX EAX,AL < == EAX chứa ký tự
của U được lưu ở AL
ESI = EAX + EAX * 4
004048DA 8D3480 LEA ESI,DWORD PTR
DS:[EAX+EAX*4]
ECX = ECX + ESI * 2
004048DD 8D0C71 LEA ECX,DWORD PTR
DS:[ECX+ESI*2]
004048E0 03C8 ADD ECX,EAX < == ECX = ECX + EAX

004048E2 8A42 01 MOV AL,BYTE PTR DS:[EDX+1] < ==
Đưa ký tự kế vào AL
004048E5 42 INC EDX < == EDX ++
004048E6 84C0 TEST AL,AL < == Kiểm tra đến hết chuỗi
chưa hay có khoảng trắng không
004048E8 ^ 75 CD JNZ SHORT dumped_.004048B7 < ==
Chưa thì tiếp tục vòng lặp



Vậy sau khi thoát khỏi vòng lặp thì giá trị sẽ được lưu tại ECX.
Trace tiếp ta đến :



QUOTE

00404928 3BC6 CMP EAX,ESI < === So sánh S nhập và S

thực. ESI : S thực; EAX : S nhập
0040492A 0F94C2 SETE DL < === Đúng hay Sai ( EDX sẽ
là giá trị 0 hay 1 )
0040492D 5F POP EDI
0040492E 5E POP ESI
0040492F 8BC2 MOV EAX,EDX < === Giá trị đúng ( 0
hay 1 ) đuợc lưu ở EAX
00404931 5B POP EBX
00404932 C3 RETN < == Trở về chương trình trước đó.



Sau khi đăng ký thành công. Giá trị của U và S được lưu ở file
timesync.ini của chương trình.

>>>>>>>> Vậy :



QUOTE

User : Moonbaby Serial : 6589
User : HVA-CrAcKeRtEaM Serial : 11770




×