一、前言
近期分析了一下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
【原创】【PC微信逆向】一、64位PC微信逆向分析:Hook微信自身日志
165 浏览
24 回复
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞出来很简单
最后于 2025-7-19 00:05
被酷鸟编辑
,原因:
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞出来很简单
最后于 2025-7-19 00:05
被酷鸟编辑
,原因:
wx_ㅤCary
4.0的日志我搞出来了哦[em_013]
可以分享吗
4.0的日志我搞出来了哦[em_013]
可以分享吗
我找4.0发送call,找到个一个参数的call,群和内容都在rcx里面。
wx_ㅤCary
4.0的日志我搞出来了哦[em_013]
跪求一个可以输出日志的hook
4.0的日志我搞出来了哦[em_013]
跪求一个可以输出日志的hook
linghaien
都解决几个月了,按这位兄弟的提示就能找到了
老哥 我日志也搞出,大概在哪个日志附件?能否提示下。谢谢
都解决几个月了,按这位兄弟的提示就能找到了
老哥 我日志也搞出,大概在哪个日志附件?能否提示下。谢谢
git_gg
哥,可以咨询下找到这个位置怎么调用 程序不会崩吗
都解决几个月了,按这位兄弟的提示就能找到了
哥,可以咨询下找到这个位置怎么调用 程序不会崩吗
都解决几个月了,按这位兄弟的提示就能找到了
FANTASYING
不难找啊,异步的,你找到add msg queue就可以找到了。。。
哥,可以咨询下找到这个位置怎么调用 程序不会崩吗
不难找啊,异步的,你找到add msg queue就可以找到了。。。
哥,可以咨询下找到这个位置怎么调用 程序不会崩吗
linghaien
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
请问发消息解决了吗
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
请问发消息解决了吗
wx_ㅤCary
我也是在这里找出来了啊,但是一call就崩
请问发消息解决了吗
我也是在这里找出来了啊,但是一call就崩
请问发消息解决了吗
酷鸟
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞 ...
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞 ...
wx_ㅤCary
我也是在这里找出来了啊,但是一call就崩
程序是QT写的,基本都是对象,你用3.0过程的思路去写call肯定崩
我也是在这里找出来了啊,但是一call就崩
程序是QT写的,基本都是对象,你用3.0过程的思路去写call肯定崩
酷鸟
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞 ...
我也是在这里找出来了啊,但是一call就崩
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
4.0的 日志搞 ...
我也是在这里找出来了啊,但是一call就崩
知道字符串存在断点的RDX,可以用异常直接把字符串读出来吧
wx_ㅤCary
4.0的日志我搞出来了哦[em_013]
围观大佬
4.0的日志我搞出来了哦[em_013]
围观大佬
mb_xlrydljz
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
4.0的日志我搞出来了哦
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
4.0的日志我搞出来了哦