協議分析思路
如何分析協議,也就是分析網絡數據的話題,相信很多程序員都非常感興趣。 協議分析的對象是網絡中傳輸的數據包。
協議分析的基本步驟
- 數據在發送前,加密; 接收後,進行解密, 所以協議分析的第一步就是找到發送/接收函數。
- 基於第一步,我們順着數據加解密這條線索,我們分析數據的如何加密算法,密鑰,和 數據的意義, 這就是逆向分析的活。
- 我們根據加密算法,我們就能找到密鑰, 然後順着密鑰條線索,我們分析密鑰的生成過程。根據密鑰的生成過程,我們就知道,我們數據能否利用。
所以協議分析的第一步也是最關鍵的一步就是找到應用層數據的發送、接收函數
發送/接收函數的定位
協議是分層, 而且每一層都有自己的發送函數,接收函數。 這裏我們關注的數據的應用層數據,我們關注的應用層的數據的發送、接收函數, 對於android 代碼實現有兩種,基於java層和Native層。
所以數據的發送、接收函數既可能出現Java層, 也有可能出現在Native 層。 以後會以實際案例分析如何定位發送函數, 下文是指協議分析的大綱。
Java層:
- TCP/UDP協議傳輸:
- HTTP協議傳輸
- 其他協議
方法: 找到對應協議使用類,然後搜索,排除,定位。
Native層:
- TCP/UDP協議傳輸: 函數writev/readv
- Http協議傳輸:
- mmtls協議傳輸:
- RTP協議傳輸:
- SRTP協議傳輸:
- xmpp協議傳輸
- 其他協議傳輸
方法:找到相應協議的發送,接收函數,找到相應方法。