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