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.

Ovaj poziv vraca imena sectiona koji se nalazi u nasem .ini fajlu. E sada se<br />

postavlja pitanje sta su to sectioni u .ini fajlovima Mozete konsultovati API<br />

dokumentaciju ali cete se sigurno iz iskustva setiti da postoje .ini fajlovi sa<br />

ovakvom strukturom:<br />

[Section Name 1]<br />

Value1 = “11111”<br />

Value2 = “11111”<br />

[Section Name 2]<br />

Value1 = “11111”<br />

Value2 = “11111”<br />

….<br />

Kao sto se iz ovog kratkog objasnjenja i vidi, struktura .ini fajlova je krajnje<br />

jednostavna. Posto nasa meta trazi ime sekcije u .ini fajlu mi cemo nas fajl<br />

modifikovati tako da sadrzi sledeci tekst:<br />

[SecName1]<br />

Value = “ap0x”<br />

Posle ovoga cemo restartovati nasu metu i ponovo cemo uci u ovaj CALL.<br />

Posto nas .ini fajl postoji i postoji section u njemu imamo neku vrednost<br />

program ce uci u loop koji pocinje na adresi 0040170A. Ovde primecujemo<br />

jos jedan poziv ka APIju GetPrivatePr<strong>of</strong>ileSectionA. Sta se ovde desava<br />

Posto je meta dobila SVA imena sekcija sada prolazi kroz sekcije jednu po<br />

jednu, brojeci ih i brojeci vrednosti u njima. U sledecem loopu se broji koliko<br />

to vrednosti sadrzi svaka sekcija:<br />

0040172B |> /57 |/PUSH EDI ; /String<br />

0040172C |. |E8 BF000000 ||CALL ; \lstrlenA<br />

00401731 |. |03F8 ||ADD EDI,EAX<br />

00401733 |. |47 ||INC EDI<br />

00401734 |. |FEC2 |INC DL<br />

00401736 |> |803F 00 | CMP BYTE PTR DS:[EDI],0<br />

00401739 |.^\75 F0 |\JNZ SHORT Crackme3.0040172B<br />

0040173B |. 80FA 02<br />

|CMP DL,2<br />

Ovde se primecije jedan problem, naime EDX registar koji meta koristi za<br />

racunanje broja vrednosti u svakom sectionu se resetuje na NT sistemima od<br />

strane lstrlenA APIja pa je poredjenje CMP DL,2 besmisleno i nece se nikada<br />

izvrsiti. Bez obzira na ovaj mali bug, meta nam jasno saopstava da u svakoj<br />

sekiji mora postojati tacno dve vrednosti. Ali ostaje pitanje koliko to sekcija<br />

ima Pogledajte sada ovaj deo koda:<br />

00401749 |. FEC3 |INC BL<br />

0040174B |> 803E 00 |CMP BYTE PTR DS:[ESI],0<br />

0040174E |.^ 75 BA<br />

\JNZ SHORT Crackme3.0040170A<br />

00401750 |. 80FB 02 CMP BL,2<br />

00401753 |. 75 06 JNZ SHORT Crackme3.0040175B<br />

Odavde se jasno vidi da se BL povecava za jedan prilikom vracanja imena<br />

svake sekcije. Posto BL mora da bude jednak 2, iz ovoga sledi da mora<br />

postojati tacno dve sekcije sa dve vrednosti u nasem .ini fajlu. Ispravicemo<br />

ovo tako da nas .ini fajl sada izgleda ovako:<br />

[SecName1]<br />

Value1 = “11111”<br />

Value2 = “22222”<br />

[SecName2]<br />

Value1 = “33333”<br />

Value2 = “44444”<br />

Sada posto je ovo ispunjeno AL ce na sledecem mestu biti jednak jedan,<br />

zbog cega ce sledeci CALL biti izvrsen:<br />

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

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

Saved successfully!

Ooh no, something went wrong!