Android 版本
Android7.0 是一个分水岭
首先 http 是可以直接抓的,没任何问题
Android7.0 之前,抓 https 一般都是通过安装中间人证书的方式进行抓包
Android7.0 之后,系统不再信任用户级的证书,抓 https 就有点麻烦了
Network Security Configuration
在 Android7.0 及以上的系统中,一个名为“Network Security Configuration”的新安全功能也随之而来。这个新功能的目标是允许开发人员在不修改应用程序代码的情况下自定义他们的网络安全设置。SSL/TLS 的连接的默认配置中还包含了其他修改;如果应用程序的 SDK 高于或等于 24,则只有系统证书才会被信任。
当然了,作为 APP 的开发者自己肯定是可以配置这个权限的
-
设置自己 APP 信任的证书
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system"/> <certificates src="user"/> </trust-anchors> </base-config> </network-security-config>
-
然后再在 AndroidManifest.xml 中配置上
<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config" ...> </application> </manifest>
一些常见的套路
对于 7.0 以上无法 root 的手机,有下面几种常见的套路
-
反编译 apk
通过反编译 apk 调整 networkSecurityConfig 来实现抓包(只针对小部分软件)
这里使用ApkIDE,软件带的插件比较老,可以点击菜单中的帮助-更新进行插件升级
为了反编译新一点的软件,需要升级Apktool
-
历史版本
去豌豆荚下载软件的历史版本,找到 SDK 小于 24 的版本
-
双开软件
找一个 SDK 小于 24 的双开软件对要抓的软件去双开,然后去抓双开软件的包
比如 4.0.8625 版本的平行空间
ssl-pinning
有时候系统证书也装了,但是部分 APP 还是抓不到包,那么大概率就是使用了 SSL Pinning
常用的套路是对校验证书的代码进行 hook,即对特定类的特定方法的返回值进行替换
JustTrustMe 里面配置了一堆的常见 http 请求库的类名和方法名,但是如果 Android 在打包的时候开启了混淆就没办法了,所以最佳的方式还是反编译找到相关代码然后配合 Frida 进行 hook
目前有一些 APP 可以实现无 root 安装 Xposed 插件,比如太极(阴),VirtualXposed。但是需要卸载原软,然后对安装包进行二次安装,同时也无法保证所有软件正常工作。目前最优的办法是安装 Magisk 里面的 taichi 插件,然后激活太极(阴)变成太极(阳),就可以实现无需重装 app 的情况下使用 Xposed 插件插件
-
Xposed 配合JustTrustMe插件
-
使用 Frida
环境搭好后想找个有 ssl-pinning 的 APP 实验,可以到这里下载
MIUI 系统搞机
Root
官网申请解锁,下载解锁工具,进入 FastBoot 模式下解锁
升到开发板(升级设置里面连续点击 MIUI 图标开启手动选择安装包设置)。里面去开启 ROOT 权限,下载不动尝试开代理。自带的 root 不完全,另外 system 分区只可读,使用 Syslock 软件解锁 system 分区即可
或者刷入第三方 REC,一般都是 TWRP,然后卡刷 SuperSU 或者 Magisk(带权限管理)。推荐 Magisk,因为 SuperSU 好久没更新了,同时 Magisk 还可以配合其他程序插件实现更高级的功能
Xposed 插件
安装 Xposed,结果卡米,貌似是 MIUI10 的问题
好在太极也可以安装 Xposed 插件,搭配 Magisk 可以解锁太极的高级功能
安装证书
一般 Fiddler 的 cer 格式证书拷贝到手机里面点击就可以安装了
如果手机已经 Root,可以把证书安装到系统
# 输出一串hash 269953fb
openssl x509 -inform DER -subject_hash_old -in ./FiddlerRoot.cer
# 转换格式
openssl x509 -inform DER -in ./FiddlerRoot.cer -text > 269953fb.0
# 编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部
将生成为文件拷贝到手机,使用 RE 文件管理器复制到/system/etc/security/cacerts
,权限改为rw-r--r--
重启手机,到设置里面的信任的凭据里-系统,查看是否安装成功,Fiddler 的证书名是 DO_NOT_TRUST_FiddlerRoot
参考
当你写爬虫抓不到 APP 请求包的时候该怎么办?【高级篇-混淆导致通用 Hook 工具失效】