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.

KeyGen – Beginning #2<br />

Videli smo kako mozemo da modifikujemo neki fajl kako bismo ga<br />

pretvorili u svoj keygenerator. Sada cemo pokusati nesto drugacije,<br />

pokusacemo da napisemo novi program koji ce za svako uneto ime generisati<br />

validan serijski broj. “Meta” ce za pocetak biti veoma jednostavna. Ucitajte<br />

program …\Casovi\Cas4\keygenme #1.exe u Olly.<br />

Pre nego sto pocnemo sa keygeningom prvo bismo trebali da skupimo<br />

sto je moguce vise informacija o samoj meti. Stoga cemo skenirati metu<br />

PeIDom koji ce nam reci da je meta pisana u MASM32 / TASM32u. Posle<br />

ovoga cemo uneti lazne podatke u metu da vidimo kako se ponasa prilikom<br />

unosa podataka. Ovo je bitno jer treba da vidimo da li je duzina imena,<br />

serijskog broja ili neki drugi parametar definisan. Ako jeste program ce nam<br />

cesto saopstiti da je ime prekratko ili da neki drugi podatak ne zadovoljava<br />

uslove. Unecemo u program sledece podatke: ime ap0x, a kao serijski broj<br />

111111. Kada pritisnemo dugme Register onda ce program izbaciti poruku:<br />

OOPS! Wrong serial. Ova poruka ce nam pomoci da nadjemo mesto gde se<br />

racuna serijski broj! Potrazicemo ovaj string u fajlu pomocu Ollyja -> Search<br />

for -> All referenced text strings.<br />

Trazeni string cemo naci na adresi 0040120E. U okolini te adrese se<br />

nalazi sledece:<br />

004011DE |> \68 AC304000<br />

004011E3 |. 68 D0304000<br />

004011E8 |. E8 13010000<br />

004011ED |. 0BC0<br />

004011EF |. 75 16<br />

PUSH keygenme.004030AC<br />

PUSH keygenme.004030D0<br />

CALL <br />

OR EAX,EAX<br />

JNZ SHORT keygenme.00401207<br />

...<br />

00401200 |. E8 2B010000 CALL ; \MessageBoxA<br />

00401205 |. EB 14 JMP SHORT keygenme.0040121B<br />

...<br />

00401216 |. E8 15010000 CALL ; \MessageBoxA<br />

Kao sto vidimo poziva se komanda lstrcmpA koja poredi dva stringa. Jedan<br />

od ova dva stringa mora biti nas uneti lazni serijski broj dok je drugi skoro<br />

sigurno tacan serijski broj. Ovo smo zakljucili jer se u blizini ovog poredjenja<br />

nalaze poruke o tacno/pogresno unetom serijskom broju. Posto ovaj CALL<br />

pocinje na adresi 00401199, postavicemo break-point na nju. Posle ovoga<br />

cemo se vratiti u crackme i ponovo cemo pritisnuti dugme Register posle<br />

cega ce program zastati na adresi 00401199. Sa F8 cemo traceovati kroz<br />

program sve dok ne dodjemo do prvog CALLa koji se nalazi odmah ispred<br />

lstrcmpA komande. Ovaj CALL se nalazi na adresi 004011D2. U ovaj CALL<br />

cemo uci sa F7 jer je ocigledno da se ovde, pre poredjenja stringova, mora<br />

racunati pravi serijski broj. Ovako izgleda deo tog CALLa:<br />

004012C8 |> 8A1C39<br />

004012CB |. 84DB<br />

004012CD |. 74 08<br />

004012CF |. 03C3<br />

004012D1 |. 83C0 10<br />

004012D4 |. 41<br />

004012D5 |.^ EB F1<br />

/MOV BL,BYTE PTR DS:[ECX+EDI]<br />

|TEST BL,BL<br />

|JE SHORT keygenme.004012D7<br />

|ADD EAX,EBX<br />

|ADD EAX,10<br />

|INC ECX<br />

\JMP SHORT keygenme.004012C8<br />

Ovaj deo CALLa nam je zanimljiv jer se bas tu racuna tacan serijski broj!<br />

Kako ovo znamo Jednostavno znamo da se serijski brojevi najcesce<br />

racunaju u CALLovima koji prethode poredjenju tacnog i laznog serijskog<br />

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

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

Saved successfully!

Ooh no, something went wrong!