You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯Win32 API挂钩Chrome/IE浏览器Socket读写流量功能失效求助

Socket Hook代码问题排查与修复方案

核心错误点

  • 字符串类型强制转换错误:GetModuleHandle((LPCWSTR)lpModule)属于非法强制转换,ANSI字符串强转为宽字符串后会产生乱码,无法正确定位ws2_32.dll模块,导致钩子安装完全失败。应当调用ANSI版本API改为GetModuleHandleA(lpModule)。
  • 64位兼容性缺失:使用DWORD存储内存地址,64位系统下地址长度为8字节,DWORD仅能存储4字节会直接截断地址,跳转计算完全错误。当前主流Chrome、IE默认都是64位版本,这也是你抓不到包的核心原因之一。
  • DllMain违规操作:DLL入口点中不允许执行AllocConsole、文件IO、钩子安装这类非安全API,非常容易触发加载死锁,导致DLL注入直接失败。
  • 跳转指令覆盖错误:32位相对跳转仅需要5字节(0xE9 + 4字节偏移),你额外加的0xC3会覆盖原函数第6字节,大概率破坏原函数的指令完整性,执行时直接触发异常。
  • 路径转义错误:日志路径C:\tmp\log.txt中的反斜杠没有转义,实际运行时会被解析为转义字符,无法找到正确路径,即使抓到包也无法写入日志。
  • API覆盖不全:当前主流浏览器大多使用WSASend、WSARecv这类 Winsock 扩展API收发数据,仅Hook传统的send/recv无法覆盖全部调用场景。
  • 多线程安全缺失:全局钩子数组、文件流对象没有加锁,多线程并发调用Socket API时会出现竞争,轻则钩子失效重则进程崩溃。

修复建议

  1. 修正API调用的字符串类型问题,所有ANSI字符串参数对应调用带A后缀的Win32 API。
  2. 适配64位系统,地址变量改用DWORD_PTR类型,64位下使用14字节的绝对跳转指令实现Hook,避免跨模块跳转超出相对寻址范围。
  3. DllMain仅保留线程创建逻辑,所有初始化、钩子安装操作都放到独立的工作线程中执行,避免加载死锁。
  4. 调整Hook字节长度,32位下仅覆盖前5字节即可,Hook前先校验原函数开头指令长度,避免截断半条指令。
  5. 修正日志路径转义为C:\\tmp\\log.txt,提前确保C:\tmp目录存在,或者将日志写入进程有访问权限的目录。
  6. 补充HookWSASend、WSARecv、sendto、recvfrom等常用Socket API,覆盖更多收发场景。
  7. 添加临界区保护Hook/UnHook操作、文件写入操作,避免多线程竞争问题。

内容的提问来源于stack exchange,提问作者T Shoats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:39:04