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 .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新版本,没有区分用户证书和系统证书,证书安装完成之后,还需要在设置-通用-关于-证书信任 里面启用才行

若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才行

欢迎关注

Android&Ios抓https包_第1张图片 

你可能感兴趣的:(网络安全,Android)