The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
00401124 . 0BC0 OR EAX,EAX<br />
Primeticete da se na ekranu pojavio string 111111 odmah posle izvrsavanja<br />
poslednjeg GetDlgItemTextA APIa. Ovo znaci da je meta procitala i sadrzaj<br />
drugog polja. Ovde se OR EAX,EAX komanda ponovo odnosi na proveru<br />
ispunjenosti serial polja u glavnom prozoru crackmea. Posto smo i ovo polje<br />
ispunili ponovo pritiskamo F8 kako bismo dosli dovde:<br />
00401148 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd<br />
0040114B . E8 C6000000 CALL ; \GetDlgItemTextA<br />
00401150 . 33D2 XOR EDX,EDX<br />
Ako sada pogledate sadrzaj registra EAX videcete da je EAXu dodeljena<br />
vrednost 4 odmah posle izvrsavanja GetDlgItemTextA API poziva. Bez nekog<br />
velikog razmisljanja zakljucujemo da ovaj API stavlja duzinu unetog podatka<br />
iz polja koje se cita u EAX registar. Izvrsavajuci kod sa F8 dolazimo do<br />
sledeceg isecka koda koji se ocigledno koristi za izracunavanje serijskog<br />
broja na osnovu unetog imena:<br />
00401158 . BE 80334000 MOV ESI,KeyGen-m.00403380 ; ASCII "ap0x"<br />
0040115D > 8A1C31<br />
MOV BL,BYTE PTR DS:[ECX+ESI]<br />
00401160 . 03C3 ADD EAX,EBX<br />
00401162 . 41 INC ECX<br />
00401163 . 80FB 00 CMP BL,0<br />
00401166 .^ 75 F5 JNZ SHORT KeyGen-m.0040115D<br />
Ovaj deo koda se izvrsava cetiri puta (od adrese 0040115D pa do 00401166) jer<br />
je nase ime dugacko cetiri slova. Dakle zakljucujemo da program racuna<br />
serijski broj na osnovu svih unetih slova imena. Pratite vrednost registra EAX<br />
i nacin na koji se ona povecava za svaki od ova cetiri prolaza. Posto se<br />
konacno izvrsi i cetvrti prolaz izvrsice se i sledeci kod koji ce dodatno izmeniti<br />
vrednost EAX registra:<br />
00401168 . BA 28000000 MOV EDX,28<br />
0040116D . F7E2<br />
MUL EDX<br />
0040116F . 83C0 19<br />
ADD EAX,19<br />
ali ovo i nije bitno posto sada samo trazimo tacan serijski broj. Ako pogledate<br />
malo dole videcete da se ova vrednost iz EAXa pretvara pomocu wsprintfa<br />
APIa u decimalni oblik, ovde:<br />
00401172 . 50 PUSH EAX ; /<br />
00401173 . 68 64334000 PUSH KeyGen-m.00403364 ; |Format = "%d"<br />
00401178 . 68 9A334000 PUSH KeyGen-m.0040339A ; |s = KeyGen-m.0040339A<br />
0040117D . E8 7C000000 CALL ; \wsprintfA<br />
00401185 . BA 9A334000 MOV EDX,KeyGen-m.0040339A ; ASCII "15105"<br />
a rezultat ovog APIa je vise nego ocigledan. 15105 moze biti tacan serijski<br />
broj za uneto ime ap0x. Ovo mozete proveriti posle ali pogledajte prvo deo<br />
koda za poredjenje serijskih brojeva koji se ocigledno nalazi ovde:<br />
004011A5 . 8B06<br />
004011A7 . 8B1A<br />
004011A9 . 3BC3<br />
004011AB . 75 15<br />
MOV EAX,DWORD PTR DS:[ESI]<br />
MOV EBX,DWORD PTR DS:[EDX]<br />
CMP EAX,EBX<br />
JNZ SHORT KeyGen-m.004011C2