The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
morati sam sebe da castim pivom :) Bilo kako bilo, ova CRC zastita<br />
definitivno zasluzuje nagradu sa +Fravia sajta:<br />
“Da da znam, zasluzio sam nagradu posteno :)” – <strong>Ap0x</strong><br />
Salu na stranu ono (pametno) sto ce ovaj primer da vas nauci je kako da<br />
dekriptujete onaj crc32table.txt fajl i tako razbijete CRC zastitu. Otvorite<br />
originalni crc32.exe fajl u Ollyju postavite obican break-point na adresu<br />
00450ED0. Sa F9 startujte program i sacekajte da se Olly zaustavi na ovom<br />
break-pointu. Sa F8 polako analizirajte kod. Na adresi 00450ED8 imamo<br />
stvarno dugacak loop (cak 41h puta se ponavlja) koji ne radi nista bitno za nas.<br />
Idemo dalje... Kada stignemo do adrese 00450F28 videcemo da se u EAX<br />
smesta cela putanja do crc32table.txt fajla. Ovo moze biti zanimljivo. Sa F8<br />
idemo dalje kroz kod. Nista bitno se ne desava sve dok ne dodjemo do<br />
adrese 00451037 kada program kopira samog sebe u bak.bak fajl. Nista<br />
bitno za enkripciju, pa nastavljamo dalje. Stigli smo do 004510C9 i sada<br />
imamo neki loop koji se izvrsava nekoliko puta. Ovaj loop mora biti jako<br />
zanimljiv posto se nalazi odmah iznad poruke o pogresnom CRCu. Da vidimo<br />
sta se desava u njemu.<br />
004510CE |> /8D45 FC<br />
004510D1 |. |E8 1A3CFBFF<br />
004510D6 |. |8B55 FC<br />
004510D9 |. |8A541A FF<br />
004510DD |. |80F2 2C<br />
004510E0 |. |885418 FF<br />
004510E4 |. |43<br />
004510E5 |. |4E<br />
004510E6 |.^\75 E6<br />
/LEA EAX,DWORD PTR SS:[EBP-4]<br />
|CALL crc32.00404CF0<br />
|MOV EDX,DWORD PTR SS:[EBP-4]<br />
|MOV DL,BYTE PTR DS:[EDX+EBX-1]<br />
|XOR DL,2C<br />
|MOV BYTE PTR DS:[EAX+EBX-1],DL<br />
|INC EBX<br />
|DEC ESI<br />
\JNZ SHORT crc32.004510CE<br />
Prodjimo par puta kroz njega i videcemo da se uzima jedno po jedno slovo iz<br />
nekog stringa, mozda onog koji se nalazi u samom crc32table.txt fajlu, i da<br />
se njegova ASCII vrednost xoruje sa 2Ch ili sa 44 decimalno. Kada se ovaj<br />
loop zavrsi, to jest kada stignemo do adrese 004510E8 onda cemo u EAXu<br />
imati string EAX 008B213C ASCII "7CC85525" koji odgovara dekriptovanom<br />
CRCu iz fajla crc32table.txt. Ako je taj CRC jednak CRCu fajla bak.bak onda<br />
fajl nije modifikovan. Ono sto nas interesuje je kako da reversujemo<br />
enkripciju pa da dobijemo drugi enkriptovani CRC, za izmenjeni NAG free<br />
program, koji bi smestili u crc32table.txt fajl. Ovo mozemo resiti na dva<br />
nacina.<br />
Prvi nacin:<br />
Pretpostavimo za trenutak da ne znamo kako program generise<br />
enkriptovani string koji sadrzi CRC vrednost crc32.exe fajla. Ono sto cemo da<br />
uradimo je da otvorimo crc32table.txt fajl i da iz njega iskopiramo onaj<br />
string. Jedino potrebno podesavanje Notepada je da promenite font u<br />
Terminal. [Hint: Format -> Font -> Terminal -> Regular], ono sto nam je jos<br />
potrebno je ASCII tablica koju mozete preuzeti sa www.asciitable.com<br />
(opciono ali veoma korisno) i spremni smo da pocnemo.<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 133 <strong>of</strong> 293