论坛首页 逆向工程技术区 阅读主题

【原创】【PC微信逆向】一、64位PC微信逆向分析:Hook微信自身日志

166 浏览 24 回复
#1 楼主 2026-06-01 21:08:47
一、前言
近期分析了一下64位的PC微信,对其中的一些内容做一些分享。本期分享内容:Hook微信自身日志。
本次分析使用版本:3.9.12.51。
二、逆向分析
众所周知,PC微信的主要业务功能均实现于WechatWin.dll,使用IDA分析。
随便选择一个看着很像(带有一些微信业务属性的,比如消息、图片等)的,追踪一下。

定位到函数sub_182627590,进去看看。

函数内发现代码获取了时间和线程ID并格式化,基本可以确定这里就是日志函数了。并发现代码循环处理字符串后在尾部添加结束符\x00。

将Hook点选择在添加结束符\x00之后,即0x18262780F处。这时候字符串已经组装完毕。

调试发现在0x18262780F处,rdx指向字符串。

三、Hook
64位的Hook和32位的有点区别,32位一般在Hook点直接jmp XXXXXXXX(立即数地址)或者call XXXXXXXX(立即数地址)即可,但是64位不支持直接jmp/call立即数地址,所以这里采用mov rax,XXXXXXXXXXXXXXXX(立即数地址),然后jmp rax的方式来Hook。由于这种方式会改写rax的值,所以在这之前还得保存一下rax的值,并在跳转后恢复,防止rax的值丢失。
梳理一下Hook流程:

保存rax
mov rax并jmp rax,就跳转到我们自己的Hook代码处
恢复rax
保存寄存器环境,由于64位没有pushad指令,只能手动保存
调用我们的功能代码
恢复寄存器环境,由于64位没有popad指令,只能手动恢复
执行因为Hook操作而被覆盖的原始代码
再次保存rax
mov eax并jmp eax,返回到本来的功能代码处
恢复rax,随后即可正常执行

四、先手动Hook
(一)Hook点

(二)Hook代码

五、编写代码自动Hook
(一)定义偏移地址

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287010.htm
#17 2026-06-01 21:08:47
linghaien


不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗

我还没计划研究4.0,但是你的这种情况我在3.X系列碰到过,你这边是不是调用完关键CALL之后让控制流继续沿着原来的路径执行下去了?如果是这样的话就会崩,需要调用完关键CALL之后立即转移控制流才行
#18 2026-06-01 21:08:47
FANTASYING


不难找啊,异步的,你找到add msg queue就可以找到了。。。

不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
#19 2026-06-01 21:08:47
linghaien


4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗

不难找啊,异步的,你找到add msg queue就可以找到了。。。
#20 2026-06-01 21:08:47
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
#21 2026-06-01 21:08:47
Python成长路


开搞4.0了

4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
#22 2026-06-01 21:08:47
Python成长路


开搞4.0了

4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
#23 2026-06-01 21:08:47
开搞4.0了
#24 2026-06-01 21:08:47
按楼主的方案异常获取的,使用特征码搜索应该通用,微信版本3.9.6.37测试通过

上传的附件:


winmm.zip

(113.16kb,40次下载)
#25 2026-06-01 21:08:47
wtujoxk


知道字符串存在断点的RDX,可以用异常直接把字符串读出来吧

用异常劫持执行流吗?感觉更麻烦一些呢
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号