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.

Sada cemo traziti kroz kod sve dok ne dodjemo do nekog sledeceg CALLa ka<br />

nekoj API funkciji. To ce se desiti ovde:<br />

00401635 . 6A 40 PUSH 40<br />

00401637 . 68 00304000 PUSH decryptm.00403000<br />

0040163C . 68 36324000 PUSH decryptm.00403236<br />

00401641 . 6A 00 PUSH 0<br />

00401643 . E8 0E000000 CALL decryptm.00401656<br />

Ovde cemo ponovo biti prinudjeni da udjemo u taj CALL sa F7 i doci cemo<br />

ovde:<br />

00401656 $- FF25 0C204000 JMP NEAR DWORD PTR DS:[40200C]<br />

Klikom na F7 i analizom koda zakljucujemo da je ovo skok ka APIu:<br />

0085001A - FF20<br />

JMP NEAR DWORD PTR DS:[EAX];user32.MessageBoxA<br />

Posle izvrsenja ovog CALLa ka MessageBoxA API i naravno posle njegovog<br />

zatvaranja i vracanja iz kernel32.dll fajla naci cemo se ovde:<br />

00401648 . 6A 00 PUSH 0<br />

0040164A . E8 0D000000 CALL decryptm.0040165C<br />

Naravno i ovo je poziv ka nekom APIju. Na isti nacin kao i do sada<br />

dolazimo do zakljucka da se radi o:<br />

0040165C $- FF25 04204000 JMP NEAR DWORD PTR DS:[402004]<br />

...<br />

009E0037 - FF20<br />

JMP NEAR DWORD PTR DS:[EAX];kernel32.ExitProcess<br />

kernel32.ExitProcess APIu.<br />

Sada imamo sve podatke koji su nam potrebni za rekreiranje IAT.txt fajla.<br />

Njegova struktura je jedinstvena i potrebna je potpuna modifikacija do sada<br />

snimljenog fajla u sledecu strukturu:<br />

Target: decryptme1.tElock0.96.exe<br />

OEP: 00001000 IATRVA: 00002000 IATSize: 00000014<br />

FThunk: 00002000 NbFunc: 00000002<br />

1 00002000 kernel32.dll 0000 lstrlenA<br />

1 00002004 kernel32.dll 0000 ExitProcess<br />

FThunk: 0000200C NbFunc: 00000002<br />

1 0000200C user32.dll 0000 MessageBoxA<br />

1 00002010 user32.dll 0000 wsprintfA<br />

Da pojasnim. Prvi red se ispunjava tako sto za FThunk vrednost stavlja poziv<br />

ka prvom APIju iz nekog .dll fajla. Posto smo mi odlucili da to bude<br />

00002000 (RVA 00402000) onda taj API mora odgovarati APIju koji se dobija<br />

skokom sa JMP NEAR DWORD PTR DS:[402000], to jest mora<br />

odgovarati lstrlenA APIju u kernel32.dll fajlu. Ali ovo je vec sadrzaj drugog<br />

reda u kojem postoje dve konstante. Jedan na pocetku reda i 0000 koje se<br />

odnose na ordinalni broj importa, ali ovaj broj cemo podesiti pomocu<br />

ImpReca. Ovo treba ponoviti za sve .dll fajlove koje nasa meta ponavlja.<br />

Vec uradjena IAT struktura se nalazi u istoj arhivi kao i nasa meta. Kada<br />

konacno konacno snimite ovaj fajl otvorite ga pomocu Load Tree opcije u<br />

ImpRecu i duplim klikom na svaki od ovih importa cete konacno popraviti<br />

sve ordinale. Kada konacno i ovo zavrsite moci cete da uradite Fix dump i da<br />

vidite da je i tELock 0.98 uspesno otpakovan.<br />

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

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

Saved successfully!

Ooh no, something went wrong!