c++ hooking ws2_32.dll recv
Posted
技术标签:
【中文标题】c++ hooking ws2_32.dll recv【英文标题】: 【发布时间】:2018-01-02 15:18:38 【问题描述】:我正在尝试学习挂钩,并且只想挂钩 .exe 的发送/接收功能。
我将项目构建为 .dll,然后将其注入 .exe
编辑:已解决
【问题讨论】:
【参考方案1】:据我所知,有 3 种挂钩 API 调用的方法:
-
在应用程序中注入一个 DLL,该 DLL 将重写包含 API 调用地址的导入地址表,以便应用程序调用您的函数;
编写一个与您要挂钩的 API 调用同名的虚拟 DLL,并将其放在应用程序的根目录中,这样它将加载您的 API 而不是系统的;
通过使用
JMP yourfunc
或具有类似效果的东西重写其代码来绕过 API 调用。
方法 1 非常流行,它甚至在 Wikipedia page about Hooking 和各种示例中都有描述,如果您使用 Google 搜索它,例如 this one 或 this one。
方法 2 有点棘手,你必须构建一个同名的 DLL 并导出你正在模仿的那个,并绕过所有你不感兴趣的函数并为你编写自定义代码是。我发现这种方法非常干净,因为您不必修改内存,不必使用外部程序显式注入此 DLL,Windows 只是为您完成,而且,它通常在雷达下飞行反调试和反黑客检测。 Here is an example 如何做到这一点(32 位)。
方法 3 是Microsoft's favorite。它有一个特别好的优势:您可以挂钩任何函数、方法或虚拟调用。它不依赖于外部调用的函数来挂钩它,因此挂钩 DirectX 方法非常流行。这是 FRAPS、Discord Overlay、Overwolf Overlay 以及几乎所有其他在游戏中放置叠加层或记录游戏玩法的软件所使用的方法。您不需要专门使用 Microsoft Detours,还有 generic alternative。
【讨论】:
感谢您提供的信息。如果我想使用方法 1 连接到 ws2_32 发送函数并在打印出包数据后,再次调用原始函数并传递原始参数,我需要如何进行?不幸的是,我不擅长 C++ 并且对 IAT 主题不熟悉以上是关于c++ hooking ws2_32.dll recv的主要内容,如果未能解决你的问题,请参考以下文章
在哪里下载 ws2_32.dll 2.2 版的运行函数 WSPRegisterMemory?
Windos_Hook_动态链接库-CreateDllDemo ——第一课 _Po学校