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實現,提高反編譯門檻