• [zt]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),一直困扰我,不知道该怎么解决。

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



    ppccqq 发表于2009年4月9日 21:47:12  IP:举报
    多 谢代码共享,我测试了一下,如果将函数GetMsgProc改成如下所示,将不会报错,请各位指教。function GetMsgProc(Code: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;begin if Code = HC_ACTION then begin end; Result := CallNextHookEx(HookHandle, Code, WParam, LParam);end;
    ppccqq 发表于2009年4月9日 21:48:41  IP:举报
    我指的是程序退出的时侯不会报错。可能一般说来还是需要调用下一个勾子,将消息传给系统处理。是否如此,请各位指教
  • 相关阅读:
    【渗透攻防】深入了解Windows
    浅析B/S架构数据库连接方式
    剖析泄露你银行卡密码的钓鱼网站:真假“10086”
    红黑树的删除和加入节点
    Unity里包裹Debug,且不影响Debug的重定向
    Java向上转型和向下转型(附具体样例)
    Javascript 方法apply和call的差别
    普通androidproject转换为C/C++project之后,再还原成androidproject的解决方式
    初识双网卡
    js面向对象编程: js类定义函数时prototype和this差别?
  • 原文地址:https://www.cnblogs.com/rainbow57/p/1441827.html
Copyright © 2020-2023  润新知