引用lulianqi15师傅的原理:
为了确保设备安全, 安卓系统会有一批自己信任的 CA 公钥列表(根证书),从 Android7.0 以后,系统允许每个应用可以自定义可信 CA 集。有部分应用默认只会信任系统预装的 CA 证书,而不会信任用户安装的 CA 证书,而在 Android 中用户安装的证书都是用户证书,所以无论是 Filddler 还是 Charles 我们都只是把他们的根证书安装到了用户证书,这些应用并不使用他们,所以我们的安装的证书是无效的。
我新建了一个 安卓 7.1(64bit) 的系统
然后下载了一个支付宝,并尝试打开,确实能打开不会闪退。
默认情况下,已经开启了 root,这里可以手动查看一下。
第一步,打开设置,点击关于平板电脑
第二步,连续点击安卓版本,即可开启开发者模式
第三部,点击多出来的开发者选项
第四步,开启 USB 调试
我这里用的是逍遥模拟器,其他的模拟器同理
首先来到模拟器的安装目录,D:\xiaoyao_hyper-v\Microvirt\MEmu(依自己安装时位置而定,默认安装的为D:\Program Files\Microvirt\MEmu)
开启一个 cmd 或者 powershell,(我这里用的是 powershell,如果用 cmd 那么执行的命令去掉.\即可)输入.\adb devices,即可看见 adb 调试的端口 (记得先开启模拟器)
输入.\adb connect 127.0.0.1:21523即可成功连接到安卓系统
接下来输入.\adb root获取 root 权限(通常你已经是 root 权限)
输入.\adb disable-verity关闭系统校验(你可以看到我并没有输入这个命令,但保险起见可以输入)
输入.\adb remount重新挂载文件系统,这样就可以对系统文件进行读写了
有的时候,执行 adb remount 指令也会失败,如下所示
E:>adb remount
remount of /system failed: Read-only file system
remount failed
遇到这种情况的解决方法如下:
E:>adb disable-verity
Verity disabled on /system
Now reboot your device for settings to take effect
E:>adb reboot (重启一下系统)
E:>adb root (此时获取root权限)
E:>adb remount (重新挂载文件系统)
remount succeeded
直接点击按钮下载一个 cacert.der 即可
shift + 右键开启一个 linux 子系统(WSL:微软商店即可直接下载安装,挺方便的)(只要是 liunx 即可或者只要是能打开 openssl 即可,你可以把文件传到 kali 中)
输入命令openssl x509 -subject_hash_old -inform der -in cacert.der
可以看到最上方输出了 hash : 9a5ba575 (根据自己的情况继续)
将 cacert.der 文件重命名为 9a5ba575.0
将该文件拖放到模拟器中 (直接从 win 桌面拖到 模拟器桌面即可,系统会自动将文件放到 Download 目录下)
回到刚才的 powershell 窗口,输入.\adb shell,即可进入安卓系统 (linux)
接下来涉及的目录都可以通过安卓系统的搜索功能查看到,如果不一样呢,以实际为准
接下来输入cd /storage/emulated/0/Download进入到 Download 目录,在这里你能看到我们刚拖入的证书文件
接下来移动(复制)证书,cp 9a5ba575.0 /system/etc/security/cacerts/9a5ba575.0
然后进入目录cd /system/etc/security/cacerts/,给予文件权限
chmod 644 9a5ba575.0
chgrp root 9a5ba575.0
重启安卓系统,直接就可以抓包了
如果这里还是没有权限移动证书,参考下面的命令来手动重新挂载系统
>adb shell
>su root
# 挂载 system 分区, 一般情况 /system 分区是只读的,需要挂载为读写。
>mount -o rw,remount /system
添加一个代理,这里需要确保使用和模拟器在同一个网段的 ip
配置模拟器的代理地址
成功获取支付宝小程序数据包