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.

ako SICE nije detektovan. <strong>Reversing</strong> ove funkcije mozete raditi ili na ulazu u<br />

nju ili na izlazu iz nje, a mozete je raditi i na sredini. Bez nekog detaljisanja<br />

(dobar deo ovoga je vec vise puta objasnjen u knjizi) preci cu na moguca resenja<br />

ovog problema.<br />

1) Ako zelimo mozemo da promenimo sam pocetak:<br />

004523C4 /$ 53<br />

004523C5 |. 33DB<br />

004523C7 |. 5B<br />

004523C8 |. C3<br />

PUSH EBX<br />

XOR EBX,EBX<br />

POP EBX<br />

RET<br />

2) Mozemo da izmenimo i samo jedan skok:<br />

0045232F |. 83F8 FF<br />

CMP EAX,-1<br />

00452332 |. EB 08 JMP SHORT Debugger.0045233C<br />

00452334 |. 50 PUSH EAX ; /hObject<br />

00452335 |. E8 CE43FBFF CALL ; \CloseHandle<br />

0045233A |. B3 01<br />

MOV BL,1<br />

3) Ili mozemo da resetujemo EBX na samom kraju:<br />

0045233C 33DB XOR EBX,EBX<br />

0045233E |. 5B<br />

POP EBX<br />

0045233F \. C3<br />

RET<br />

Resenja je mnogo, mozete i sami smisliti neko. Moze se desiti da je string<br />

koji trazimo (\\.\SICE) maskiran ili enkriptovan u fajlu i da ne mozemo da ga<br />

nadjemo. U tom slucaju mozemo ovo mesto naci pomocu API funkcije<br />

CreateFileA koja sluzi za pravljenje “fajla” \\.\SICE. API funkcije mozemo<br />

naci tako sto cemo otvoriti Executables Module window (ALT + E) i tu u<br />

glavnom exe fajlu pronaci nasu API funkciju pod opcijom View Names (CTRL<br />

+ N). Ono na sta morate da pazite kada stavljate kondicionalni, importni ili<br />

obican break-point na API funkciju je da ce program uvek zastati u dll fajlu u<br />

kome se nalazi ta API funkcija (kernel32.dll, user32.dll itd.). Ono sto moramo<br />

da uradimo da bismo se vratili u exe koji poziva tu API funkciju je da<br />

izvrsimo kod do prve sledece RET funkcije, posle cega cemo se vratiti u ExE<br />

kod odakle je pozvana ta funkcija.<br />

Iako je ovo standardan nacin detekcije SICEa ali postoje i druge<br />

metode koje se zasnivaju na detekciji aktivnih procesa i otvorenih prozora.<br />

Za ovo se koriste druge API funkcije. Neke od njih mogu biti FindWindowA,<br />

FindWindowExA, Process32First, Process32Next, MessageBoxA (prikaz poruke<br />

o aktivnom debuggeru), itd. Ove zastite zaobilazite zavisno od slucaja do<br />

slucaja ali najcesce se resavaju pomocu poruke o aktivnom debuggeru koju<br />

programeri najcesce ostavljaju u programu. Ovo znaci da nam skoro u 90%<br />

preostalih slucajeva programeri preko obicnog message boxa prikazuju<br />

poruku da program nece biti startovan jer je neki od debuggera aktivan.<br />

NAPOMENA: Primeticete da sam u prvom primeru reversinga SICE funkcije<br />

izmenio 3 i 4 liniju u POP EBX i RET. Ovo RET je logicno jer ono sto se desava<br />

je jednostavno vracanje iz CALLa a ono sto moramo uraditi pre vracanja je<br />

da vratimo ulazne parametre funkcije pomocu komande POP (ulazni parametri<br />

se ne moraju uvek nalaziti pre CALLa nego se mogu naci i unutar samog CALLa na<br />

njegovom pocetku). Posto je jedini ulazni parametar EBX vracamo samo njega.<br />

Nema preterane potrebe da ovo pamtite, ovo se moze jednostavno prepisati<br />

sa kraja CALLa ali je bitno da imate na umu prilikom menjanja koda.<br />

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

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

Saved successfully!

Ooh no, something went wrong!