Как определить - находится ли Ваше приложение в режиме отладки ?

Материал из DRKB


Обычно господа взломщики, для того, чтобы взломать защиту приложения, запускают его в режиме отладки и анализируют машинный код для определения точки перехвата ввода пароля с клавиатуры. Обычно таким способом ломаются игрушки :)

Конечно данный способ не сможет полностью защитить Ваш программный продукт от взлома, но прекратить выполнение секретного кода - запросто. Для этого мы будем использовать API функцию IsDebuggerPresent. Единственный недостаток этой функции, заключается в том, что она не работает под Windows 95.

Теперь посмотрим как эту функцию реализовать в Delphi:

function DebuggerPresent: Boolean;
type
  TDebugProc = function: Boolean; stdcall;
var
  Kernel32: HMODULE;
  DebugProc: TDebugProc;
begin
  Result := False;
  Kernel32 := GetModuleHandle('kernel32.dll');
  if Kernel32 <> 0 then
  begin
    @DebugProc := GetProcAddress(Kernel32, 'IsDebuggerPresent');
    if Assigned(DebugProc) then
      Result := DebugProc;
  end;
end;


А это окончательный пример вызова нашей функции:

if DebuggerPresent then
  ShowMessage('debugging')
else
  ShowMessage('NOT debugging');


Author: Simon Carter
Source: http://forum.sources.ru
ID: 04510