当前位置:  开发笔记 > 编程语言 > 正文

如何拦截dll方法调用?

如何解决《如何拦截dll方法调用?》经验,为你挑选了2个好方法。

如何拦截dll方法调用?

它有哪些技术?

它只能在C/C++中完成吗?

如何拦截从所有正在运行的进程到给定dll的方法调用?

如何拦截从给定进程到给定dll的方法调用?

shoosh.. 10

我可以通过两种标准方式来实现这一目标

DLL导入表钩子.
为此,您需要解析DLL的PE标头,找到导入表并写入您自己的函数的地址,而不是已经写入的地址.您可以保存原始功能的地址,以便以后调用它.此维基百科文章的外部链接中的引用应该为您提供执行此操作所需的所有信息.

直接修改代码.找到要挂钩的函数的实际代码,并修改它的第一个操作码以跳转到您自己的代码.你需要保存那里的操作码,这样他们最终会被执行.这比听起来更简单,因为它已经以Detours库的形式以不低于Microsoft的方式实现.
这是一个非常巧妙的事情.只需几行代码,您就可以从outlook.exe中替换所有对GetSystemMetrics()的调用,并观察发生的奇迹.

一种方法的优点是另一种方法的缺点.第一种方法允许您将所有其他DLL以非挂钩方式完全添加到您想要的DLL的外科挂钩.第二种方法允许你最全局的钩子拦截所有调用功能.



1> shoosh..:

我可以通过两种标准方式来实现这一目标

DLL导入表钩子.
为此,您需要解析DLL的PE标头,找到导入表并写入您自己的函数的地址,而不是已经写入的地址.您可以保存原始功能的地址,以便以后调用它.此维基百科文章的外部链接中的引用应该为您提供执行此操作所需的所有信息.

直接修改代码.找到要挂钩的函数的实际代码,并修改它的第一个操作码以跳转到您自己的代码.你需要保存那里的操作码,这样他们最终会被执行.这比听起来更简单,因为它已经以Detours库的形式以不低于Microsoft的方式实现.
这是一个非常巧妙的事情.只需几行代码,您就可以从outlook.exe中替换所有对GetSystemMetrics()的调用,并观察发生的奇迹.

一种方法的优点是另一种方法的缺点.第一种方法允许您将所有其他DLL以非挂钩方式完全添加到您想要的DLL的外科挂钩.第二种方法允许你最全局的钩子拦截所有调用功能.



2> Ates Goral..:

如果您事先知道所有DLL函数,一种技术是编写自己的包装器DLL,将所有函数调用转发给真正的DLL.此DLL不必用C/C++编写.您需要做的就是匹配原始DLL的函数调用约定.


如果将包装器DLL放在与可执行文件相同的文件夹中,则可执行文件应该选择您的DLL而不是Windows/System32等下的DLL.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有