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.
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