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