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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

00407165 U EAX se stavljaju sva slova iz imena pocevsi od drugog<br />

00407167 Porede se EAX i ECX, to jest prvo slovo i slovo iz prolaza<br />

00407169 Ako je ECX manje od EAX onda:<br />

00407172 EAX = EAX - ECX<br />

00407174 EAX = EAX - 2<br />

00407177 EAX = EAX xor 404358<br />

0040717D<br />

Snimi AL na EDI pointer<br />

Kao sto vidimo algoritam je krajnje jednostavan i zasniva se na ponavljanju<br />

ove petlje onoliko puta koliko ima slova. Ne dajte da vas zbuni XOR sa<br />

brojem 404358, ovaj XOR je ekvivalentan XORu sa brojem 58. Zapamtite da<br />

se na adresu 00403B30 snima AL deo EAX registra. Ali bitno je da shvatite da<br />

se racuna i deo kada je EAX veci od 00404300. Evo kako bi keygenerator<br />

izgledao u Delphiju:<br />

procedure ...<br />

var<br />

eax,i,ecx:integer;<br />

name,tmp:string;<br />

begin<br />

eax := 0;<br />

tmp := '';<br />

name := Edit1.Text;<br />

for i := 2 to 5 do begin<br />

if eax > $404300 then eax := eax + Ord(name[1]) else eax := Ord(name[1]);<br />

ecx := eax;<br />

eax := Ord(name[i]);<br />

if ecx < eax then begin<br />

eax := eax - ecx;<br />

eax := eax - 2;<br />

eax := eax xor $404358;<br />

eax := eax - $404300;<br />

tmp := tmp + Chr(eax);<br />

eax := eax + $404300;<br />

end<br />

else tmp := tmp + name[i];<br />

end;<br />

Edit2.Text := tmp[1] + tmp[2] + tmp[3] + tmp[4];<br />

end;<br />

i u C++:<br />

unsigned int eax,ecx,i;<br />

eax = 0;<br />

for (i=1;i 0x00404300){<br />

eax = eax + name[0];<br />

}else{<br />

eax = name[0];<br />

}<br />

ecx = eax;<br />

eax = name[i];<br />

if (ecx < eax){<br />

eax = eax - ecx;<br />

eax = eax - 0x02;<br />

eax = eax ^ 0x00404358;<br />

eax = eax - 0x00404300;<br />

wsprintf(buffer,"%c",eax);<br />

strcat(serial,buffer);<br />

eax = eax + 0x00404300;<br />

}else{<br />

wsprintf(buffer,"%c",name[i]);<br />

strcat(serial,buffer);<br />

}<br />

}<br />

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

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

Saved successfully!

Ooh no, something went wrong!