Einzelnen Beitrag anzeigen

CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#16

AW: TerminateProcess geht nicht die Zweite

  Alt 25. Jun 2011, 15:17
Da es nur Hooks innerhalb Deiner Anweisung und nicht systemweit sein müssen, hält sich der Streß in Grenzen, denke ich

Schaue Dir mal die executehook.zip hier an. Davon brauchst Du quasi nur die HookUnit.pas, bzw. sogar nur einzelne Funktionen daraus (nämlich FinalFunctionAddress und PatchAddress).

Grob gesagt, machst Du ein:
Code:
type
   TMessageBoxA = function(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
   TMessageBoxW = function(hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT): Integer; stdcall;

var
   OldMessageBox: TOldMessageBoxA; // unter DXE: *W
   OldMessageBoxA: TOldMessageBoxA;
   OldMessageBoxW: TOldMessageBoxW;

...

procedure NewMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
   // log message to some kind of log instead.
   // to display message box, call OldMessageBoxA here.
end;
procedure NewMessageBoxW(hWnd: HWND; lpText, lpCaption: PWideChar; uType: UINT): Integer; stdcall;
begin
   // log message to some kind of log instead.
   // to display message box, call OldMessageBoxA here.
end;

...

initialization
   @OldMessageBox := FinalFunctionAddress(MessageBox);
   @OldMessageBoxA := FinalFunctionAddress(MessageBoxA);
   @OldMessageBoxW := FinalFunctionAddress(MessageBoxW);
   PatchAddress(@OldMessageBox, @NewMessageBox);
   PatchAddress(@OldMessageBoxA, @NewMessageBoxA);
   PatchAddress(@OldMessageBoxW, @NewMessageBoxW);
finalization
   PatchAddress(@NewMessageBox, @OldMessageBox);
   PatchAddress(@NewMessageBoxA, @OldMessageBoxA);
   PatchAddress(@NewMessageBoxW, @OldMessageBoxW);
end;
Das ist jetzt kein getesteter Code, sondern nur per copy'n'paste an Deine Situation angepasst, damit Du das Schema versteht. Ich arbeite inzwischen mit madCodeHook, kann mich daher nur noch grob erinnern, wie diese Methode ging.

Geändert von CCRDude (25. Jun 2011 um 15:23 Uhr)
  Mit Zitat antworten Zitat