一、前言
近期分析了一下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微信自身日志
166 浏览
24 回复
linghaien
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
我还没计划研究4.0,但是你的这种情况我在3.X系列碰到过,你这边是不是调用完关键CALL之后让控制流继续沿着原来的路径执行下去了?如果是这样的话就会崩,需要调用完关键CALL之后立即转移控制流才行
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
我还没计划研究4.0,但是你的这种情况我在3.X系列碰到过,你这边是不是调用完关键CALL之后让控制流继续沿着原来的路径执行下去了?如果是这样的话就会崩,需要调用完关键CALL之后立即转移控制流才行
FANTASYING
不难找啊,异步的,你找到add msg queue就可以找到了。。。
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
不难找啊,异步的,你找到add msg queue就可以找到了。。。
不太懂,我找到了CALL,但是CALL传了参数还是会崩,你的意思是要自己来触发异步发送消息吗
linghaien
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
不难找啊,异步的,你找到add msg queue就可以找到了。。。
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
不难找啊,异步的,你找到add msg queue就可以找到了。。。
4.0的发送消息CALL超级难找,我找到了几个疑似的,但是参数补不全,要崩,大神能讲解下吗
Python成长路
开搞4.0了
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
开搞4.0了
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
Python成长路
开搞4.0了
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
开搞4.0了
4.0大佬有找到吗,看ida,4.0完全没有这些字符串了
开搞4.0了
按楼主的方案异常获取的,使用特征码搜索应该通用,微信版本3.9.6.37测试通过
上传的附件:
winmm.zip
(113.16kb,40次下载)
上传的附件:
winmm.zip
(113.16kb,40次下载)
wtujoxk
知道字符串存在断点的RDX,可以用异常直接把字符串读出来吧
用异常劫持执行流吗?感觉更麻烦一些呢
知道字符串存在断点的RDX,可以用异常直接把字符串读出来吧
用异常劫持执行流吗?感觉更麻烦一些呢