![]() |
Ermitteln ob Anwendung aus Debugger aufgerufen wird
Dieser Quellcode ist NICHT von mir, ich möchte ihn hier nur reinstellen, da ich ziemlich lange danach gesucht habe!
Sobald ich den Link zum Original wiederfinde, reiche ich den nach :> Mit diesem Code kann man ermitteln, ob die aktuell ausgeführte Anwendung direkt aus der Delphi IDE, oder aus einem anderen Debugger heraus gestartet wird. (SoftICE stellt meines Wissens nach eine Ausnahme dar) Es werden folgende Deklarationen benötigt:
Delphi-Quellcode:
type
TIsDebuggerPresent = function: BOOL; stdcall; type PProcessDatabase = ^TProcessDatabase; TProcessDatabase = packed record DontCare1: array[0..7] of Integer; Flags: Integer; DontCare2: array[0..11] of Integer; DebugeeCB: Integer; DontCare3: array[0..22] of Integer; DontCare4: Word; end; const fDebugSingle = $00000001; Der Programmcode:
Delphi-Quellcode:
Von jfheins kommt noch folgender Hinweis:
{ Funktion für Windows NT }
function IsDebuggerPresentForNT: Boolean; var Kernel32: LongInt; FIsDebuggerPresent: TIsDebuggerPresent; begin Result := False; Kernel32 := LoadLibrary('KERNEL32.DLL'); if Kernel32 <> 0 then begin FIsDebuggerPresent := GetProcAddress(Kernel32, 'IsDebuggerPresent'); if Assigned(FIsDebuggerPresent) then Result := FIsDebuggerPresent; FreeLibrary(Kernel32); end; end; {Funktion für Windows 9x } function IsDebuggerPresentForWindows: Boolean; var PDB: PProcessDatabase; TID: Integer; Obsfucator: Integer; begin Result := False; Obsfucator := 0; TID := GetCurrentThreadID; asm MOV EAX, FS:[18h] SUB EAX, 10h XOR EAX, [TID] MOV [Obsfucator], EAX end; if Obsfucator <> 0 then begin PDB := Pointer(GetCurrentProcessID xor Obsfucator); Result := (PDB^.Flags and fDebugSingle) <> 0; end; end; { Hauptfunktion } function IsDebuggerPresent: Boolean; var OSVersionInfo: TOSVersionInfo; begin OSVersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(OSVersionInfo); if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then Result := IsDebuggerPresentForNT else Result := IsDebuggerPresentForWindows; end;
Delphi-Quellcode:
Quelle:
if DebugHook <> 0 then
// In der IDE ![]() Dies funktioniert aber nur in dem Sinne, dass jeder Debugger erkannt wird und nicht sicher ist, ob es sich dabei wirklich um Delphi handelt. Von retnyg kommt folgende Assembler-Variante:
Delphi-Quellcode:
[edit=Chakotay1308]Weitere Methode angefügt. Mfg, Chakotay1308[/edit]
// aus uallprotect unit
function IsDebuggerPresent: boolean; stdcall; asm MOV EAX, FS:[030H] TEST EAX, EAX JS @@W9X @@WNT: MOV EAX, FS:[$18] MOV EAX, [EAX+$30] MOVZX EAX, [EAX+2] RET @@W9X: MOV EAX, [$BFFC9CE4] MOV ECX, [EAX] CMP [ECX+$54], 00000001 SBB EAX, EAX INC EAX RET end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz