Обнаружить отладку приложения 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.
Комментарии