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 & 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