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

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

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

Saved successfully!

Ooh no, something went wrong!