Einzelnen Beitrag anzeigen

Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 

Re: Fernzugriff auf eigenes Programm unterbinden

  Alt 10. Jul 2008, 10:36
So, nachdem ich nochmal einen halben Tag lang intensiv gesucht habe, konnte ich endliche eine Lösung finden!

Es gibt noch zwei Hook-Arten, die ich bisher übersehen oder schlicht nicht gefunden habe:
WH_KEYBOARD_LL sowie WH_MOUSE_LL

Diese beiden Low Level Hooks bieten in ihrem Flags einen Parameter an, welcher verrät, ob der Input "real" (Treiberebene) oder "Injected" (API-Ebene) ist.
Einzige Möglichkeit diesen Hook auszutricksen ist der Einsatz eines "Fake"-HID-Treibers, welcher den Input generiert oder man benutzt den Microsoft Remote Desktop. Den muss man sepperat über GetSystemMetrics abfragen.

Hier die entsprechenden MSDN-Seiten:Hier ein kleiner Code-Abriss (ich hab die THook-Klasse von Jens Borrisholt benutzt):

Delphi-Quellcode:
  { Structure used by WH_KEYBOARD_LL }
  KBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: DWORD;
  end;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

  { Structure used by WH_MOUSE_LL }
  POINT = record
    x,y: longint;
  end;

  MSLLHOOKSTRUCT = record
    pt: POINT;
    mouseData: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: DWORD;
  end;
  PMSLLHOOKSTRUCT = ^MSLLHOOKSTRUCT;

const
  LLMHF_INJECTED = 1;

{...}

procedure TfrmLLHookMain.KeyboardHookPreExecute(Hook: THook;
  var Hookmsg: THookMsg);
var
  pKeyHookStruct: PKBDLLHOOKSTRUCT;
  KeyHookStruct: KBDLLHOOKSTRUCT;
begin
  pKeyHookStruct := PKBDLLHOOKSTRUCT(Hookmsg.LParam);
  KeyHookStruct := pKeyHookStruct^;

  if KeyHookStruct.flags = LLKHF_INJECTED then
  begin
    lblKeyInjected.Caption := 'Keyboard: Is Injected Input';
    lblKeyInjected.Font.Color := clRed;
  end
  else
  begin
    lblKeyInjected.Caption := 'Keyboard: Is Real Input';
    lblKeyInjected.Font.Color := clGreen;
  end;
end;

procedure TfrmLLHookMain.MouseHookPreExecute(Hook: THook; var Hookmsg: THookMsg);
var
  pMouseHookStruct: PMSLLHOOKSTRUCT;
  MouseHookStruct: MSLLHOOKSTRUCT;
begin
  pMouseHookStruct := PMSLLHOOKSTRUCT(Hookmsg.LParam);
  MouseHookStruct := pMouseHookStruct^;

  if MouseHookStruct.flags = LLMHF_INJECTED then
  begin
    lblMouseInjected.Caption := 'Mouse: Is Injected Input';
    lblMouseInjected.Font.Color := clRed;
  end
  else
  begin
    lblMouseInjected.Caption := 'Mouse: Is Real Input';
    lblMouseInjected.Font.Color := clGreen;
  end;
end;
Vielen Dank an alle Helfer.
Die DP hat sich mal wieder bewährt ^^
Manuel
  Mit Zitat antworten Zitat