The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
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