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.
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