The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>The</strong> Serials – KeyFile<br />
Cesto sretani problem prilikom reversinga su i takozvani keyfajlovi. Ovi<br />
fajlovi predstavljaju samo mesto gde su sacuvani podaci vezani za<br />
registraciju. Mi cemo uz pomoc Ollya i vaseg omiljenog Hex editora razbiti<br />
jednu ovakvu zastitu. Meta se zove CrackMe.exe a nalazi se u Cas3 folderu.<br />
Najcesce se za citanje fajlova koristi API funkcija CreateFileA pa cemo<br />
postaviti break-point na nju. Ovo cemo uraditi na standardan nacin: U Ollyu<br />
cemo izabrati Executable modules -> View names -> CreateFileA -> Set<br />
breakpoint on every reference...<br />
Posle ovoga cemo startovati program pomocu opcije Run, posle cega ce<br />
program zastati na sledecem mestu:<br />
0040416A . E8 9DD0FFFF<br />
CALL <br />
Sa F8 cemo izvrsiti ovaj CALL i zavrsicemo ovde:<br />
0040120C $- FF25 04914200<br />
JMP DWORD PTR DS:[<br />
Uklonite ovaj break-point. Sada cemo pritiskati F8 onoliko puta koliko nam<br />
treba da se vratimo iz kernel32.dll. Pritiskajte F8 dok ne izvrsite prvu RET<br />
komandu, posle cega cemo se vratiti ovde:<br />
0040416F > /83F8 FF<br />
CMP EAX,-1<br />
00404172 . /74 29 JE SHORT CrackMe.0040419D<br />
Ovaj CMP proverava da li postoji fajl na disku koji sadrzi podatke o<br />
registraciji programa. Kako se zove taj fajl Ova informacija je sigurno<br />
morala da bude prosledjena gornjoj CALL CREATEFILEA funkciji, jer ovaj API<br />
mora da zna koji fajl treba da otvori. Zbog ovoga cemo postaviti break-point<br />
na prvu PUSH komandu koja se prosledjuje tom CALLu. Postavicemo breakpoint<br />
ovde:<br />
0040415A > \6A 00 PUSH 0 ; /hTemplateFile = NULL<br />
Pritisnite F9 kako biste nastavili sa izvrsavanjem programa. Sada nazad u<br />
crackmeu pritisnite dugme Try Again i program ce zastati na<br />
novopostavljenom break-pointu. Sada cemo izvrsiti ovaj CALL sa F8 sve dok<br />
ne dodjemo do PUSH EAX komande. Kada dodjemo do nje sadrzaj EAXa ce<br />
biti ime fajla koji nam treba. Taj fajl je ctm_cm02.key.<br />
Sada cemo napraviti jedan fajl sa sadrzajem jednog stringa, sa stringom<br />
ap0x (nula a ne O). Ovo mozete uraditi uz pomoc Notepada ili sa nekim Hex<br />
editorom. Pitanje je samo gde ce se to ovaj fajl nalaziti Odgovor je<br />
jednostavan: On ce se nalaziti u istom direktorijumu ili bi PUSH EAX funkcija<br />
sadrzala celu putanju do ctm_cm02.key fajla.<br />
Sada cemo ponovo pritisnuti dugme Try again u crackmeu i program ce<br />
zastati na PUSH EAX break-pointu. Polako cemo izvrsavati sve redove koda<br />
sa F8 i posmatracemo sta se desava. Ovde:<br />
0040416F > /83F8 FF<br />
CMP EAX,-1<br />
00404172 . /74 29 JE SHORT CrackMe.0040419D<br />
se sada ne izvrsava JE skok pa cemo se posle izvrsavanja donje RET<br />
komande naci ovde:<br />
00426592 . E8 4DC1FDFF CALL CrackMe.004026E4<br />
...<br />
004265AA . E8 F9C0FDFF<br />
CALL CrackMe.004026A8<br />
kada dodjemo do ovog drugog CALLa videcemo da EAX sada sadrzi broj 4 sto<br />
je duzina naseg stringa u key fajlu. Vidimo i koji red ispod da se EAX koristi<br />
za proveru da li je key fajl prazan ili ne.<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 81 <strong>of</strong> 293