概述
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&Ios抓https包的全部内容,希望文章能够帮你解决Android&Ios抓https包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复