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.

Posto ce se ovaj breakpoint pojavljivati vise puta najbolje je da uklonimo<br />

memorijski breakpoint on access i postavimo obican breakpoint na adresu:<br />

00A8B6E1 C2 1400 RET 14<br />

Posto smo uklonili memorijski breakpoint pritisnucemo F9 da dodjemo do<br />

breakpointa na adresi 00A8B6E1. Kada se ovo desi mozemo da uklonimo<br />

breakpoint sa RET 14 komande i da vratimo memorijski breakpoint na .CODE<br />

sekciju, sa tom razlikom sto cemo postaviti ovaj put write breakpoint. Ovo<br />

radimo iz razloga jer koliko vidimo glavna .CODE sekcija jos uvek nije u<br />

potpunosti otpakovana. Klikom na F9 zavrsavamo ovde:<br />

00A860DD F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS><br />

00A860DF 03CA ADD ECX,EDX<br />

00A860E1 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[><br />

00A860E3 5A POP EDX<br />

Posto se i REP komanda izvrsava veci broj puta ponovo cemo ukloniti<br />

memorijski breakpoint sa sekcije i pritisnucemo F8 4x da bismo izvrsili obe<br />

REP komande. I konacno mozemo da pogledamo stanje .CODE sekcije 2x<br />

klikom na nju u Memory window prozoru. Videcemo da je cela sekcija<br />

uspesno otpakovana! Da ne bismo izvrsavali kod sve dok ne dodjemo do<br />

OEPa uradicemo to pomocu jos jednog memorijskog breakpointa (access) na<br />

glavnu sekciju. Posle klika na F9 zavrsicemo na pravom OEPu koji posle<br />

analize izgleda ovako:<br />

00401264 /. 55 PUSH EBP<br />

00401265 |. 8BEC MOV EBP,ESP<br />

Sto je ocigledno VC++ OEP. Ovde mozemo uraditi dump pomocu LordPEa. Ali<br />

pre nego sto uradite dump u LordPEu u istom meniju kao Dump full izaberite<br />

komandu Correct image size, pa tek onda izvrsite Dump.<br />

Popravka importa ce biti malo teza nego obicno iz razloga sto ImpREC prvo<br />

treba podesiti tako da on moze da pristupi standardnom “kacenju” na<br />

debuggovani proces gde cemo uraditi popravku importa. Posto smo prvi deo<br />

vec uradili ostaje nam da uradimo i drugi to jest da popravimo sve importe.<br />

Naravno kao i uvek uradicemo Trace Level 1 disassemble posle cega ce ostati<br />

samo jedan nepoznat import u kernel32.dll fajlu. To ce u tree fajlu izgledati<br />

ovako:<br />

0 00002008 0000 00AF33DD<br />

1 0000200C kernel32.dll 01A6 GetStartupInfoA<br />

Bez obzira na ovaj pokvaren mi cemo 2x kliknuti na njega i dodacemo bilo<br />

koji import iz kernel32.dll fajla, recimo:<br />

1 00002008 kernel32.dll 0002 AddAtomA<br />

1 0000200C kernel32.dll 01A6 GetStartupInfoA<br />

Kada uradimo Fix dump otvoricemo dumpovan fajl pomocu Ollyja i pocecemo<br />

da traceujemo kroz njega sa F8 sve dok ne dodjemo do tacke rusenja:<br />

00401368 |. FF15 0C204000 CALL NEAR DWORD PTR DS:[40200C]<br />

Sada kada znamo gde se meta srusila jednostavno cemo otvoriti neki drugi<br />

VC++ fajl i prepisacemo koji se to import na tom mestu poziva. Otvorite<br />

...\Casovi\Cas03\keygenme1.exe i jednostavno uporedite VC++ import callove i<br />

videcete da je tacan import:<br />

1 00002008 kernel32.dll 016F GetModuleHandleA<br />

1 0000200C kernel32.dll 01A6 GetStartupInfoA<br />

NAPOMENA: Ovaj metod je moguce koristiti samo ako je u pitanju neki od<br />

poziva koji se nalaze na standardnom compiler OEPu. Ako je u pitanju neki<br />

drugi deo koda moracete da analizirate PUSH komande koje prethode samom<br />

CALLu, medjutim SKVP nece nikad progutati vise od tri-cetiri importa.<br />

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

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

Saved successfully!

Ooh no, something went wrong!