APP抓包問題總結及常見繞過方法
前言
在前天的沙龍上,師傅們積極探討,期間提出了一些關于app抓包的相關問題。在此小小的總結一波有關的分析以及解決辦法。
01 檢測代理
首先是當設置手機代理后,APP無法獲取網絡數據。會出現無法連接網絡的情況出現。這就說明app設置了代理檢測。常見的檢測代碼如下
public static boolean isWifiProxy(Context context) {final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;String proxyAddress;int proxyPort;if (IS_ICS_OR_LATER) {proxyAddress = System.getProperty("http.proxyHost"); //獲取代理主機String portStr = System.getProperty("http.proxyPort"); //獲取代理端口proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));} else {proxyAddress = android.net.Proxy.getHost(context);proxyPort = android.net.Proxy.getPort(context);}Log.i("代理信息","proxyAddress :"+proxyAddress + "prot : " proxyPort")return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);}
此時可以利用postern等工具,進行全局的流量轉發,跳過代理檢測。另外的方法就是反編譯app,進行hook或者是直接修改smali代碼重打包。關于修改smali代碼這個也很適用于Android7以上,系統不再信任用戶級的證書,只信任系統級的證書。換一條路,不改證書,改app也是可以達到這個效果。
02 No Proxy
其次就是通信協議代碼中使用了proxy(Proxy.NO_PROXY),即使是設置了代理也是會被繞過的。此時是網絡可以正常使用,但是就是抓不到包。這時候可能就是這個原因了。
public void run() {Looper.prepare();OkHttpClient okHttpClient = new OkHttpClient.Builder().proxy(Proxy.NO_PROXY). //使用此參數,可繞過系統代理直接發包build();Request request = new Request.Builder().url("http://www.baidu.com").build();Response response = null;try {response = okHttpClient.newCall(request).execute();Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();} catch (IOException e) {e.printStackTrace();}Looper.loop();}

此時也是可以使用全局系統代理工具,如HttpCanary等工具進行繞過,或者是直接hook該方法。
03 SSL Pinning證書鎖定
抓包時,無法連接網絡并且也接收不到任何數據
將APP代碼內置僅接受指定域名的證書,而不接受操作系統或者瀏覽器內置的CA根證書對應的任何證書。通過這種授權方式,保障了APP與服務端通信的唯一性和安全性,因此移動端APP與服務端(例如API網關)之間的通信可以保證絕對的安全。
這種方法有多種實現,比如說開發者將SSL證書的某些字節碼硬編碼在APP中。當應用程序與服務器通信時,它將檢查證書中是否存在相同的字節碼。如果存在,則應用程序將請求發送到服務器。如果字節碼不匹配,它將拋出SSL證書錯誤。此技術可防止攻擊者使用自己的自簽名證書。
這個時候就需要往抓包工具中導入app的證書, 通常在assets文件夾中,.p12 .pem .cer。然后再hook。不過此時要對抗混淆。
搬運之前的文章https://www.52pojie.cn/thread-1405170-1-1.html



總結
其次最強工具目前就是肉絲師傅的r0capture。

可以通殺任何抓包問題。讓天底下沒有抓不到的包。在之前的文章中,也提供了一份frida的justTrustme的腳本,可以hook常見的通信協議的代理檢測。大家可以用一下測試一下。