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.
004010E9 |. 3C 00<br />
004010EB |. /74 59<br />
CMP AL,0<br />
JE SHORT timetria.00401146<br />
A ovde se sigurno proverava da li je broj preostalih startovanja programa<br />
nula ili ne. Stoga cemo ovu proveru promeniti u ovo:<br />
004010DC |. 2805 00304000<br />
004010E2 |> B0 90<br />
004010E4 |. 90<br />
004010E5 |. 90<br />
004010E6 |. 90<br />
004010E7 |. 34 69<br />
004010E9 |. 3C 00<br />
004010EB |. 74 59<br />
SUB BYTE PTR DS:[403000],AL<br />
MOV AL,90<br />
NOP<br />
NOP<br />
NOP<br />
XOR AL,69<br />
CMP AL,0<br />
JE SHORT timetria.00401146<br />
Posto se AL xoruje sa 69, jedina vrednost koja ce posle xorovanja dati nulu<br />
je ako se u AL nalazi bas 69. Dakle 69 xor 69 jednako 0. Ovo cemo resiti<br />
jednostavno tako sto cemo umesto MOV AL, BYTE PTR DS:[4030B5] ubaciti<br />
MOV AL,90. Broj 90 je proizvoljan i mozete uzeti bilo koji broj koji je veci od<br />
69. Naravno da smo mogli i ovde da obrisemo XOR ali nema potrebe, ovako<br />
je lakse. Ako pogledamo dole sta ce se izvrsiti ako se svi ovi skokovi ne<br />
izvrse, a nece posto smo ih modifikovali tako da nikada nece:<br />
004010ED |. FEC8<br />
DEC AL<br />
004010EF |. A2 01304000<br />
MOV BYTE PTR DS:[403001],AL<br />
004010F4 |. 34 69<br />
XOR AL,69<br />
004010F6 |. A2 B5304000<br />
MOV BYTE PTR DS:[4030B5],AL<br />
004010FB |. 6A 00 PUSH 0 ; /Origin = FILE_BEGIN<br />
004010FD |. 6A 00 PUSH 0 ; |pOffsetHi = NULL<br />
004010FF |. 6A 00 PUSH 0 ; |OffsetLo = 0<br />
00401101 |. FF35 14314000 PUSH DWORD PTR DS:[403114]; |hFile = NULL<br />
00401107 |. E8 18010000 CALL ; \SetFilePointer<br />
0040110C |. 6A 00 PUSH 0 ; /pOverlapped = NULL<br />
0040110E |. 68 E0304000<br />
PUSH timetria.004030E0<br />
00401113 |. 6A 0B PUSH 0B ; |nBytesToWrite = B<br />
00401115 |. 68 AB304000 PUSH timetria.004030AB ; |Buffer = 004030AB<br />
0040111A |. FF35 14314000<br />
PUSH DWORD PTR DS:[403114]; |hFile = NULL<br />
00401120 |. E8 05010000 CALL ; \WriteFile<br />
Videcemo da se u fajl DATA.DET snimaju novi podaci o vremenu i broju<br />
pokusaja, odnosno samo o broju startovanja programa jer se poslednje<br />
vreme startovanja programa cita iz DATA.DET file-timea. Kada snimimo sve<br />
ove promene mozemo da startujemo crackme i videcemo sledece:<br />
Mozemo restartovati ovaj crackme koliko puta zelimo, mozemo menjati<br />
datum a rezultat ce uvek biti isti: “Crackme zarobljen u vremenu :)”.<br />
Uspesno smo modifikovali program, a ako ste negde pogresili mozete<br />
iskoristiti backup fajl DATA.DET.bak da biste vezbali na ovom primeru.<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 154 <strong>of</strong> 293