13.07.2015 Views

The art of cracking - Tutoriali

The art of cracking - Tutoriali

The art of cracking - Tutoriali

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.

T h e Serials – PatchingPonekad je potrebno naterati program da misli da je svaki uneti seriskibroj ispravan. Ova tema je vec dotaknuta na samom pocetku poglavlja alicemo ovde tu pricu prosiriti sa novim cinjenicama i olaksati sebi u mnogocemu posao. Primer za ovaj deo poglavlja se nalazi u folderu Cas2 a zove sepatchme.exe. Otvoricemo ovaj program pomocu Ollya i potrazicemo string kojise pojavljuje na ekranu kada unesemo pogresan seriski broj. Ta poruka je“Bad Cracker” - bez navodnika, a nacicemo je na standardan nacin pomocustring referenca. Poruka se nalazi ovde:004087C8 |> \68 18884000 PUSH patchme.00408818 ; /Text = "Bad Cracker"a ako pogledamo malo gore videcemo i poruku o ispravnom seriskom broju.004087B1 |. 68 0C884000 PUSH patchme.0040880C ; /Text = "Cracked ok"Primeticemo jedan kondicioni skok iznad poruke o ispravnom seriskom broju.004087A9 |. E8 7EFDFFFF004087AE |. 48004087AF |. 75 17CALL patchme.0040852CDEC EAXJNZ SHORT patchme.004087C8Tom skoku predhodi jedan CALL od kojeg direktno zavisi da li ce ovaj skokbiti izvrsen, a ovo znaci da je ovo mesto na kome se proverava uneti seriskibroj, stoga cemo postaviti jedan break-point na taj CALL i pokrenucemoprogram. U polja za unos cemo uneti ap0x kao ime a kao seriski broj111111, pa cemo pritisnuti Check. Naravno program je zastao na nasembreak-pointu. Sa F7 ucicemo u njega i nacemo se ovde:0040852C /$ 550040852D |. 8BECPUSH EBPMOV EBP,ESP0040852F |. 81C4 E4FEFFFF ADD ESP,-11C00408535 |. 53 PUSH EBXOno sto znamo o ASM komandama pomoce nam da resimo ovaj problem.Ako pogledamo adrese 004087AE i 004087AF videcemo da se EAX smanjujeza jedan, a ako je nesto manje ili jednako necemu onda se skace na porukuo pogresnom seriskom broju. Ovo nesto je zero flag. Dakle ako je EAXjednak minus 1 odnosno FFFFFFFF onda ce se skociti na poruku o pogresnomseriskom broju. Da bi smo ovo izbegli moramo da EAXu dodelimo takvuvrednost da kada se od nje oduzme jedan vrednost u EAXu bude veca odminus jedan. Naravno u EAX cemo smestiti najveci sledeci broj to jest jedan,tako da kad od njega oduzmemo jedan JNZ ne bude izvrsen jer je EAX posleoduzimanja jednak nula a ne minus jedan. Ovu izmenu koda cemo raditiunutar samog CALLa a ne pre CALLa jer ne znamo da li se ova funkcijapoziva vise puta i odakle, tako da je najsigurnije da to uradimo u samomCALLu. Da bi smo uradili ovo sto smo zamislili selektovacemo adresu0040852C i dulpim klikom izmenicemo njen sadrzaj u ovo:0040852C B8 01000000 MOV EAX,100408531 C3 RETIzmenili smo ASM kod u ovo jer ovaj kod radi bas ono sto mi zelimo. OnEAXu dodeljuje vrednost jedan i pomocu komande RET se vraca iz ovogCALLa, a samim tim ce svaka provera koja je prosledjena ovom CALLu uvekbiti uspesna to jest za svaki uneti seriski broj i ime program ce pokazivati daje registrovan. Na isti nacin se rasava ovaj isti problem ako se umesto DECEAX komande nalazi TEST EAX,EAX komanda. Ovaj primer se cesto srece upraksi a posledica je loseg nacina programiranja jer ovakav primer<strong>The</strong> Art <strong>of</strong> Cracking by Ap0x Page 40 <strong>of</strong> 165

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

Saved successfully!

Ooh no, something went wrong!