zoukankan      html  css  js  c++  java
  • [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:举报
    我指的是程序退出的时侯不会报错。可能一般说来还是需要调用下一个勾子,将消息传给系统处理。是否如此,请各位指教
  • 相关阅读:
    JS中的原型规则与原型链
    JS中的“==”与强制类型转换
    协作开发中常用的Git命令小结
    JavaScript变量类型检测总结
    IDEA IntelliJ常用设置以及快捷键(转)
    Spring 发送 Email
    SSM框架的整合思路&功能实现
    使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
    基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
    Volley源码学习笔记
  • 原文地址:https://www.cnblogs.com/rainbow57/p/1441827.html
Copyright © 2011-2022 走看看