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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CD Checking - Examples<br />

Prvo cu vas upoznati sa osnovnom teorijom provere CDova. Treba da<br />

shvatite da su CD promene jako slicne uklanjanju NAG ekrana. U 90%<br />

slucajeva se radi o jednostavnim porukama koje program izbacuje ako u CD-<br />

ROMu ne nadje odgovorajuci CD. Ove poruke mozete veoma lako presresti i<br />

izmeniti program tako da se ova poruka nikada ne prikaze. Ovo cete moci<br />

uraditi samo sa programima koji nisu pakovani nekim pakerom ili nisu<br />

zasticeni nekim programom koji zabranjuje kopiranje CDova (citaj: SafeDisc,<br />

StarForce3 i slicno). Da bismo odredili da li je neka igra zasticena najlakse je<br />

da otvorimo glavni ExE fajl igrice u PeIDu i vidimo da li je pakovan ili ne. Ali<br />

ne brinite postoji veliki broj novih i starih igara koji nemaju ovakvu zastitu i<br />

dobre su za praksu (citaj: Quake 3, Worms World Party, GTA: Vice City,... ), a za<br />

one zasticene postoje programi kao sto su UnSafeDisc i slicni koji ce vam<br />

“pomoci” da otpakujete ExE fajl i sredite ga normalno kao da nije ni bio<br />

pakovan. Ove osnovne zastite koje zahtevaju prisustvo CDa u CD-Romu<br />

izgledaju manje ili vise ovako u ASMu:<br />

CALL check_for_cd<br />

TEST EAX,EAX<br />

JE no_cd_inserted<br />

MOV EAX,1<br />

...<br />

Ovde se poziva zamisljena adresa check_for_cd koja proverava da li<br />

postoji neki fajl na CDu, ako taj fajl ne postoji onda je pogresan ili nikakav<br />

CD ubacen. U sledecoj liniji se proverava EAX sa samim sobom sto ce za<br />

rezultat imati da zero flag (vrednost koja moze biti samo 0 ili 1, a vrednost joj se<br />

uvek i samo dodeljuje posle nekog poredjenja tipa TEST ili CMP) bude postavljen<br />

kao true (1) ili false (0), a ako je zero flag jednak nula onda ce program<br />

skociti na zamisljenu adresu no_cd_inserted i prikazace poruku o pogresnom<br />

CDu. Naravno ako je CD ubacen onda ce zero flag biti jednak jedan i igrica ce<br />

se startovati. Ovo problem mozemo resiti jednostavnim NOPovanjem JE<br />

no_cd_inserted skoka i onda ce za program stalno biti ubacen CD. Ali ne<br />

dajte se zavarati da ce igrica stvarno raditi bez CDa ako joj je nesto od<br />

fajlova stvarno potrebno sa CDa da bi radila.<br />

Recimo da nas interesuje sta se nalazu u CALLu check_for_cd. Tu<br />

bismo mogli da vidimo nesto slicno ovome:<br />

check_for_cd:<br />

...<br />

MOV ECX,03 {neke ASM funkcije koje su nama nebitne}<br />

MOV EBX,401234{neke ASM funkcije koje su nama nebitne}<br />

...<br />

TEST EAX,EAX<br />

JE good_cd<br />

XOR EAX,EAX<br />

RET<br />

...<br />

good_cd:<br />

MOV EAX,1<br />

RET<br />

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

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

Saved successfully!

Ooh no, something went wrong!