-
-
[原创]某聊天app的音视频通话逆向
-
发表于:
2020-7-13 15:00
10910
-
首先找到这里
查找该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.so
的Java_com_xxxxx_mm_plugin_voip_model_v2protocal_AddNewDirectConns
所以语音过程是这样的:
Java_com_xxxxx_mm_plugin_voip_model_v2protocal_AddNewDirectConns
--->
创建线程,建立连接--->
语音的获取--->
通过libvoipComm.so
的MMTinyLib::MMTSockSendto
,UDP发送数据--->
通过libvoipComm.so
的MMTinyLib::MMTSockRecvfrom
,UDP接收数据
在该函数中找到赋值点
综上,得到对应结构体偏移
找到MMTinyLib::MMTIoqueue
中疑似构造AsyncUDPSocket
结构体的函数
hook试试
得到结果
所以构造AsyncUDPSocket
结构体的是CreateUdpSocket
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-7-13 15:03
被咸鱼炒白菜编辑
,原因: