Programowanie w języku Assembler » FAQ

Wykrywanie debuggera (SoftICE)

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

4 komentarze

KKKas 2005-02-11 17:24

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

Gryzli 2004-11-20 12:19

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

wasyl 2004-11-15 14:35

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

akarame 2004-11-15 13:26

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;