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