Delphi 全局Hook-in-WriteProcessMemory函数
我想知道如何绕道函数,例如WriteProcessMemory 作为WriteProcessMemory监视器:Delphi 全局Hook-in-WriteProcessMemory函数,delphi,Delphi,我想知道如何绕道函数,例如WriteProcessMemory 作为WriteProcessMemory监视器: 您需要创建一个D-Tour 您需要这样的记录: unit PatchU; interface type TPatchMethod = record private type pPatchEvent = ^TPatchEvent; // "Asm" opcode hack to patch an existing routine TPatchEv
您需要创建一个D-Tour 您需要这样的记录:
unit PatchU;
interface
type
TPatchMethod = record
private type
pPatchEvent = ^TPatchEvent;
// "Asm" opcode hack to patch an existing routine
TPatchEvent = packed record
Jump: Byte;
Offset: Integer;
end;
var
PatchedMethod, OriginalMethod: TPatchEvent;
PatchPositionMethod: pPatchEvent;
public
constructor Create(const aSource, aDestination: Pointer);
procedure Restore;
procedure Hook;
end;
implementation
uses
Windows, Sysutils;
{ TPatchMethod }
constructor TPatchMethod.Create(const aSource, aDestination: Pointer);
var
OldProtect: Cardinal;
begin
PatchPositionMethod := pPatchEvent(aSource);
OriginalMethod := PatchPositionMethod^;
PatchedMethod.Jump := $E9;
PatchedMethod.Offset := PByte(aDestination) - PByte(PatchPositionMethod) - SizeOf(TPatchEvent);
if not VirtualProtect(PatchPositionMethod, SizeOf(TPatchEvent), PAGE_EXECUTE_READWRITE, OldProtect) then
RaiseLastOSError;
Hook;
end;
procedure TPatchMethod.Hook;
begin
PatchPositionMethod^ := PatchedMethod;
end;
procedure TPatchMethod.Restore;
begin
PatchPositionMethod^ := OriginalMethod;
end;
end.
然后使用它:
var
TcxLabel_Patch: TPatchMethod;
在本例中,我钩住了tcxalbel的构造函数。但你可以勾住一切 挂接API调用需要绕道而行。与WHU键盘无关。这个问题需要更清楚一些。对不起,我的英语说得不流利。我需要在WriteProcessMemory函数上做一个全局钩子,我想知道SetWindowsHookEx是否可以?不可以。你需要绕道。你能告诉我一个函数可以做到这一点吗?如果你在评论中问这个问题,就不会。请阅读并编辑问题,询问您真正想要回答的问题。Asker希望此挂钩适用于我认为的所有进程。据我所知,您只能将此D-tour取消为您自己的进程。可以在其他进程中绕过API调用processes@JensBorrisholt谢谢你的回复,但这是一个全球挂钩,我想做什么。我为我给帖子带来的麻烦道歉。@SCOFIELD您似乎不愿意学习如何使用此网站。问题还不清楚。请你可以编辑它,使它清楚地表明你在寻找什么。
type
THooked_cxLabel = class(TcxLabel)
constructor HookedCreate(AOwner: TComponent);
end;
THooked_cxImage = class(TcxImage)
constructor HookedCreate(AOwner: TComponent);
end;
constructor THooked_cxLabel.HookedCreate(AOwner: TComponent);
begin
TcxLabel_Patch.Restore;
try
Create(AOwner);
Transparent := True;
finally
TcxLabel_Patch.Hook;
end;
end;
initialization
TcxLabel_Patch := TPatchMethod.Create(@TcxLabel.Create, @THooked_cxLabel.HookedCreate);
finalization
end.