Android流量抓包环境配置

前言

如果你的手机有magisk 推荐你直接按照步骤-PC端前半部分,安装用户证书,此后参考步骤-最终曲线救国一节就好。

环境:

redmik305G MIUI12 Android 10(with Magisk)

Fiddler v5.0.20204.45441 for .NET 4.6.1Built: 2020年11月3日

步骤

PC端

安装Fiddler (注意是classic版本不是Fiddler Everywhere)

配置Fiddler 可以参考Fiddler抓包(Android app) 前四节

到这里Fiddler的证书是以用户证书的方式安装的,此时你的fiddler已经能收到很多流量了,但是很多APP都默认忽视用户证书,所以还是没办法抓,需要把证书装到system CA列表中。

然后需要PC端导出Fiddler 证书,导出的证书是cer格式,根据部分APP无法代理抓包的原因及解决方法(flutter 抓包) 这篇文章的叙述,通过以下命令将cer证书转为pem格式:

openssl x509 -inform der -in FiddlerRoot.cer -out FiddlerRoot.pem

再将pem证书重命名为Android system CA证书的格式:

openssl x509 -subject_hash_old -in FiddlerRoot.pem -noout

或者

openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer -noout

得到subject_hash_old值为269953fb

重命名FiddlerRoot.pem为269953fb.0 ,后面的.<number>是为了如果有hash重复的证书则加1以区分证书。

(好像cer格式的证书MIUI12 不认,疯狂卡死,报错,只能重启,装证书的时候可烦死我了😥)

Android 端

在修改系统文件之前最好先禁用系统验证:

adb disable-verity

将269953fb.0证书文件传到android设备的/system/etc/security/cacerts目录下,如果报只读文件系统的错误就remount一下:

adb remount

然后

adb push ./269953fb.0 /system/etc/security/cacerts/

这样完成就可以正常用fiddler抓包了

如果你失败了

但是如果你重启的话可能会发现证书无了,那你就和我遇到同样的问题了。

如果你此时执行adb remount,就发现这个文件又回来了😥,我猜测是magisk 虚拟system文件系统每次重启都重置了。

据说要固定文件系统更改要使用sync 命令:

adb shell sync

但是实测没有用,他可能是在真实的文件系统(without magisk)的情况下才好用吧😥

不管是删除文件还是增加文件,似乎执行sync无效,只要一重启就撤销了修改,而remount以后就能看到修改,所以合理猜测,remount以后修改的文件是另外一个分区,每次remount 就挂载了那个分区,我加的证书就是放到那个分区了,而magisk默认启动时挂载的分区中我没有做修改。

但是一重启证书就没了也不是办法,我们换一种方式,使用magisk模块,开机时自动将用户CA装载到System CA。

最终曲线救国

使用magisk 模块把用户CA装载到system CA列表中,参考:安卓7.0+https抓包新姿势(无需Root) 具体过程就是:

1.安装magisk(我有)

2.安装模块:https://github.com/NVISO-BE/MagiskTrustUserCerts

3.安装fiddler证书(先前以用户方式安装过了)

4.reboot

后记

我为了验证上面说的,MIUI对pem格式证书和cer证书格式的支持,删除了所有配置重新做了一遍,把自己搞崩了,现在只要一remount就疯狂卡死,报错。disable-verify也没用,我猜是我把remount的那个system分区搞坏了验证出问题了(但是我除了添加删除证书也没做别的呀555),难道以后都不能remount修改分区了吗,我现在感觉耶稣都救不了我😥😥😥。

先这样吧,靠magisk模块,先用着。

更新-HttpCanary

HttpCanary 是一款不错的 Android 手机端抓包软件,相比 Packet Capture 而言视图更加友好,更加方便复制数据,窗口模式抓包,还可以 json 格式化、实现注入拦截等操作。如果无 root 则需要安装平行空间来抓取 SSL/TLS 加密数据包。
目前 Android 11 收紧了 APP 安装 CA 证书的权限,只能用户手动安装。而 HttpCanary 已经很长一段时间没有更新了,导致 Android 11 上面无法正常安装证书抓包。
下面我们来解决证书安装问题,实现 Android 11 下 HttpCanary 的正常使用。

具体的分析过程可以参考:https://www.52pojie.cn/thread-1367926-1-1.html

具体来说HttpCanary 重写了 onActivityResult(),通过自动安装返回的 resultCode 判断了证书是否安装,如果安装成功便会在 cache 目录下写入一个无内容的 .jks。安装失败就无操作。而这个文件就是它判断是否安装了证书。因此,Android 11 上不能自动安装证书,就没有 .jks 文件,那么应用也就无法识别安装了证书,即使你早已手动安装。

获取证书

较新的版本未安装证书是无法导出证书的,所以需要在 /data/data/com.guoshi.httpcanary/cache/ 目录下找到 HttpCanary.pem,将 HttpCanary.pem 复制到内部储存空间上,按照上述方法更名证书文件:

openssl x509 -subject_hash_old -in HttpCanary.pem -noout

安装证书

安装为系统证书:将证书移到 /system/etc/security/cacerts/ 目录下设置好权限,或者自己弄一个 Magisk 模块替换。这个 Magisk 模块不难,就是模板压缩包里添加一个文件而已。

修改数据

在 /data/data/com.guoshi.httpcanary/cache/ 目录下新建一个 HttpCanary.jks 无内容的文件,改好权限 600,就是改得跟旁边的文件一样的权限就行了。

其他改法

说到底,就是安装证书后需要创建 .jks 文件来使得 APP 识别为已安装证书。至于安装为系统证书都可以自行安装。比如通过手机设置里的安装证书安装为用户证书,再在 Magisk 库里搜索安装 Move Certificates 模块将用户证书迁移为系统证书也是可以的。

参考文章都不错:

Fiddler抓包(Android app) 第五节开始讲了一些Fiddler的使用方法,值得一看

部分APP无法代理抓包的原因及解决方法(flutter 抓包) 讲了代理抓HTTPS流量的原理,值得一看