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.

Kao sto vidimo neke vrednosti se racunaju i porede. Ako bilo koji od ovih<br />

uslova nije ispunjen skocice se ovde:<br />

00401146 |> \6A 30 PUSH 30<br />

00401148 |. 68 97304000 PUSH timetria.00403097; |Title = "Too Bad ;)"<br />

0040114D |. 68 76304000<br />

PUSH timetria.00403076 ;|Text = "Sorry, this crackme”<br />

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

00401154 |. E8 A1000000 CALL ; \MessageBoxA<br />

Naravno moguce je promeniti skokove tako da se ovo nikada ne izvrsi ali<br />

posto postoje programi koji proveravaju da li su im modifikovani odredjeni<br />

skokovi mi cemo naterati ovaj program da snimi .DET fajl tako da program<br />

nikada ne istekne. Prvo imamo ovu proveru:<br />

004010A8 |> \8B0D AB304000<br />

004010AE |. 81F1 69696969<br />

004010B4 |. A1 E4304000<br />

004010B9 |. 3BC1<br />

004010BB |. 0F85 85000000<br />

MOV ECX,DWORD PTR DS:[4030AB]<br />

XOR ECX,69696969<br />

MOV EAX,DWORD PTR DS:[4030E4]<br />

CMP EAX,ECX<br />

JNZ timetria.00401146<br />

Posto se porede EAX i ECX u ECX cemo staviti vrednost iz EAXa jer ce tako<br />

ova dva broja uvek biti jednaka. Promenicemo gornji kod u ovo:<br />

004010A8 |> \8B0D E4304000<br />

004010AE |. 90<br />

004010AF |. 90<br />

004010B0 |. 90<br />

004010B1 |. 90<br />

004010B2 |. 90<br />

004010B3 |. 90<br />

004010B4 |. A1 E4304000<br />

004010B9 |. 3BC1<br />

004010BB |. 0F85 85000000<br />

MOV ECX,DWORD PTR DS:[4030E4]<br />

NOP<br />

NOP<br />

NOP<br />

NOP<br />

NOP<br />

NOP<br />

MOV EAX,DWORD PTR DS:[4030E4]<br />

CMP EAX,ECX<br />

JNZ timetria.00401146<br />

Primetite da sam program modifikovao tako da ce se u EAX i ECX smestati<br />

vrednosti sa iste adrese 004030E4. Primeticete i da sam obrisao (NOPovao)<br />

onu XOR ECX komandu, jer bi ona poremetila vrednost ECXa. Idemo na<br />

sledeci niz provera:<br />

004010C1 |. 66:8B0D B1304><br />

004010C8 |. 66:81F1 6969<br />

004010CD |. 66:A1 EA30400><br />

004010D3 |. 66:2BC1<br />

004010D6 |. 66:83F8 03<br />

004010DA |. 77 6A<br />

MOV CX,WORD PTR DS:[4030B1]<br />

XOR CX,6969<br />

MOV AX,WORD PTR DS:[4030EA]<br />

SUB AX,CX<br />

CMP AX,3<br />

JA SHORT timetria.00401146<br />

Ovde je ocigledno da se nesto racuna pa se AX poredi sa 3... Hmmm sa<br />

brojem dana koji nam je dozvoljen da koristimo program. Ovo cemo izmeniti<br />

u ovo:<br />

004010C1 |. 66:8B0D EA304><br />

004010C8 |. 90<br />

004010C9 |. 90<br />

004010CA |. 90<br />

004010CB |. 90<br />

004010CC |. 90<br />

004010CD |. 66:A1 EA30400><br />

004010D3 |. 66:2BC1<br />

004010D6 |. 66:83F8 03<br />

004010DA |. 77 6A<br />

MOV CX,WORD PTR DS:[4030EA]<br />

NOP<br />

NOP<br />

NOP<br />

NOP<br />

NOP<br />

MOV AX,WORD PTR DS:[4030EA]<br />

SUB AX,CX<br />

CMP AX,3<br />

JA SHORT timetria.00401146<br />

Primeticete da smo kao i gore CXu i AXu dodelili iste vrednosti, da smo<br />

izbrisali XOR. Ovo je zgodno jer ako pogledate skok ispod videcete da ce se<br />

on izvrsiti samo ako je AX vece od 3. Posto AX i CX imaju iste vrednosti posle<br />

oduzimanja SUB AX,CX vrednost koja ce se nalaziti u AX je 0, pa stoga<br />

nikada nece biti veca od 3. Idemo dalje i stizemo do poslednje provere:<br />

004010DC |. 2805 00304000<br />

004010E2 |> A0 B5304000<br />

004010E7 |. 34 69<br />

SUB BYTE PTR DS:[403000],AL<br />

MOV AL,BYTE PTR DS:[4030B5]<br />

XOR AL,69<br />

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

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

Saved successfully!

Ooh no, something went wrong!