c++ hooking ws2_32.dll recv



我正在尝试学习挂钩,只想挂接.exe的发送/recv函数。

我正在将项目构建为.dll,然后将其注入.exe

编辑:已解决

据我所知,有 3 种方法可以挂钩 API 调用:

  1. 在应用程序中注入一个 DLL,该 DLL 将重写包含 API 调用地址的导入地址表,以便应用程序改为调用您的函数;
  2. 使用要挂钩的 API 调用编写一个与 DLL 同名的虚拟 DLL,并将其放在应用程序的根目录中,这样它将加载您的 API 而不是系统的 API;
  3. 通过使用
  4. JMP yourfunc或具有类似效果的内容重写其代码来绕道 API 调用。

方法 1 非常流行,它甚至在维基百科页面中描述了钩子,如果你谷歌它,在各种例子中都有描述,比如这个,或者这个。

方法 2 有点棘手,您必须构建一个与您正在模仿的 DLL 具有相同名称和导出的 DLL,并绕过您不感兴趣的所有函数挂钩并为您编写自定义代码。我发现这种方法非常干净,因为您不必修改内存,也不必使用外部程序显式注入此 DLL,Windows 只是为您完成此操作,并且有一个加号,它通常在反调试和反黑客检测的雷达下飞行。下面是如何执行此操作的示例(32 位(。

方法 3 是Microsoft的最爱。它有一个特别好的优点:你可以挂接任何和每一个函数、方法或虚拟调用。它不依赖于从外部调用的函数来挂钩它,因此例如挂接 DirectX 方法非常流行。这是FRAPS,Discord Overlay,Overwolf Overlay以及几乎所有其他软件使用的方法,这些软件要么在游戏中放置叠加层,要么记录游戏玩法。您不需要专门使用Microsoft绕道,还有通用的替代方案。

最新更新