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.

praksi a posledica je loseg nacina programiranja jer ovakav primer<br />

predstavlja jednostavan poziv funkciji koja vraca vrednosti True ili False u<br />

zavisnosti da li je uneti serijski broj ispravan ili ne. Imajte na umu da se<br />

ovakva vrsta zastite, bez obzira koliko ona bila slozena unutar koda CALLa,<br />

resava za svega par minuta. Dakle resenje ovog problema shvatite tako sto<br />

nikada nemojte da pisete funkcije koje ce vracati vrednosti True ili False pri<br />

proveri serijskog broja, rutine za proveru pisite drugacije.<br />

Iako izgleda da smo sa ovim primerom zavrsili to nije tacno. Ovaj program<br />

kao i mnogi drugi belezi podatke o registraciji negde u sistemu. Mi cemo<br />

pronaci mesto gde se belezi ova informacija i zaobici cemo proveru tacnosti<br />

ove informacije.<br />

Kao sto sto smo vec videli, jednostavnim patchovanjem resavamo problem<br />

funkcija koje proveravaju tacnost nekog serijskog broja. Ono sto se sada<br />

pitamo je da li smo zaobisli vazne provere koje se mogu nalaziti unutar<br />

samog CALLa. Pogledacemo malo detaljnije CALL i videcemo sledece stvari:<br />

1) On generise fajl <strong>The</strong><strong>Art</strong>OfCracking.key u koji se najverovatnije<br />

zapisuje registracija.<br />

2) Ovaj fajl ce biti smesten u Windows direktorijum tako da kada se<br />

sledeci put crackme startuje, ovi podaci ce se ucitati i proveriti<br />

3) Postoji jedan zanimljiv skok:<br />

004085DE /0F85 B8000000 JNZ patchme.0040869C<br />

Ovaj skok nas vodi dovde:<br />

0040869C |> \33DB<br />

0040869E |> 33C0<br />

XOR EBX,EBX<br />

XOR EAX,EAX<br />

a sluzi za dodeljivanje vrednosti 0 EAXu i EBXu. Posto znamo da EAX<br />

na izlazu iz ovog CALLa mora biti jednak jedan, ovo znaci da se gornji<br />

skok ne sme izvrsiti. Ono sto nas trenutno buni je to sto ako se ne<br />

izvrsi gornji skok primeticemo da ce se sledeca dva reda uvek izvrsiti:<br />

00408695 |. BB 01000000 MOV EBX,1<br />

0040869A |. /EB 02<br />

JMP SHORT patchme.0040869E<br />

Hmmm, ovde imamo mali problem u EBX se smesta 1 a ne u EAX. Ako<br />

pogledamo odmah ispod prvog donjeg RETa videcemo odgovor na ovo<br />

pitanje:<br />

004086C0 . 8BC3<br />

004086C2 . 5E<br />

004086C3 . 5B<br />

004086C4 . 8BE5<br />

004086C6 . 5D<br />

004086C7 . C3<br />

MOV EAX,EBX<br />

POP ESI<br />

POP EBX<br />

MOV ESP,EBP<br />

POP EBP<br />

RET<br />

Aha na samom kraju se EAXu dodeljuje vrednost iz EBXa.<br />

Ostaje nam samo da se postaramo da se skok sa adrese 004085DE nikada<br />

ne izvrsi jer ce tada oba uslova biti ispunjena. I fajl ce biti snimljen i EAX ce<br />

uvek biti jednako jedan. Stoga cemo samo NOPovati JUMP na adresi<br />

004085DE i fajl ce biti snimljen sa bilo kojim unetim imenom i serijskim<br />

brojem. Ako uradimo trajni patch na ovoj adresi videcemo da ako ponovo<br />

startujemo ovaj crackeme on ce uvek biti registrovan sa bilo kojim unetim<br />

imenom i sa bilo kojim unetim serijskim brojem.<br />

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

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

Saved successfully!

Ooh no, something went wrong!