The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
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