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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Adding functions #1<br />

Ovo poglavlje ce vas nauciti kako da dodate najobicniji NAG ekran u<br />

neki program i da se program posle toga moze startovati :) Pogledajte<br />

primer CRC32.exe koji se nalazi u folderu Cas06. Primeticete da je to jedan<br />

obican CRC32 kalkulator i da ako ga skeniramo sa PeIDom videcemo da je<br />

pisan u Visual C++. Ova informacija je jako bitna jer se ova tehnika<br />

dodavanja funkcija moze primeniti samo na Delphi, C++ i ASM programe.<br />

Ono sto cemo mi u ovom poglavlju uraditi je dodavanje obicnog NAG<br />

ekrana pre samog pocetka programa. Ovaj NAG ce biti obican Message Box<br />

koji ce govoriti da smo mi dodali funkciju u program. Otvoricemo program<br />

pomocu Ollyja i zapamticemo kako izgleda OEP. Trebace nam samo prvih par<br />

linija koda pa cemo ih iskopirati u Notepad. Trebaju nam ove linije:<br />

00401580 > $ 55 PUSH EBP<br />

00401581 . 8BEC MOV EBP,ESP<br />

00401583 . 6A FF PUSH -1<br />

00401585 . 68 00404000 PUSH CRC32.00404000<br />

0040158A . 68 88264000 PUSH CRC32.00402688<br />

Zasto smo uzeli samo ove linije Zato sto cemo zameniti ovaj OEP sa<br />

nekom nasom komandom ali posle izvrsavanja naseg koda ovaj OEP moramo<br />

i da vratimo nazad pa smo ga backupovali.<br />

Prvo trebamo naci mesto gde cemo ubaciti nas NAG ekran. To mesto uvek<br />

trazimo tamo gde ima puno praznih, neiskoriscenih 00 ili 90 bajtova. Posto<br />

ce nam za ubacivanje NAGa i vracanje OEPa trebati oko 50 bajtova onda<br />

cemo mesto za ubacivanje koda traziti na kraju fajla gde po pravilu ima<br />

mnogo slobodnih 00 bajtova. Kao sto vidimo od adrese 00403356 pa do<br />

00403FFF ima vise nego dovoljno mesta za ovo:<br />

00403356 00 DB 00<br />

...<br />

00403FFF 00 DB 00<br />

Tacnije ovde ima 3241 bajt slobodnog prostora. Pre ubacivanja samog<br />

MessageBoxA moramo da znamo da li se u fajlu nalazi API poziv ka<br />

MessageBoxA apiju i ako se nalazi koji su mu parametri. Mozete slobodno da<br />

odete u module i proverite da se API MessageBoxA stvarno nalazi u fajlu i da<br />

se API moze koristiti. Sama API funkcija ima sledece parametre:<br />

MessageBoxA(hwnd, Text, Naslov, MB_TIPMESSAGEBOXA);<br />

gde su:<br />

- hwd; vlasnik messageboxa, moze biti nula<br />

- Text; Tekst koji ce pisati unutar messageboxa<br />

- Naslov; Naslov prozora messageboxa<br />

- Tip; Da li je messagebox informacija ili upozorenje ili....<br />

A ovo bi u ASMu izgledalo ovako:<br />

PUSH Tip<br />

PUSH Naslov<br />

PUSH Text<br />

PUSH 0<br />

CALL MessageBoxA<br />

Pre nego sto unesemo ovaj CALL negde u slobodnom prostoru prvo moramo<br />

da unesemo sve tekstove koji se pojavljuju u messageboxu. Ovo radimo zato<br />

sto se u PUSH komandama za naslov i text ne nalaze ASCII vrednosti nego<br />

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

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

Saved successfully!

Ooh no, something went wrong!