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.

oja. U ovim CALLovima uvek postoji neki loop koji je zaduzen za racunanje<br />

serijskog broja na osnovu unetog imena. Posto se ime sastoji od X karaktera,<br />

a serijski se racuna za svaki karakter najmanje jedan loop je potreban.<br />

Ako ste procitali deo posvecen ASMu na pocetku knjige sigurno znate sta se<br />

to radi na adresi 004012C8. Ako EDI sadrzi adresu na kojoj se nalazi uneto<br />

ime, a ECX sadrzi nulu, a posto je BL 8bitni registar koji moze da ima samo<br />

jednobajtnu vrednost, zakljucujemo da se u registar BL smesta jedno po<br />

jedno slovo imena. Naravno u registar se ne smestaju slova nego<br />

heksadecimalne vrednosti ASCIIa svakog slova.<br />

Na sledecoj adresi 004012CB se poredi registar BL sa samim sobom. Posto se<br />

na sledecoj adresi nalazi jedan uslovni skok zakljucujemo da ce se on izvrsiti<br />

samo ako je BL jednak 0. Ovo ce se desiti samo u dva slucaja:<br />

1) Kada je jedan karakter imena jednak 0x00 (null)<br />

2) Kada je iskoriscen ceo string<br />

Posto nas prvi slucaj ne interesuje, koncentrisacemo se samo na drugi slucaj.<br />

Na sledecoj adresi 004012CF se na registar EAX dodaje vrednost registra<br />

EBX. Ono sto je bitno da primetite da se registar EBX menja kada se menja i<br />

registar BL (vise o ovome u delu posvecenom ASMu na pocetku knjige). Zbog<br />

ovoga i zbog cinjenice sto se EAX nigde u ovom loopu ne brise<br />

pretpostavicemo da on sadrzi vrednost koja moze biti pravi serijski broj.<br />

Na sledecoj adresi 004012D1 se u EAX registar dodaje broj 10h<br />

(heksadecimalno). Posle ovoga ostaje samo da se poveca registar ECX za<br />

jedan jer ECX predstavlja brojac slova naseg unesenog imena. ECX se stara<br />

da se za svaki prolaz ovog loopa koristi drugo slovo. Evo kako bi izgledao<br />

ovaj algoritam napisan u C-u:<br />

#include <br />

int main(int argc, char *argv[])<br />

{<br />

char name[50];<br />

printf("=-=-=-=-=-=-=-=-=-\n");<br />

printf(" KeyGen #2 <strong>by</strong> <strong>Ap0x</strong>\n");<br />

printf("=-=-=-=-=-=-=-=-=-\n");<br />

printf("Unesi ime: ");<br />

gets(name);<br />

// printf("-=-=-=-=-=-\n");<br />

int i;<br />

int ser;<br />

ser = 0;<br />

for(i=0;i< strlen(name);i++){<br />

ser = ser + (name[i] + 0x10);<br />

//EAX = EAX + Slovo + 10h<br />

// printf("+Tmp Serial %x za slovo %c\n",ser,name[i]);<br />

}<br />

// printf("-=-=-=-=-=-\n");<br />

printf(" Serijski broj je: %x\n",ser);<br />

printf("=-=-=-=-=-=-=-=-=-\n");<br />

getchar();<br />

return 0;<br />

}<br />

Vi vas keygenerator mozete napraviti u bilo kom programskom jeziku. Sve<br />

dok se drzite formule EAX = EAX + Slovo + 10h uspesno cete napraviti<br />

keygenerator. Bez obzira na sve uspesno smo napravili nas drugi<br />

keygenerator.<br />

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

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

Saved successfully!

Ooh no, something went wrong!