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.

Memory modification check<br />

Ovo je jedna retko (skoro nikada) koriscena tehnika. Ova tehnika je<br />

jako korisna kao zastita od raznih vrsta loadera, memory patchera ili bilo<br />

kakve manipulacije memorijom. Ja licno nisam sreo ovu tehniku u “metama”<br />

ali nije na odmet znati kako dodatno zastititi vasu aplikaciju. Posebno<br />

napisana aplikacija koja se nalazi ovde …\Casovi\Cas7\Memory Checker.exe.<br />

Malo uputstvo pre nego sto pocnemo sa reversingom ove aplikacije. U<br />

samom programu cete videti 00 koje ce se posle par sekundi promeniti u broj<br />

1727. Ovaj broj predstavlja checksum vrednost zasticenog dela koda. Svakih<br />

par sekundi odredjeni deo koda (memorije) se proverava i ako mu je<br />

checksum razlicit od 1727 onda ce se umesto ove poruke pojaviti poruka o<br />

modifikaciji memorije. Ova poruka ce se pojaviti samo ako modifikacija<br />

memorije ne sadrzi ni jednu NOP komandu. Ako je deo memorije NOPovan<br />

program ce se sam zatvoriti. Posmatrani deo memorije je segment od 20<br />

bajtova koji sluzi za prikazivanje NAG poruke svakih 20 sekundi. Ovaj deo<br />

koda odnosno memorije moramo da promenimo tako da se ova NAG poruka<br />

ne pojavljuje a da program i dalje misli da je sve u redu sa sadrzajem<br />

memorije. Ovaj zadatak iako izgleda veoma komplikovan nije toliko tezak.<br />

Uredu, pa da pocnemo. Otvorite ovu metu pomocu Ollyja. Ono sto<br />

mozete da pokusate je da nadjete gde se to pojavljuje poruka o menjanju<br />

memorije. Da bismo saznali kako ova poruka izgleda moramo da prvo<br />

ubijemo onu NAG poruku. Nadjimo je i postavimo jednostavnu RET komandu<br />

na adrese 004507F4 i 004507F5 (zapamtite, ne sme biti ni jedna NOP komanda).<br />

004507F4 6A 40 PUSH 40 ASCII "Error - Modified"<br />

004507F0 . 00 ASCII 0<br />

004507F1 00 DB 00<br />

Posto ovo ne predstavlja nikakav kod nego samo referencu ka stringu (ovo se<br />

koristi tako sto se kada zelimo da se ovaj string pojavi na ekranu funkciji zaduzenoj<br />

za pojavljivanje ne prosledjujemo string nego adresu na kojoj se on nalazi),<br />

selektovacemo adresu 004507E0 i postavicemo desno dugme -> Breakpoint -><br />

Memory, on access breakpoint na nju. Posle malo cekanja zavrsicemo ovde<br />

usled izvrsavanja breakpointa:<br />

00404687 |. 8B1F MOV EBX,DWORD PTR DS:[EDI]<br />

00404689 |. 38D9 CMP CL,BL<br />

0040468B |. 75 41<br />

JNZ SHORT Memory_C.004046CE<br />

Ono sto sada moramo da uradimo je da izvrsimo sav kod dok se ne vratimo<br />

u deo koda koji je pristupio ovoj memoriji. To u principu znaci da treba (u<br />

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

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

Saved successfully!

Ooh no, something went wrong!