AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit uallHook

Ein Thema von StefanG · begonnen am 30. Mai 2006 · letzter Beitrag vom 10. Jul 2007
 
StefanG

Registriert seit: 23. Feb 2006
74 Beiträge
 
#1

Problem mit uallHook

  Alt 30. Mai 2006, 11:52
Hi zusammen,

ich habe Probehalber mal versucht, eine API mit der uallCollection zu hooken.

mein Code dazu sieht so aus

Hauptprogramm:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses uallHook;

procedure TForm1.FormCreate(Sender: TObject);
var
  result : Cardinal;
begin
  result := GlobalInjectLibrary(pchar('terminateprocessdll.dll'));
  showmessage(inttostr(result));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  GlobalUnloadLibrary(pchar('terminateprocessdll.dll'));
end;

end.
DLL :
Delphi-Quellcode:
library terminateprocessdll;

uses
  SysUtils,
  windows,
  uallHook,
  Classes;

var
  oldTerminateProcess, nextTerminateProcess : function(hProcess : Cardinal; uExitCode : Integer) : LongBool; stdcall;

{$R *.res}

function myTerminateProcess(hProcess : Cardinal; uExitCode : Integer) : LongBool; stdcall;
begin
  result := False;
end;

procedure injectmain;
var
  h : integer;
begin
  h := GetModuleHandle(kernel32);
  if h > 0 then
  begin
    @oldTerminateProcess := GetProcAddress(h,'TerminateProcess');
    if @oldTerminateProcess <> nil then
      HookCode(@oldTerminateProcess,@myTerminateProcess,@nextTerminateProcess);
  end;
end;

procedure uninjectmain;
begin
  UnhookCode(@nextTerminateProcess);
end;

procedure dllmain(dwReason : integer);
begin
  case dwReason of
    DLL_PROCESS_ATTACH :
      injectmain;
    DLL_PROCESS_DETACH :
      uninjectmain;
  end;
end;

begin
  DllProc := @dllmain;
  DLLMain(1);
end.
Das Ganze kompiliert ohne Murren, nur passiert nichts. Beim Debuggen hab ich auch gesehen warum.

in diesem Teil aus der Funktion InjectLibrary...
Delphi-Quellcode:
  dwProcessID2 := OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessID);
  if (dwProcessID2 = 0) then
    Exit; {Cant open the target process with all access rights.}
... liefert OpenProcess() eine 0 zurück und folgedem wird das EXIT ausgeführt.
Die Frage ist nun, warum habe ich nicht die nötigen Zugriffsrechte und wovon hängen diese ab? (Bin in der Gruppe Administratoren)

PS : Die Funktion TerminateProcess habe ich nur zu Testzwecken genommen, weil die so wenig Parameter hatte und man den Erfolg leicht nachvollziehen kann.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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