首页
社区
课程
招聘
[原创]某聊天app的音视频通话逆向
发表于: 2020-7-13 15:00 10909

[原创]某聊天app的音视频通话逆向

2020-7-13 15:00
10909

首先找到这里

查找该interface的实现,找到了Xlog类, 可以看到输出日志的是native函数的logWrite2

查找Xlog的引用,找到isLogcatOpen, 总之先把这个变量置为true试试

frida代码:

尝试发起通话请求,此时可以看到一些日志:

由于通话请求并没有走http,所以尝试hook了一下send

发起通话请求后,可以看到如下日志

通话请求接通后,刷出如下日志

但是该类型的日志,在通话建立完成以后就不再刷出了,于是尝试用wireshark抓了一下手机的包,可以看到大量的UDP报文,怀疑这堆UDP报文是传输的语音消息
于是尝试hook sendto

此时建立通话连接以后一直有hook日志输出,且语音通话的声音消失

首先根据通话接通后就一直刷出的日志:I/MicroMsg.Voip.AudioPlayer: [, , 15648]:m_iLefSamples value is 640 and iPos value is 4800搜索,可找到如下函数, 其功能是创建一个线程循环的请求,直到通话结束才会退出循环

又根据sendto的trace堆栈,找到了通话接通时创建的线程函数

hook 该函数,再次打印调用堆栈

找到Java层调用的函数libvoipMain.soJava_com_xxxxx_mm_plugin_voip_model_v2protocal_AddNewDirectConns

所以语音过程是这样的:
Java_com_xxxxx_mm_plugin_voip_model_v2protocal_AddNewDirectConns--->
创建线程,建立连接--->
语音的获取--->
通过libvoipComm.soMMTinyLib::MMTSockSendto,UDP发送数据--->
通过libvoipComm.soMMTinyLib::MMTSockRecvfrom,UDP接收数据

在该函数中找到赋值点

综上,得到对应结构体偏移

找到MMTinyLib::MMTIoqueue中疑似构造AsyncUDPSocket结构体的函数

hook试试

得到结果

所以构造AsyncUDPSocket结构体的是CreateUdpSocket

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-7-13 15:03 被咸鱼炒白菜编辑 ,原因:
收藏
免费 5
支持
分享
最新回复 (8)
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
企鹅聊天?
2020-7-13 16:17
0
雪    币: 638
活跃值: (1772)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
hook一下 我们给对方放一首歌
2020-7-13 16:31
0
雪    币: 4765
活跃值: (4189)
能力值: ( LV8,RANK:138 )
在线值:
发帖
回帖
粉丝
4
保存一下发送和接收的数据,可以搞个通话“录音”?
2020-7-13 16:40
0
雪    币: 4065
活跃值: (3457)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
666
2020-7-13 19:25
0
雪    币: 1440
活跃值: (1350)
能力值: ( LV3,RANK:23 )
在线值:
发帖
回帖
粉丝
6
zhighest 保存一下发送和接收的数据,可以搞个通话“录音”?
send,recv 格式解析多麻烦,抓 Audio 流 简单,另外本地应该需要与麦克风流进行合成
2020-7-14 15:15
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
这个是微信的吧  要是语音信息是存放在本地的  之前弄过聊天记录这种,不过要是语音通话那肯定就没存了
2020-7-15 12:25
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
厉害了菜菜大佬
2020-7-18 16:35
0
雪    币: 129
活跃值: (4520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
我从Audiorecord替换pcm流比较简单点,前提录制好的音频码率什么的要对上
2020-11-12 09:47
0
游客
登录 | 注册 方可回帖
返回
//