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.

S<strong>of</strong>tICE detection<br />

Evo jednog primera za Delphi programere. Ovaj deo koda je zasebna<br />

funkcija koja se koristi za detekciju aktivnog S<strong>of</strong>tICEa. Ovo je standardna<br />

detekcija S<strong>of</strong>tICEa i kao ovakva se nalazi u 90% programa koji koriste<br />

takozvanu Anti-S<strong>of</strong>tICE funkciju.<br />

function S<strong>of</strong>tIce95: boolean;<br />

var hfile: Thandle;<br />

begin<br />

result:=false;<br />

hFile:=CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or<br />

FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);<br />

if(hfileINVALID_HANDLE_VALUE) then<br />

begin<br />

CloseHandle(hfile);<br />

result:=true;<br />

end;<br />

end;<br />

Prisustvo debuggera mozete proveriti uz pomoc malog Delphi programa koji<br />

se nalazi ovde …\Casovi\Cas7\Debugger check.exe. Posto znamo kako se zastita<br />

implementira u neki program stoga znamo kako i da zaobidjemo ovu<br />

proveru. Zastita koju u ovom primeru hocemo da zaobidjemo je provera<br />

aktivnog S<strong>of</strong>tICEa i S<strong>of</strong>tICEa na NTu. Neznatna je razlika izmedju ove dve<br />

provere i one uvek u programima idu zajedno. Jedina razlika izmedju NT i<br />

ostalih windowsa je u tome sto je prvi parametar za CreateFileA API<br />

\\.\NTICE umesto \\.\SICE. Posto su ovde u pitanju dva string parametra<br />

koja se prosledjuju API funkciji stoga se one sigurno u fajlu nalaze kao<br />

stringovi i mogu se naci uz pomoc String Reference prozora u W32Dasmu ili<br />

pomocu odgovarajuce komande u Olly-u. Dakle provericemo ovu teoriju u<br />

praksi. Otvorite ovu “metu” u Ollyju, pronadjite pomenute stringove i<br />

postavite break-pointe na njih. Sa F9 startujte program i pritisnite S<strong>of</strong>tICE<br />

NT dugme. Ono sto vidite je sledeca<br />

004523C4 /$ 53<br />

PUSH EBX<br />

004523C5 |. 33DB<br />

XOR EBX,EBX<br />

004523C7 |. 6A 00 PUSH 0 ; /hTemplateFile = NULL<br />

004523C9 |. 68 80000000 PUSH 80 ; |Attributes = NORMAL<br />

004523CE |. 6A 03 PUSH 3 ; |Mode = OPEN_EXISTING<br />

004523D0 |. 6A 00 PUSH 0 ; |pSecurity = NULL<br />

004523D2 |. 6A 03 PUSH 3 ; |ShareMode = ...<br />

004523D4 |. 68 000000C0 PUSH C0000000 ; |Access = ...<br />

004523D9 |. 68 F4234500 PUSH Debugger.004523F4 ; |FileName = "\\.\NTSICE"<br />

004523DE |. E8 4543FBFF CALL CreateFileA ; \CreateFileA<br />

004523E3 |. 83F8 FF<br />

CMP EAX,-1<br />

004523E6 |. 74 08<br />

JE SHORT Debugger.004523F0<br />

004523E8 |. 50 PUSH EAX ; /hObject<br />

004523E9 |. E8 1A43FBF CALL CloseHandle ; \CloseHandle<br />

004523EE |. B3 01<br />

MOV BL,1<br />

004523F0 |> 8BC3<br />

MOV EAX,EBX<br />

004523F2 |. 5B<br />

POP EBX<br />

004523F3 \. C3<br />

RET<br />

funkcija koja proverava da li je S<strong>of</strong>tICE aktivan. Ono sto vidimo je<br />

jednostavna funkcija koja vraca 1 (true) ako je SICE detektovan ili 0 (false)<br />

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

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

Saved successfully!

Ooh no, something went wrong!