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