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