首页
社区
课程
招聘
[原创][调试逆向] linux 微信 调试原创,可打印接收的消息,仅限技术交流,不定期更新
发表于: 2024-8-17 18:42 2613

[原创][调试逆向] linux 微信 调试原创,可打印接收的消息,仅限技术交流,不定期更新

2024-8-17 18:42
2613

请先安装 wechat-beta_1.0.0.145_amd64.fixed.deb 版本的微信,然后将我的应用程序wechat 还有libX.so替换进去,即可实现收消息打印,效果如下。

原理:

通过gdb分析 当linux 微信收到消息后,必然会走到地址 0x9b0a7a ,并且明文消息的内存地址会存放在x64架构的寄存器里面,我们接下来的做法就是hook这个地址位置,然后将寄存器里面的内容打印出来。

hook原理:

首先修改wechat的二进制文件,让其运行链接动态库时,多链接一个我的动态库libX.so.然后在libX.so里面做初始化操作,这个初始化操作主要就是修改机器指令,修改wechat应用内存地址 0x9b0a7a的指令,修改前记得先将里面的指令读取出来做个备份,然后插入mov rax, addr
jmp rax. 这两条指令的意思就是远程跳转,让CPU远程跳转到libX.so的动态库里面,跳转后,立即执行如下指令:

这一步的操作主要是为了备份寄存器信息,避免因为libX.so内部的函数调用等操作污染之前的寄存器。
然后将备份的寄存器地址输出出来,取数据并打印出来,这个数据就是明文消息内容。

如图所示,在rdi寄存器里面,
最后,我们要想办法把cpu跳转回wechat应用里面,恢复环境,
由于wechat应用内存机器指令被修改,所以现在拿出之前已经备份的wechat指令进行运行,然后再跳转回去,即可恢复环境,代码如下:

代码链接如下:
https://github.com/lmclmc/linux-wechat-hook.git


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 4388
活跃值: (290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
YiW
2
用LD_PRELOAD是不是异曲同工还方便些
2024-8-17 22:23
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
YiW 用LD_PRELOAD是不是异曲同工还方便些

我的重点不是加载动态库,而是劫持,LD_PRELOAD是方便点,但是这个方法也很容易被蓝军绕过去,不加载我的动态库。

最后于 2024-8-17 22:37 被mb_rwqksqcb编辑 ,原因:
2024-8-17 22:30
0
雪    币: 3398
活跃值: (3777)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
期待楼主分析Windows版。
2024-8-18 09:39
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
院士 期待楼主分析Windows版。
我的技术栈不在windows 
2024-8-19 01:44
0
雪    币: 313
活跃值: (2202)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
刚想研究Linux版微信就有教程,支持大佬
2024-8-20 11:10
0
雪    币: 2
活跃值: (256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
期待大佬分析iPad版本
2024-9-11 17:52
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
 随便用个hook框架不就行了,省事就链接个 frida
2024-9-12 09:40
0
游客
登录 | 注册 方可回帖
返回
//