微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Delphi API HOOK完全说明(修正及说明)

   从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都是大家转来转去,原文出处我已经找不到了。

这篇文章写的很不错,但最后部分“PermuteFunction 的终极版本”描述的不太清楚,完全按照该文章代码执行,是不行的。需要修改mess.pas中代码才行。

其实文中提到的一个结构,代码中并没有使用

type
PIMAGE_IMPORT_DESCRIPTOR = ^
IMAGE_IMPORT_DESCRIPTOR;
IMAGE_IMPORT_DESCRIPTOR = packed record
OriginalFirstThunk : DWORD;
TimeDateStamp : DWORD;
ForwarderChain : DWORD;
Name : DWORD;
FirstThunk : DWORD;
end;

 

mess.pas中要修改的部分主要是

procedure API_Hookup;
begin
if @OldMessageBoxA = nil then
@OldMessageBoxA := TrueFunctionAddress(@messageBoxA);
if @OldMessageBoxW = nil then
@OldMessageBoxW := TrueFunctionAddress(@messageBoxW);
PermuteFunction(FuncmessageBoxA.AddressOfPointerToFunction,@MyBoxA);
PermuteFunction(FuncmessageBoxW.AddressOfPointerToFunction,@MyBoxW);
end;

这里应该是

PermuteFunction(@messageBoxA @MyBoxA);
PermuteFunction(@messageBoxA,@MyBoxW);

当然Un_API_hook部分也要做响应修改

另外在mess.pas中声明的“FuncmessageBoxA,FuncmessageBoxW: PImportCode;”也是没用了。
修改后的代码,大家可以到 http://download.csdn.net/source/575736  下载。

代码里,我故意加了一个 MB_YESNO并且标题为“are you sure”的messageBox,执行的话,可以看到这个messageBox并不会弹出,而是直接显示一个showmessage('yes')或者showmessage('no')。

这样也就是说我们可以拦截第三方程序的特定messageBox,并使其产生我们预期的结果值,从而控制目标程序流程。

另外按照这种方式进行Hook,当程序退出的时候,总是会导致资源管理器异常(explorer.exe),一直困扰我,不知道该怎么解决

有朋友知道解决办法的话,还请告知,非常感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐