# 微信hook消息接收 微信版本:3.9.12.45 账号:两个微信账号,大号用来发消息,小号用来测试 工具:微信、CE修改器、x64dbg  ## 定位消息地址 选择微信进程  大号给小号发送消息,扫描类型选择字符串,数值填写消息内容  重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域  找到带着wxid和xml格式的就是内存地址   ## x64dbg断点 记录一下当前的微信地址1B6555E11BD,关闭CE修改器,打开x64dbg,附加微信,按住alt+e选择wechatwin.dll  点进去,再内存窗口搜索刚才记录的地址  设置写入断点  此时微信大号给小号发送消息,查看堆栈信息  找到有个db的那个(这一步骤是再写入微信数据库之前定位call)  选择,右键“在反汇编中转到指定QWORD”  跳转之后,先取消上一个断点  然后针对跳转的位置,找到上一个call位置,在call处进行断点  发送消息,断点到了,查看RDI   在地址栏的第一个双击一下  这样我们可以得出 0x48 是 微信id 0x88 是 微信消息的内容 ## 计算偏移 找到断点位置,复制文件偏移  然后打开计算器那个图标,用偏移地址+C00  得出结果250AEA7 ## 验证结果 找到断点位置,复制地址  然后按住ALT+E,找到复制wechatwin.dll的基址  用计算器两者相减得出结果250AEA7  结果是对的,此时编写frida脚本 ```jsx var wechatWin = Module.findBaseAddress("WeChatWin.dll"); if (!wechatWin) { console.error("WeChatWin.dll模块未找到!"); throw new Error("模块未找到"); } var hookAddress = wechatWin.add(0x250AEA7); Interceptor.attach(hookAddress, { onEnter: function (args) { var timestamp = this.context.rdi.add(0x44).readInt(); var wxid = this.context.rdi.add(0x48).readPointer().readUtf16String(); var msg = this.context.rdi.add(0x88).readPointer().readUtf16String(); console.log("[++++] "+ timestamp +" "+ wxid +" : "+msg) } }); console.log("Hook已安装,等待接收消息..."); ``` 运行脚本  发送消息测试  Loading... # 微信hook消息接收 微信版本:3.9.12.45 账号:两个微信账号,大号用来发消息,小号用来测试 工具:微信、CE修改器、x64dbg  ## 定位消息地址 选择微信进程  大号给小号发送消息,扫描类型选择字符串,数值填写消息内容  重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域  找到带着wxid和xml格式的就是内存地址   ## x64dbg断点 记录一下当前的微信地址1B6555E11BD,关闭CE修改器,打开x64dbg,附加微信,按住alt+e选择wechatwin.dll  点进去,再内存窗口搜索刚才记录的地址  设置写入断点  此时微信大号给小号发送消息,查看堆栈信息  找到有个db的那个(这一步骤是再写入微信数据库之前定位call)  选择,右键“在反汇编中转到指定QWORD”  跳转之后,先取消上一个断点  然后针对跳转的位置,找到上一个call位置,在call处进行断点  发送消息,断点到了,查看RDI   在地址栏的第一个双击一下  这样我们可以得出 0x48 是 微信id 0x88 是 微信消息的内容 ## 计算偏移 找到断点位置,复制文件偏移  然后打开计算器那个图标,用偏移地址+C00  得出结果250AEA7 ## 验证结果 找到断点位置,复制地址  然后按住ALT+E,找到复制wechatwin.dll的基址  用计算器两者相减得出结果250AEA7  结果是对的,此时编写frida脚本 ```jsx var wechatWin = Module.findBaseAddress("WeChatWin.dll"); if (!wechatWin) { console.error("WeChatWin.dll模块未找到!"); throw new Error("模块未找到"); } var hookAddress = wechatWin.add(0x250AEA7); Interceptor.attach(hookAddress, { onEnter: function (args) { var timestamp = this.context.rdi.add(0x44).readInt(); var wxid = this.context.rdi.add(0x48).readPointer().readUtf16String(); var msg = this.context.rdi.add(0x88).readPointer().readUtf16String(); console.log("[++++] "+ timestamp +" "+ wxid +" : "+msg) } }); console.log("Hook已安装,等待接收消息..."); ``` 运行脚本  发送消息测试  最后修改:2025 年 07 月 15 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏
4 条评论
大佬,有无计划分享微信pc4.0的hook查找经验(ó﹏ò。)
理论上都差不多,一通百通。没有hook过微信4.0的,最近太忙了
针对上一个断点释放取消才行。