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.

NOP. Ovo radimo iz razloga zato sto zelimo da vidimo kako ce se program<br />

ponasati ako su unete vrednosti iste. Posle ovog memorijskog patcha<br />

program ce izgledati ovako:<br />

00401154 |> /8A10 /MOV DL,BYTE PTR DS:[EAX]<br />

00401156 |. |2AD1 |SUB DL,CL<br />

00401158 |. |3813 |CMP BYTE PTR DS:[EBX],DL<br />

0040115A |90 NOP<br />

0040115B |90 NOP<br />

0040115C |. |40<br />

|INC EAX<br />

0040115D |. |43<br />

|INC EBX<br />

0040115E |.^\E2 F4<br />

\LOOPD SHORT AD_CM#2.00401154<br />

Kao sto vidimo ako nastavimo sa izvrsavanjem programa sa F8 povecace se i<br />

EAX i EBX posle cega ce registri izgledati ovako:<br />

EAX 00403081 ASCII "racker"<br />

ECX 00000007<br />

EDX 0014065C<br />

EBX 00403281 ASCII "11111"<br />

ESP 0012FB24<br />

EBP 0012FB24<br />

ESI 00000007<br />

EDI 0012FBA4<br />

EIP 0040115E AD_CM#2.0040115E<br />

Ovo samo znaci da ce se u sledecem prolazu ovog loopa program porediti<br />

sledeci broj unetog serijskog broja i sledeci broj unetog serijskog broja.<br />

Dakle vidimo da ce se ovaj loop izvrsavati onoliki broj puta koliko ime ima<br />

karaktera. Svaki put kada je broj prolaza manji od broja karaktera program<br />

ce se vratiti sa izvrsavanjem na adresu 00401154, i ovo ce raditi sve dok<br />

broj prolaza ne bude jednak duzini unetog imena. Dok se ovo ne ispuni ECX<br />

registar se smanjuje za 1 i stoga se i CL smanjuje za 1.<br />

Pre nego sto pocnemo da pravimo keygenerator potrebno je samo da<br />

pogledamo kod iznad ove provere, da bismo videli da li program ima neke<br />

zahteve oko unete duzine serijskog broja i videcemo sledece:<br />

00401117 |. 83FE 05 CMP ESI,5<br />

0040111A |. 7D 18<br />

JGE SHORT AD_CM#2.00401134<br />

Kao sto vidimo ispod ovoga se nalazi poruka da duzina imena mora da bude<br />

najmanje pet karaktera. Dakle imamo sledeci algoritam:<br />

radi petlju onoliko puta koliko ima karaktera u imenu<br />

cl = karakteru prolaza<br />

dl = duzini imena - broju prolaza (broj prolaza ide od 0 do duzine imena - 1)<br />

dl je karakter pravog serijskog broja<br />

vrati se na pocetak loopa ako je broj prolaza manji od duzine imena<br />

Posto je ovo lak algoritam bez ikakve dalje analize dacu vam C++ source za<br />

keygenerator datog algoritma.<br />

unsigned int i,dl,cl;<br />

char name[100]="";<br />

char serial[64]="";<br />

cl = strlen(name);<br />

for(i=0;i

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

Saved successfully!

Ooh no, something went wrong!