The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
“Not Getting Caught :)” - Exerecise<br />
Ako niste primetili pored primera …\Casovi\Cas7\Debugger check.exe<br />
postoji i primer …\Casovi\Cas7\Debugger Check2.exe. Ovaj drugi je napravljen<br />
da bude vezba za izbegavanje detekcije debuggera. Ako ste pazljivo citali<br />
prvi i drugi deo ovog poglavlja bez problema cete zaobici sve ove zastite i<br />
resicete uspesno i ovu vezbu. Pokusajte sami da resite ovaj problem a ako ne<br />
budete mogli vratite se ovde da utvrdite gradivo.<br />
Resenje:<br />
Ako citate ovaj deo pretpostavljam da niste sami mogli da se<br />
oslobodite provere debuggera u primeru. Pretpostavljam da ste krenuli<br />
logickim redosledom tako sto ste zapamtili poruku o detektovanom<br />
debuggeru i probali ste da je potrazite u fajlu. Ali, desilo se nesto jako cudno,<br />
nema takve niti bilo kakve slicne poruke u fajlu :) Ono sto sam namerno<br />
uradio za ovu vezbu je enkripcija stringova unutar samog fajla. To znaci da<br />
su stringovi i dalje tu samo nisu isti u fajlu i u memoriji. Ovo znaci da se<br />
stringovi pre upotrebe dekriptuju u svoj pravi oblik. Naravno vi ne znate<br />
kakav sam ja algoritam koristio za enkripciju stringova tako da nikako ne<br />
mozete znati kako koja poruka izgleda enkriptovana. Ono sto cemo mi uraditi<br />
je veoma jednostavno, koristicemo drugi metod za pronalazak mesta gde se<br />
proverava da li je program otvoren uz pomoc debuggera. Trazicemo ova<br />
mesta pomocu API poziva. Otvoricemo ovaj program uz pomoc Ollyja i<br />
postavicemo break-point na MessageBoxA API posto se pomocu njega<br />
prikazuje poruka o aktivnom debuggeru. Ovo se radi u Executable modulima<br />
(ALT + E), pod opcijom View Names (CTRL + N); Toggle break-point on<br />
import, ako ste zaboravili. Sada pokrenimo ovaj primer i sacekajmo da<br />
program dodje do break-pointa. Uklonimo ovaj break-point pritiskom na F2.<br />
Posto se nalazimo u dll fajlu sa F8 cemo izvrsavati kod polako dok ne<br />
dodjemo do RET komande i dok se i ona ne izvrsi. Sada, kada smo se vratili<br />
iz funkcije, nalazimo se na adresi 00450D7F. Ovo izgleda kao funkcija koja<br />
prikazuje poruku o prisustvu debuggera. Ovo cemo ukloniti jednostavnim<br />
postavljanjem obicne RET komande na adresi 00450D44. Resetujmo program<br />
sa CTRL + F2 i izmenimo adresu 00450D44 u RET (C3). Startujmo program i<br />
videcemo da se poruka opet pojavila. Hmmm. Resetujmo program opet,<br />
izmenimo adresu 00450D44 i postavimo opet break-point na MessageBoxA.<br />
Program je opet stao u nekom dll-u i posle izvrsavanja RET komande<br />
vraticemo se u deo koda koji poziva MessageBoxA API. Sada se nalazimo na<br />
adresi 00450847. Hmmm ovaj CALL izgleda isto kao onaj koji pocinje na<br />
adresi 00450D44. Da li postoje dve vrste provere Zapamtimo dve adrese<br />
00450D44 i 0045080C posto su one pocetne adrese ovih CALLova.<br />
Resetujmo program sa CTRL + F2 i pomocu Go To adress opcije (prvo dugme<br />
na levo pored dugmeta L u toolbaru) otici cemo na obe ove adrese. Kada odemo<br />
na prvu i selektujemo je videcemo detalje o njoj:<br />
Local call from 00450DED<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 136 <strong>of</strong> 293