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.
Inline patching: nSPack 2.x<br />
UPX je bio lak primer ubacivanja patch koda u kod pakera. Sada cemo<br />
patchovati malo slozeniji paker. Kao i do sada prvo moramo da pronadjemo<br />
pogodno mesto za ubacivanje naseg inline patcha. Ovo prakticno znaci da<br />
moramo da pronadjemo packer exit point i da ga preusmerimo na nas patch<br />
kod. Na packer OEPu imamo sledeci kod:<br />
0040101B > $- E9 87660000<br />
JMP crackme_.004076A7<br />
00401020 B4 DB B4<br />
00401021 09 DB 09<br />
koji cemo ispratiti klikom na F8, posle cega cemo se naci ovde:<br />
004076A7 9C PUSHFD<br />
004076A8 60 PUSHAD<br />
004076A9 E8 00000000 CALL crackme_.004076AE<br />
Ovde cemo primeniti STACK trik tako sto cemo kliknuti 2x F8, posle cega<br />
cemo postaviti Hardware break-point on dword access na lokaciju ESPa u<br />
memory dumpu. Klikom na F9 dolazimo do sledece lokacije:<br />
0040791F 61 POPAD<br />
00407920 9D POPFD<br />
00407921 - E9 9A99FFFF JMP crackme_.004012C0<br />
JMP skok na adresi 00407921 ocigledno vodi ka OEPu i mozemo ga<br />
preusmeriti ka nasem patch kodu. Naravno moramo prvo da odredimo mesto<br />
u fajlu koje je dovoljno veliko da sadrzi nas patch. Najcesce se mesto za<br />
inline patch trazi u PE Headeru fajla odnosno od adrese 00400300. Mi cemo<br />
pritisnuti CTRL+G u Ollyju i otici cemo na adresu 00400333 na kojoj se<br />
trenutno nalazi dovoljno praznog mesta za ubacivanje naseg patcha. Naravno<br />
ovo mesto i nije bas totalno prazno ali ovaj kod se odnosi na glavnu .exe<br />
ikonu tako da nema veze da li ce nas patch kod biti ovde ili ne. Ubacicemo<br />
sledeci kod:<br />
00400333 C605 35104000 F> MOV BYTE PTR DS:[401035],0FF<br />
0040033A C605 8A104000 0> MOV BYTE PTR DS:[40108A],0<br />
00400341 68 C0124000 PUSH inline_n.004012C0<br />
00400346 C3 RET<br />
Ovo je veoma jednostavan patch kod koji patchuje bajtove na adresama<br />
00401035 i 0040108A, posle cega se skace na OEP pomocu komandi PUSH i<br />
RET. Kada snimimo ove promene i restartujemo Olly mozemo i da izmenimo<br />
skok na adresi 00407921 tako da on pokazuje na patch kod, odnosno<br />
izmenicemo ga u ovo:<br />
00407920 9D POPFD<br />
00407921 - E9 0D8AFFFF JMP inline_n.00400333<br />
Konacno mozemo da snimimo sve promene i pokusamo da startujemo<br />
patchovan fajl, ali …. kao sto vidimo negde smo pogresili jer se program nije<br />
startovao kao sto je trebalo, cak naprotiv on se “srusio”. Da li smo nesto<br />
zaboravili<br />
Pogledajmo za trenutak spisak importa koji se nalaze u pakovanom .exe<br />
fajlu. Ako odemo u prozor executable modules videcemo ovo:<br />
Names in crackme_<br />
Address Section Type ( Name Comment<br />
004075BC nsp1 Import ( KERNEL32.VirtualAlloc<br />
004075C0 nsp1 Import ( KERNEL32.VirtualFree<br />
004075B8 nsp1 Import ( KERNEL32.VirtualProtect<br />
Par importa zaduzenih za alociranje, zastitu i oslobadjanje memorije. Zastitu<br />
memorije Da, VirtualProtect se koristi da bi se nekoj memorijskoj alokaciji<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 257 <strong>of</strong> 293