07.02.2015 Views

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

SHOW MORE
SHOW LESS

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 & Registry<br />

Rec smo resili jedan crackme koji koristi keyfajlove za cuvanje i<br />

verifikaciju registracije. Ovaj put nas problem je dodatno otezan cinjenicom<br />

da nam je pored nepoznatog formata keyfajla nepoznat i potreban sadrzaj<br />

Registry baze. Pa prva stvar prvo, otvorite crackme Crackme3.exe koji se<br />

nalazi u folderu Cas03 kako bismo zapoceli sa reversingom.<br />

Da bismo uopste poceli sa resavanjem ovog problema potrebno je da<br />

pronadjemo mesto gde pocinje algoritam za proveru tacnosti serijskog broja,<br />

a ovo cemo saznati tako sto cemo analizirati standardan poziv ka pravljenju<br />

dijaloga koji se nalazi ovde:<br />

00401273 |. 6A 00 PUSH 0 ; /lParam = NULL<br />

00401275 |. 68 93124000 PUSH Crackme3.00401293 ; |DlgProc = Crackme3.00401293<br />

0040127A |. 6A 00 PUSH 0 ; |hOwner = NULL<br />

0040127C |. 56 PUSH ESI ; |pTemplate<br />

0040127D |. FF35 B0314000 PUSH DWORD PTR DS:[4031B0] ; |hInst = NULL<br />

00401283 |. E8 6E050000 CALL DialogBoxIndirectParam; \DialogBoxIndirectParamA<br />

Odavde vidimo da se MessageLoop koji obradjuje poruke koje mi saljemo<br />

nalazi na adresi 00401293 na kojoj se sigurno mora nalaziti i “link” ka kodu<br />

koji vrsi proveru tacnosti unetog serijskog broja. Iz ovog razloga odlazimo<br />

tamo i skrolujemo kroz kod sve dok ne ugledamo ovo:<br />

00401361 . E8 FC030000 CALL 00401762<br />

00401366 . 68 39314000 PUSH 00403139 ; /Arg4 = 00403139<br />

0040136B . 68 D1124000 PUSH 004012D1 ; ASCII "Regkey"<br />

00401370 . 68 AA124000 PUSH 004012AA ; ASCII "S<strong>of</strong>tware\DFCG Crackme"<br />

00401375 . 68 3D314000 PUSH 0040313D ; |Arg1 = 0040313D<br />

0040137A . E8 D1020000 CALL 00401650 ; \Crackme3.00401650<br />

0040137F . 84C0<br />

TEST AL,AL<br />

00401381 . 74 44 JE SHORT 004013C7<br />

Ovaj kod sigurno predstavlja prvi deo provere tacnosti unetog serijskog<br />

broja, odnosno predstavlja deo koji se odnosi na verifikaciju stanja Registry<br />

baze. Pre nego sto udjemo u CALL na adresi 0040137A, videcemo sta se<br />

nalazi u CALLu koji prethodi Registry check CALLu. Dakle ulazimo u CALL na<br />

adresi 00401361 i vidimo sledeci kod:<br />

00401782 |. 50 PUSH EAX<br />

00401783 |. 6A 00 PUSH 0<br />

00401785 |. E8 3C000000 CALL ;<br />

0040178A |. 8B45 FC<br />

MOV EAX,DWORD PTR SS:[EBP-4]<br />

0040178D |. 0FC8<br />

BSWAP EAX<br />

0040178F |. 05 47434644 ADD EAX,44464347<br />

00401794 |. 68 C4314000 PUSH Crackme3.004031C4<br />

00401799 |. 50 PUSH EAX<br />

0040179A |. E8 CD000000 CALL Crackme3.0040186C<br />

koji se koristi za dobijanje unikatne informacije o nasem kompjuteru na<br />

osnovu podataka koje vraca funkcija GetVolumeInformation. Ti podaci su<br />

uvek vezani za hard disk na kojem se fajl nalazi. Posto se racunanje<br />

Computer IDa zasniva na podatku koji je specifican za svaki kompjuter,<br />

odnosno u ovom slucaju svaki hard disk, rezultati koje ce vam program<br />

prikazivati, a koji se zasnivaju na ovom broju, drasticno ce se razlikovati od<br />

onih koje cu ja dobijati.<br />

Posle izvrsenja poziva ka GetVolumeInformation APIju rezultat se smesta na<br />

vec alocirana mesta na koja pokazuje EBP. Posle ovoga EAX dobija vrednost<br />

parametra koji se nalazi na adresi EBP-4, a ova vrednost se prvo menja<br />

pomocu BSWAP komande, a onda se na nju dodaje 44464347h. Ova konacna<br />

<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 84 <strong>of</strong> 293

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!