Обнаружить отладку приложения IsDebuggerPresent
Самый простой способ, хотя и самый известный для хакеров – это применение функции API Windows IsDebuggerPresent(), которая есть во всех версиях Windows, начиная с Windows 98.
Вам же нужно просто сделать вызов функции IsDebuggerPresent() и в зависимости от результата этой функции, определить поведение приложения, если оно находится под отладчиком.
Примечание: функция IsDebuggerPresent() очень известна, а ее имя будет находиться в исполняемом файле, так что я настоятельно рекомендую изменить ее имя на какое-либо менее заметное, например, на CallEditString().
Проверка на действия отладчика (пример простого приложения):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function DebuggerPresent : boolean;
type
TDebugProc = function : boolean;
stdcall;
var
Kernel32: HMODULE;
DebugProc: TDebugProc;
begin { DebuggerPresent }
Result := False;
Kernel32 := GetModuleHandle('kernel32');
if Kernel32<>0 then
begin
@DebugProc := GetProcAddress(Kernel32, 'IsDebuggerPresent');
if Assigned(DebugProc) then
Result := DebugProc
end; { Kernel32<>0 }
end; { DebuggerPresent }
procedure TForm1.FormCreate(Sender: TObject);
begin
if DebuggerPresent then Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
end.
Комментарии