Карта сайтаСсылкиКонтакты

Обнаружить отладку приложения IsDebuggerPresent

PDF Печать
Статьи

Отлаживать Ваше приложение с целью улучшения кода, пользователи вряд-ли будут, это возможно только для создания патчей, крэков, кейгена, получения серийного номера и т.д.

p>Так что, если отладка не производится разработчиком, то это уже попытка взлома. Поэтому важно определить, когда приложение работает под отладчиком.

Самый простой способ, хотя и самый известный для хакеров – это применение функции 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.

 

Добавить комментарий


Защитный код
Обновить