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