WhatsApp协议分析报告
0、分析结论:
1.whatsapp音视频通信,必须在对方同意通信的基础上,才能够获取对方的外网IP地址, 经过对whatsapp 通信的流程分析,发现要想在对方不知情的情况下获取对IP地址,是无法实现的。具体详见下面的分析过程。
2.
whatsapp语音通话是经过加密处理的,密钥在通话开始前经过XMPP协议传送给对方的, 所以通信过程音视频通信包是无法监听聊天内容的。
具体详见下面的分析过程。
whatsapp语音通话是经过加密处理的,密钥在通话开始前经过XMPP协议传送给对方的, 所以通信过程音视频通信包是无法监听聊天内容的。
具体详见下面的分析过程。
1、语音通信之获取对端外网IP 分析过程:
1.调用audioStream启动ClientB的通信从操作,SRTP的操作,OPENSL音频方面操作
情景: ClientA 给 ClientB 发起语音通话请求, ClientB同意电话请求, 最终由CLientB终止电话请求!!
一、ClientA 给 ClientB 发起语音通话请求,
ClientA端调用startCall 函数,
ClientA端调用startCall 函数,
1.调用 generateE2EKeys 生成一个E2E的callkey, callkey
用于通话的数据的加解密
用于通话的数据的加解密
2.发送一个calloffer请求给ClientB, 请求包中含有callkey
3.ClientB收到calloffer请求后, 读取出callkey,用于通话的数据的加解密,


4.然后回复一个
PreAccept一个回复包给ClientA。包中含有音视频的一些属性信息,用于ClientA初始化OpenSLSE 的Player的参数
PreAccept一个回复包给ClientA。包中含有音视频的一些属性信息,用于ClientA初始化OpenSLSE 的Player的参数
4.ClientA 收到
PreAccept请求包信息,初始化,为通话做准备工作。 然后等待ClientB的选择:同意通话,还是拒绝通话。
PreAccept请求包信息,初始化,为通话做准备工作。 然后等待ClientB的选择:同意通话,还是拒绝通话。
二、ClientB:同意通话请求 — Client端
调用acceptCall
调用acceptCall
1.调用audioStream启动ClientB的通信从操作,SRTP的操作,OPENSL音频方面操作
2.发送Accept回复包给ClientA, Accept包含,ClientB的外网IP地址–endpoints, 音视频的编码格式–encoding, 音频的样本采集率:rate
3.ClientA 收到Accept包,调用
nativeHandleCallOfferAccept 函数,收到对端的外网IP地址,然后建立P2P连接,连接成功开始通话
nativeHandleCallOfferAccept 函数,收到对端的外网IP地址,然后建立P2P连接,连接成功开始通话
综上分析:
必须需要ClientB同意通话,才能拿到用户ClientB的外网IP地址,所以要实现静默方式获取对端的IP地址是不可能是事情。
必须需要ClientB同意通话,才能拿到用户ClientB的外网IP地址,所以要实现静默方式获取对端的IP地址是不可能是事情。
2、语音通信之语音信息加解密 分析过程:
1.WhatsApp的语音通信使用的是SRTP协议进行传输的,如下图所示:
2.WhatsApp语音数据在网络传输前经过两次加密, 一次是
WhatsApp语音数据的加密, 二是SRTP传输协议内部加密。 两次加密使用都是对称加密算法, 两次加密的密钥都来源于一个32位随机变量Callkey。而callkey 根据上文分析师在通话前Call-Offer请求包传递的。
WhatsApp语音数据的加密, 二是SRTP传输协议内部加密。 两次加密使用都是对称加密算法, 两次加密的密钥都来源于一个32位随机变量Callkey。而callkey 根据上文分析师在通话前Call-Offer请求包传递的。
综上所述:
无法通过是解密语音数据包来实现对语音的监听的!!!
无法通过是解密语音数据包来实现对语音的监听的!!!
null