HTTP/HTTPS 請求與防抓包

TCP/IP分層

TCP/IP的分層共分爲四層:應用層、傳輸層、網絡層、數據鏈路層;

  • 應用層:向用戶提供應用層服務時的通訊活動(ftp、dns、http)
  • 傳輸層:網絡連接中兩臺計算機的數據傳輸(tcp、udp)
  • 網絡層:處理網絡上流動的數據包,通過怎樣的傳輸路徑把數據包傳送給對方(ip)
  • 網絡鏈路層:與硬件相關的網卡、設備驅動等等

HTTP/HTTPS

HTTP
HyperText Transfer Protocol (超文本傳輸協議) 被用於在Web瀏覽器和網站服務器之間傳遞信息,在TCP/IP中處於應用層

  • 通過使用明文,內容可能被竊聽
  • 不驗證通信方的身份,因此又可能遭遇僞裝
  • 無法證明報文的完整性,所以又可能遭到篡改

HTTPS

HTTPS中的S 表示SSL或者TLS,就是在原HTTP的基礎上加上一層用於數據加密、解密、身份認證的安全層

  • HTTP + 加密 + 認證 + 完整性保護 = HTTPS
    HTTPS單向認證:
    在這裏插入圖片描述
    HTTPS雙向認證:

在這裏插入圖片描述

抓包原理

在這裏插入圖片描述

防抓包:代理檢測

檢測事發後使用網絡代理
將網絡庫(如okhttp庫)設置爲無代理模式,不走系統代理
httpURLConnection:

URL url = new URL(urlStr);
urlConnection = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);

OKHttp

OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

怎麼抓設置上面後的代碼的包?

使用HOOK技術
在這裏插入圖片描述

防抓包:證書固定

SSL-Pinning

  • 證書鎖定(Certificate Pinning)
    在客戶端代碼內置僅接收指定域名的證書,而不接收操作系統或瀏覽器內置的CA根證書對應的任何證書。
  • 公鑰鎖定(Public Key Pinning)
    提取證書中的公鑰並內置到客戶端中,通過與服務器對比弓腰值來驗證連接的準確性。

如何破解證書固定(SSL-Pinning)

Xposed框架 + justTrustme模塊

  • Xposed框架:Android 上應用廣泛的HOOK框架,基於Xposed框架製作的外掛模塊可以hook任意應用層的java函數,修改函數實現。
  • justTrustMe插件:justTrustMe是一個用來禁用、繞過SSL證書檢查的基於Xposed模塊。將Android系統中所有用於校驗SSL證書的API都進行來HOOK,從而繞過證書檢查

防抓包:解決HOOK

  • 檢查HOOK:檢查Xposed、Frida、Substrate等Hook框架
  • 使用Socket連接:使用Socket走TCP/UDP,防止應用層被抓包
  • 傳輸數據加密:協議字段加密傳輸,並隱藏密鑰,應用層加固
  • native層傳輸:將網絡傳輸邏輯寫到jni實現,提高反編譯門檻
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章