=============================================
LeNnY - Rozwiazanie do Crackme 2.0 by Kwasek
=============================================

Tools: 
 SoftIce + IceDump

Jest to moj pierwszy tut, takze...
Klilka slow o crackme... IceDump musi byc aktywny, inaczej po wcisnieciu OK u mnie nastepuje pad systemu (takze po zapatchowaniu); odnalezienie prawidlowego hasla jest raczej niemozliwe, wiec skupie sie na stworzeniu loadera/patchera.

Pod odpaleniu crackme, wprowadzeniu jakiegos hasla i kliknieciu OK, crackme sie zamyka, wiec:
> bpx ExitProcess
Ladujemy w kernelu, patrzymy na stos:
> d esp
a tam: 4034E1 wiec 'call ExitProcess' jest pod adresem 4034E1-5, wiec:
> bpx 4034DC
po ustawieniu tej bramki (i ponownym odpaleniu crackme oczywiscie) ladujemy tutaj:
----------------------------------------------------
0167:004034C9  CMP       BYTE PTR [EBX+24],00
0167:004034CD  JZ        004034D4
0167:004034CF  CALL      004033D4
0167:004034D4  CMP       DWORD PTR [EBX],00
0167:004034D7  JNZ       004034E1
0167:004034D9  MOV       EAX,[ESI]
0167:004034DB  PUSH      EAX
0167:004034DC  CALL      KERNEL32!ExitProcess		<= tu ladujemy
0167:004034E1  MOV       EAX,[EBX]
0167:004034E3  PUSH      ESI
0167:004034E4  MOV       ESI,EAX
----------------------------------------------------

teraz patrzymy w gore gdzie zaczyna sie ta proc, dochodzimy tutaj:
----------------------------------------------------
0167:00403407  RET
0167:00403408  PUSH      EBX		<=====
0167:00403409  PUSH      ESI
0167:0040340A  PUSH      EDI
0167:0040340B  PUSH      EBP
0167:0040340C  MOV       EBX,00439480
0167:00403411  MOV       ESI,00439030
0167:00403416  MOV       EDI,00439034
0167:0040341B  CMP       BYTE PTR [EBX+24],00
0167:0040341F  JNZ       00403437
0167:00403421  CMP       DWORD PTR [EDI],00
0167:00403424  JZ        00403437   
0167:00403426  MOV       EDX,[EDI]
----------------------------------------------------
wiec:
> bpx 403408
jeszcze raz odpalamy crackme, klikamy Ok, ladujemy pod 403408, znowu patrzymy na stos: 43185D, wiec:
> bpx 43185D-5 
znowu odpalamy crackme:
----------------------------------------------------
0167:00431839  RET
0167:0043183A  MOV       EAX,EAX
0167:0043183C  PUSH      FF
0167:0043183E  PUSH      0000F170
0167:00431843  PUSH      00000112
0167:00431848  MOV       EAX,[004382EC]
0167:0043184D  MOV       EAX,[EAX]
0167:0043184F  MOV       EAX,[EAX+24]
0167:00431852  PUSH      EAX
0167:00431853  CALL      USER32!SendMessageA
0167:00431858  CALL      00403408		<== tu jestesmy i tu bedziemy patchowac 
0167:0043185D  RET
----------------------------------------------------
teraz:
> r eip=43185D
po wyjsciu z tej proc i <F12> ladujem w proc sprawdzajacej wprowadzone haslo:
0167:004321B8  CALL      0040358C
0167:004321BD  MOV       EAX,00439790		<== tu ladujemy
0167:004321C2  MOV       ECX,00432504
0167:004321C7  MOV       EDX,[EDI]
0167:004321C9  CALL      00403800
0167:004321CE  MOV       EAX,[EBX+000001F8]
0167:004321D4  MOV       [ESI],EAX
0167:004321D6  LEA       EDX,[EBP-08]
0167:004321D9  MOV       EAX,[EBX+000001E0]
0167:004321DF  CALL      00415F00
0167:004321E4  MOV       EDX,[EBP-08]
0167:004321E7  MOV       EAX,[ESI]
0167:004321E9  CALL      00428CEC
0167:004321EE  CALL      00431B64
...
...
0167:004322D5  CALL      [EDX+30]
0167:004322D8  MOV       EAX,[ESI]
0167:004322DA  MOV       EDX,[EAX]
0167:004322DC  CALL      [EDX+2C]
0167:004322DF  MOV       EAX,[00439790]
0167:004322E4  MOV       EDX,[00439798]
0167:004322EA  CALL      004038C4
0167:004322EF  JNZ       004322F8		<== good/bad boy
0167:004322F1  CALL      00431CB4
0167:004322F6  JMP       004322FD
----------------------------------------------------

I teraz nic nie stoi na przeszkodzie by stworzyc loadera, gotowy jest gdzies w zalaczniku. Crackme jest spakowane UPX'em, po wrzuceniu w ProcDump'a mozna tez je zapatchowac pod adresami:
1. 30E58h (bajty E8 AB 1B FD FF -> 90 90 90 90 90)
2. 318EFh (bajty 75 07 -> 90 90)


pzdr

LeNnY (lenny40@wp.pl)