微信協議入門——原理篇


先上兩張圖,看下微信的架構

 

各個模塊的功能分別如下:

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM