又一种抓取手机APP https流量的方法
前言
最近要研究一款APP,需要进行抓包才能获取到资源,按照惯例使用fidller进行抓包,结果APP对证书做了校验,不信任fiddler的证书,无法抓取https流量,报着尝试的心态对该APP进行反编译研究,结果发现又一种实用的抓取https数据包的方法,下面直接给出方法,有不对的地方请指正,欢迎大家关注和点赞。
声明: 本文内容仅用于网络安全教育、学术研究和防御能力建设目的,严禁将文本内容用于任何未经授权的系统、网络等恶意的非法活动,作者不负任何责任。
一、工具
工具:雷电模拟器5.0、fiddler5.0(其他抓包工具也可以)、安卓修改大师、adb
证书格式转换:https://www.ssleye.com/ssltool/crt_dpem.html[1]
涉及工具可以关注本公众号获取;
二、配置抓包工具
1、打开fiddler
2、Tools-Options

3、开启解密Https流量设置
切换到HTTPS,按照下图进行勾选

4、导出fiddler证书

点击”Actions“,点击”Trust Root Certificate“信任证书,再点”Export Root Certificate to Desktop“,把证书导出到桌面上,文件名”FiddlerRoot.cer“
5、设置开启代理

设置监听端口,这里我使用8080,点击OK按钮。
6、转换证书
浏览器中打开https://www.ssleye.com/ssltool/crt_dpem.html,把刚导出的FiddlerRoot.cer证书转换为pem格式,保存文件名为fiddler.pem,后面会使用到[2]
三、APP反编译
反编译目的主要需要修改AndroidManifest.xml文件和把之前转换的pem证书一起打包进去

1、复制证书
把fiddler.pem证书复制到\res\raw目录中
2、编辑AndroidManifest.xml文件
<!-- 添加调试权限 --><uses-permissionandroid:name="android.permission.DEBUGGER" /><applicationandroid:allowAudioPlaybackCapture="true"android:allowBackup="true"android:debuggable="true"android:networkSecurityConfig="@xml/network_security_config"android:usesCleartextTraffic="true"...>
增加调试权限和在application中配置开启调试,android:networkSecurityConfig 是 Android 系统中用于配置应用网络通信安全策略的重要属性。它允许开发者定义应用如何处理网络连接的安全性,特别是在 Android 9.0 (API 级别 28) 及更高版本中,默认禁止明文 HTTP 流量。
3、编辑network_security_config.xml文件
android:networkSecurityConfig对应文件路径是\res\xml\network_security_config.xml 通过 network_security_config.xml 文件,可以控制以下安全特性:
-
明文流量处理:决定是否允许 HTTP 明文流量 -
证书信任:配置信任的 CA 证书 -
域名特定配置:为不同域名设置不同的安全策略 -
调试配置:仅在调试模式下启用特定安全设置 按下面编辑该文件
<?xml version="1.0" encoding="utf-8"?><network-security-config><debug-overrides><trust-anchors><!-- 信任系统证书 --><certificatessrc="system" /><!-- 信任用户证书 --><certificatessrc="user" /></trust-anchors></debug-overrides><base-configcleartextTrafficPermitted="true"><trust-anchors><certificatessrc="system" /><certificatessrc="@raw/charles_123" /><certificatessrc="@raw/fiddler" /><certificatessrc="@raw/fiddler23" /></trust-anchors></base-config></network-security-config>
– debug-overrides:仅在 android:debuggable="true" 时生效
-
trust-anchors:指定信任的证书来源 -
**src=”system”**:信任系统证书 -
**src=”user”**:信任用户安装的证书 **文件结构解析:**
-
debug-overrides部分: -
仅在应用debuggable=true时生效 -
信任系统证书和用户安装的证书 -
允许开发者在调试时使用Charles/Fiddler等代理工具进行HTTPS抓包 -
base-config部分: -
全局基础配置,始终生效 -
允许明文HTTP流量(cleartextTrafficPermitted=”true”) -
信任系统证书和多个自定义CA证书(@raw/开头的证书) -
包含多个Charles和Fiddler的CA证书,便于团队协作调试 “ 这样配置后,当应用处于调试模式时,会信任系统和用户安装的证书,从而可以使用 Charles 等代理工具进行 HTTPS 抓包。 注意: @raw/fiddler这个对应着我们复制进去的证书
设置代理 adb shell adb shell settings put global http_proxy 192.168.1.6:8080
4、APP重新打包
使用反编译工具对已经修改好的文件重新打包为APK文件
四、设置模拟器
打开雷电模拟器,把”FiddlerRoot.cer“证书拖到模拟器中安装(实际可能不需要这步,证书已经打包到了APK里面了),在模拟器的WIFI设置中,配置代理代理

服务器端口要和fidller中配置的一致。 我在其他机器上这样设置代理就可以让流量走代理,但是我这里设置没用,我使用adb命令来设置
adb shelladb shell settings put global http_proxy 192.168.1.6:8080
五、抓取https流量
把重新打包的APK文件拖到模拟器中安装,完美抓到流量

夜雨聆风
