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