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