Wykrywanie debuggera (SoftICE)

ice^^

Aby wykryc sterownik debuggera systemowego:

mov ah,43h
int 68h
cmp eax,0F386h
jz mamy_debugger

Metoda ta nie dziala w przypadku zastosowania latek typu IceDump, FrogsICE.

Troche trudniejsza do wykrycia int 41h:

xor ax,ax
mov es,ax
mov bx, cs
lea dx, int41handler
xchg dx, es:[41h*4]
xchg bx, es:[41h*4+2]
in al, 40h
xor cx,cx
int 41h
xchg dx, es:[41h*4]
xchg bx, es:[41h*4+2]
cmp cl,al
jnz si_jest
 
int41handler PROC
mov cl,al
iret
int41handler ENDP
FAQ

4 komentarzy

akarame: a po co tak komplikowac z if'ami ? Nie wystarczy:
Result := DebugHook > 0;
? ;)

A nie możne ręcznie zmienić flagi pracy krokowej?
ja się do końca nie znam, ale jeżeli się da to w ten sposób można zablokować debuger...

Mozesz nie wlaczyc programu, bo est debugger :]
A debugger (np. SoftICE) sluzy do crackowania programu...

O to inny sposób:

function IsDebugger: boolean;

begin
if (DebugHook > 0) then
begin
Result := true;
end
else
Result := false;
(*
DebugHook: Byte platform = 0; { 1 to notify debugger of non-Delphi exceptions

1 to notify debugger of exception unwinding }
*)
end;