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.

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

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

Saved successfully!

Ooh no, something went wrong!