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流量的原理,值得一看