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.
F9 jos 2x kada stignemo do tog breakpointa. Zasto Zato sto ce se dole u<br />
Hex Dumpu (donji levi deo prozora) prikazivati otpakovani bajtovi. Kada i<br />
treci put pritisnemo F9 u Hex Dumpu cemo imati ovo:<br />
00404000 55 4E 52 45 47 49 53 54 UNREGIST<br />
00404008 45 52 45 44 21 21 21 21 ERED!!!!<br />
00404010 21 21 21 21 21 21 21 21 !!!!!!!!<br />
00404018 21 00 54 68 69 73 20 69 !.This i<br />
00404020 73 20 74 68 65 20 55 4E s the UN<br />
00404028 52 45 47 49 53 54 45 52 REGISTER<br />
00404030 45 44 20 76 65 72 73 69 ED versi<br />
00404038 6F 6E 2C 79 6F 75 20 6D on,you m<br />
00404040 75 73 74 20 50 41 59 21 ust PAY!<br />
00404048 00 00 00 00 00 00 00 00 ........<br />
a ovo izgleda kao otpakovani kod. Mozete da pritisnete F9 i cetvrti put ali ce<br />
se program startovati i mi necemo stici do naseg OEPa. Verujte mi probao<br />
sam vise puta ovo. Zato cemo pritisnuti F8 sto ce nas odvesti do sledece<br />
adrese:<br />
00408975 61 POPAD<br />
00408976 56 PUSH ESI<br />
00408977 57 PUSH EDI<br />
Polako sa F8 cemo vrsiti trace nadole sve dok ne stignemo do adrese:<br />
004089AD ^\7F D3<br />
JG SHORT demo_tEl.00408982<br />
Ovo je jedan jakooo dugacak loop u verujte mi ne zelite da ga izvrsavate<br />
celog, stoga cemo postaviti breakpoint odmah ispod ove adrese, postavicemo<br />
breakpoint na:<br />
004089AF 5F POP EDI<br />
I dalje traceujemo na dole sa F8 sve dok ne dodjemo do adrese:<br />
00408BBF FF95 889C4000 CALL DWORD PTR SS:[EBP+409C88]<br />
kada se u registrima pojavljuje ime user32.dll fajla. Posle detaljne analize<br />
shvatio sam da ovaj deo koda sluzi za otpakivanje i rekonstrukciju IATa<br />
(import tabele) stoga sam traceovao do zadnje adrese u ovom loopu koji sluzi<br />
za otpakivanje IATa. Drzacemo F8 sve dok ne dodjemo do ovoga:<br />
00408E49 8803 MOV BYTE PTR DS:[EBX],AL<br />
00408E4B 43 INC EBX<br />
00408E4C 3803 CMP BYTE PTR DS:[EBX],AL<br />
00408E4E ^ 75 F9<br />
JNZ SHORT demo_tEl.00408E49<br />
00408E50 8385 1A9D4000 0>ADD DWORD PTR SS:[EBP+409D1A],4<br />
00408E57 ^ E9 5DFEFFFF JMP demo_tEl.00408CB9<br />
Kada dodjemo do ovoga takodje cemo imati loop koji ubacuje API pozive u<br />
IAT tabelu. Postavicemo stoga breakpoint na 00408E57 i pritisnucemo F9 da<br />
dodjemo do njega. Sa F8 se ponovo vracamo na pocetak ovog loopa za<br />
otpakivanje IATa. Pritisnucemo F9 10x sto je ekvivalentno tome da smo<br />
otpakovali u memoriju deset API poziva. Zasto bas 10x Pa mozete sa F8<br />
traceovati ceo ovaj loop 10x i videcete da cete stalno dolaziti do breakpointa<br />
na adresi 00408E57. Sada cemo sa F8 preci jos 1x ovaj deo koda za<br />
otpakivanje IATa i ponovo cemo stici od 00408E57. Drzacemo sada ponovo<br />
F8 kako bismo otpakovali sledecu API funkciju, ali... Izgleda da nema vise<br />
API funkcija jer smo sada stigli do jednog drugog loopa koji kako vidimo<br />
prepravlja memoriju. Ovaj loop se nalazi ovde:<br />
00408EFB AC LODS BYTE PTR DS:[ESI]<br />
00408EFC 3206 XOR AL,BYTE PTR DS:[ESI]<br />
00408EFE AA STOS BYTE PTR ES:[EDI]<br />
00408EFF ^ E2 FA<br />
LOOPD SHORT demo_tEl.00408EFB<br />
Posto je i ovo veoma dugacak loop postavicemo breakpoint na CALL koji se<br />
nalazi odmah ispod LOOPD komande, postavicemo breakpoint na adresu:<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 211 <strong>of</strong> 293