天天看點

Android&Ios抓https包

Android

Android 7之後,使用者安裝的證書在APP的預設配置下是不被信任的,隻能通過重打包APP,或root手機之後導入證書,或frida腳本hook繞過

導入證書到system分區,可參考magisk的mount大法

adb shell 'umount /system/etc/security/cacerts' 

adb shell 'cp -pR /system/etc/security/cacerts /data/local/tmp/' 

adb shell 'cp /data/local/tmp/ +yourcertname /data/local/tmp/cacerts/' 

adb shell 'chmod -R 755 /data/local/tmp/cacerts' 

adb shell 'chcon -R  +con /data/local/tmp/cacerts' 

adb shell 'mount /data/local/tmp/cacerts /system/etc/security/cacerts' 

yourcertname需要對應修改為hash.0格式

openssl x509 -inform DER -in your_cacert.der -out cacert.pem  

openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1

 mv cacert.pem <hash>.0

frida腳本hook繞過,還可以過APP的證書綁定(SSL pinning)機制

try{

        var array_list = Java.use("java.util.ArrayList");

        var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');

        ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {

            var k = array_list.$new();

            return k;

        }

    }catch (e) {

        //console.log('universal '+e);

    }

IOS

IOS新版本,沒有區分使用者證書和系統證書,證書安裝完成之後,還需要在設定-通用-關于-證書信任 裡面啟用才行

ios12.x版本可以通過上述方式+fiddler抓到小程式等的https包,但ios13.x之後存在問題,參考https://support.apple.com/en-us/HT210176

若ios app啟用了證書綁定,則也需要相應的frida腳本hook來繞過

APP繞過WiFi代理

APP若使用Java層的Proxy.NO_PROXY選項,則即使設定了WiFi代理也無法抓到包

還有一種app,使用了Google的flutter架構和dart語言編寫的跨平台應用,其預設不使用WiFi代理(client.findProxy = HttpClient.findProxyFromEnvironment;啟用代理)

導入證書+proxydroid(https://github.com/zzzzfeng/proxydroid/releases)+mitmproxy可以完美解決(導入證書輔助工具https://github.com/zzzzfeng/appstarter,--cert選項)

注意:使用fiddler可能達不到效果,fiddler生成的證書是基于IP的,沒有讀取ssl中的sni資訊,需要(左下角輸入框)手動執行prefs set fiddler.network.https.SetCNFromSNI true才行

使用(11條消息) PacketCapture_v1.7.2.apk-網絡攻防文檔類資源-CSDN下載下傳抓包(基于V pN),首先将其證書(/data/misc/user/0/cacerts-added/e6f5bd3f.0)導入到system,然後本地抓包

歡迎關注

Android&amp;Ios抓https包