先上兩張圖,看下微信的架構
各個模塊的功能分別如下:
Application協議:微信用的是google的protobuf
Handshake協議:安全地協商出對稱加密密鑰
Alert協議:用於通知對端發生錯誤,希望對端關閉連接
Record協議:使用對稱加密密鑰進行安全的通信
理論上的流程就是:
1、先使用mmtls的Handshake協議,協商出加密密鑰
2、業務數據經過protobuf序列化后,再用協商出的加密密鑰進行加密傳送
更加具體的情況先給出:
1、協商出加密密鑰
微信選擇的握手協議
1-RTT ECDHE、1-RTT PSK和0-RTT PSK
長連接:1-RTT ECDHE、1-RTT PSK
斷連接:1-RTT ECDHE(客戶端沒有PSK)、0-RTT PSK(客戶端有PSK)
具體的握手流程圖
mmtls參考TLS1.3,對應的關鍵握手過程
1、客戶端發起協商請求:ClientHello
2、服務器返回協商響應:ServerHello
3、服務器通知協商結束:ServerFinish
4、客戶端確認協商結束:ClientFinish
2、加密傳送
業務數據,protobuf序列化,壓縮,業務層加密,mmtls層加密
具體的分析過程
1、IDA里面搜索client hello
2、進入第一個字符串 Client hello,對應的代碼就能看出整個Handshake握手相關步驟
3、進入第二個字符串:send client hello fail,對應的是具體的代碼

這里給出clienthello的數據結構
歡迎交流交流
https://github.com/KongKong20/WeChatPCHook