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.

KeyGen – Ripping #2<br />

Vec smo videli da je tehnika ubacivanja koda u bilo koju metu veoma<br />

pogodna jer ne moramo da razumemo algoritam da bismo napravili<br />

keygenerator. Ovaj postupak cemo primeniti na metu in-keygen.exe.<br />

Otvoricemo ovu metu pomocu Ollyja i pronaci cemo karakteristicne<br />

stringove koji se odnose na poruke o tacno/netacno unetom serijskom broju.<br />

Posto su nam u ovom fajlu samo ovi stringovi vazni:<br />

Text strings referenced in in-keyge:.text<br />

Address Disassembly Text string<br />

00401103 PUSH in-keyge.00403078 ASCII "Yup"<br />

00401108 PUSH in-keyge.0040307C ASCII "Good Job!"<br />

00401118 PUSH in-keyge.00403072 ASCII "Error"<br />

0040111D PUSH in-keyge.0040309D ASCII "Nope. Try Again."<br />

Izabracemo string Good Job! i duplim klikom na njega dolazimo do mesta sa<br />

koga se poziva ovaj string, to jest naci cemo se ovde:<br />

00401108 |. 68 7C304000 PUSH in-keyge.0040307C ; |Text = "Good Job!"<br />

Posto se ocigledno odmah iznad ovog prikazivanja poruke o tacnom<br />

serijskom broju proverava da li je serijski broj ispravan nase izmene cemo<br />

uraditi na sledecem delu koda:<br />

004010EE |. 68 E2304000 PUSH in-keyge.004030E2 ; /String2 = "111111"<br />

004010F3 |. 68 C2304000 PUSH in-keyge.004030C2 ; |String1 = "bq1y"<br />

004010F8 |. E8 9B000000 CALL ; \lstrcmpA<br />

004010FD |. 0BC0<br />

OR EAX,EAX<br />

004010FF |. 75 15<br />

JNZ SHORT in-keyge.00401116<br />

Naravno ovakav prikaz (vidimo i stringove koji se porede) cemo dobiti tek kada<br />

postavimo break-point na adresu 004010EE i u nasu metu kao ime unesemo<br />

ap0x a kao serijski broj 111111.<br />

Kao sto vidimo APIju lstrcmpA se prosledjuju dva parametra, pravi serijski<br />

broj i nas uneti serijski broj. Posle izvrsavanja ovog APIja EAX ce sadrzati<br />

rezultat poredjenja. Ovaj rezultat ce biti 1 ako su uneti i tacan serijski broj<br />

jednaki ili 0 ako se ove dve vrednosti razlikuju. Ovde se jasno vidi razlika<br />

izmedju ovog i prethodnog primera. Za razliku od proslog crackmea ovde<br />

registri ne pokazuju direktno ka serijskom broju, to jest ne sadrze adresu na<br />

kojoj se nalazi tacan serijski broj zbog cega sada ne mozemo da koristimo<br />

PUSH EAX (ili bilo koji drugi registar) komandu. Sada moramo da izmenimo kod<br />

tako da ovaj kod:<br />

00401101 |. 6A 00 PUSH 0 ; /Style = MB_OK<br />

00401103 |. 68 78304000 PUSH in-keyge.00403078 ; |Title = "Yup"<br />

00401108 |. 68 7C304000 PUSH in-keyge.0040307C ; |Text = "Good Job!"<br />

0040110D |. 6A 00 PUSH 0 ; |hOwner = NULL<br />

0040110F |. E8 66000000 CALL ; \MessageBoxA<br />

sada umesto Good Job! prikazuje tacan serijski broj. Naravno posto je i Good<br />

Job! string i on ima adresu na kojoj se nalazi, a ta adresa je 0040307C (PUSH<br />

0040307C). Posto se i tacan serijski broj nalazi na odredjenoj, staticnoj,<br />

adresi mozemo da izmenimo parametar PUSH 0040307C tako da umesto ka<br />

stringu Good Job! pokazuje na tacan serijski broj. Dakle izmenicemo PUSH<br />

0040307C u PUSH 004030C2 (videti adrese od 004010EE do 004010F8) i<br />

MessageBox ce uvek prikazivati tacan serijski broj. Naravno ovo nije kraj<br />

naseg posla, ostaje nam jos samo da izmenimo JNZ skok pre prikazivanja<br />

poruke o tacnom serijskom broju, na adresi 004010FF, u NOP kako bi se<br />

nasa nova poruka koja sadrzi tacan serijski broj uvek prikazivala.<br />

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

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

Saved successfully!

Ooh no, something went wrong!