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.

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

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

Saved successfully!

Ooh no, something went wrong!