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.

004265B2 . 837D FC 00<br />

...<br />

004265B8 . BA 64674200<br />

...<br />

004265CD > \817D FC 00000><br />

CMP DWORD PTR SS:[EBP-4],0<br />

MOV EDX,CrackMe.00426764<br />

CMP DWORD PTR SS:[EBP-4],10000<br />

Kao sto vidimo u fajlu mora biti nesto zabelezeno a to nesto mora biti krace<br />

od 0x10000h karaktera. Prvi put se u registrima pojavljuje adresa koja sadrzi<br />

nas uneti string na adresi 00426600.<br />

00426600 . 8DB5 FCFFFEFF LEA ESI,DWORD PTR SS:[EBP+FFFEFFFC]<br />

Izvrsavajuci kod red po red dolazimo do sledece petlje:<br />

00426616 > /8A1C16 MOV BL,BYTE PTR DS:[ESI+EDX]<br />

00426619 . |84DB TEST BL,BL<br />

0042661B . |74 29<br />

JE SHORT CrackMe.00426646<br />

0042661D . |E8 16000000<br />

CALL CrackMe.00426638<br />

00426622 . |52 PUSH EDX<br />

00426623 . |F7E3 MUL EBX<br />

00426625 . |5A POP EDX<br />

00426626 . |35 326D5463 XOR EAX,63546D32<br />

0042662B . |FEC2<br />

INC DL<br />

0042662D . |39CA<br />

CMP EDX,ECX<br />

0042662F . |74 42<br />

JE SHORT CrackMe.00426673<br />

00426631 . |80FA FF CMP DL,0FF<br />

00426634 . |74 3D JE SHORT CrackMe.00426673<br />

00426636 .^\EB DE JMP SHORT CrackMe.00426616<br />

Analizom dolazimo do zakljucka da se na prvoj adresi ove petlje 00426616 u<br />

registar BL smesta hex vrednost svakog slova iz unetog stringa. Ovaj registar<br />

se koristi da bi se u EAX smestio neki broj. Mozda cak i pravi serijski broj!<br />

Primeticete da se u ovom loopu nalazi jedan CALL. Uci cemo u njega da<br />

vidimo sta se tu desava:<br />

00426638 /$ 57 PUSH EDI<br />

00426639 |. 8DBD F4FFFEFF LEA EDI,DWORD PTR SS:[EBP+FFFEFFF4]<br />

0042663F |. 8B3F<br />

MOV EDI,DWORD PTR DS:[EDI]<br />

00426641 |. 881C17 MOV BYTE PTR DS:[EDI+EDX],BL<br />

00426644 |. 5F POP EDI<br />

00426645 \. C3 RET<br />

Kao sto vidimo nista specijalno samo se slova iz stringa smestaju na neki<br />

duzi string. Posto skok:<br />

0042661B . /74 29<br />

JE SHORT CrackMe.00426646<br />

vodi van gornjeg loopa, postavicemo jedan break-point na adresu na koju on<br />

vodi. Postoji jos par skokova koji vode van tog loopa ali kako vidite ovde:<br />

00426619 . 84DB TEST BL,BL<br />

taj skok ce se izvrsiti kada se iskoriste sva slova iz unetog stringa. Takodje<br />

cemo postaviti break-point na adresu na koju vode ostala dva skoka:<br />

00426634 . /74 3D JE SHORT CrackMe.00426673<br />

Prodjimo vise puta kroz ovaj loop i videcemo da se skok ispod TEST BL,BL<br />

nikada nece izvrsiti. Hmmm... ovde nesto ne valja, jer ako se ne izvrsi ovaj<br />

skok mi cemo zavrsiti na delu koji samo prikazuje poruku o pogresnom<br />

serijskom broju na ekran. Sledi pitanje: Kako da BL bude nula<br />

Odgovor je jednostavan: U BL se smestaju hex vrednosti slova iz unetog<br />

stringa, jedan po jedan. JE skok ce se izvrsiti samo ako je BL jednak 0x00<br />

stoga cemo pomocu Hex editora na kraj naseg stringa dodati 0x00 bajt.<br />

Posle ovoga cemo pritisnuti F9 kako bi smo nastavili sa izvrsavanje programa<br />

i ponovo cemo pritisnuti Try again u crackmeu. Kada zastanemo na PUSH 0<br />

break-pointu pritisnucemo F9 2x kako bismo dosli do ovde:<br />

00426646 > \E8 EDFFFFFF CALL CrackMe.00426638<br />

Pritisnucemo F8 4x dok ne dodjemo dovde:<br />

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

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

Saved successfully!

Ooh no, something went wrong!