menu E4b9a6's blog
rss_feed
E4b9a6's blog
有善始者实繁,能克终者盖寡。

使用Fiddler抓包Android APP流量

作者:E4b9a6, 创建:2021-08-16, 字数:1611, 已阅:113, 最后更新:2024-03-10

这篇文章更新于 258 天前,文中部分信息可能失效,请自行甄别无效内容。

Fiddler抓包HTTPS需要安装其证书到系统内,对于桌面端操作系统/IOS来说比较容易,都是直接安装到系统内置证书然后选择信任即可

Android则要看版本

  • 版本 < Android 7:直接安装到系统内即可
  • 版本 >= Android 7:系统不再信任用户证书

Android 7以上抓包的思路是如何将Fiddler的证书内置到系统证书中

步骤分为以下几步

  1. 下载Fiddler证书
  2. 转换Fiddler证书为Android设备所需要的特殊证书格式
  3. 将Android设备的system分区挂载(不挂载的话默认为只读无法操作)
  4. 推送制作好的证书到/system/etc/security/cacerts/中并更改权限
  5. 重启设备后即可抓包

证书制作过程如下

Bash
# 将fiddler的cer证书转换成pem证书
openssl x509 -inform der -in FiddlerRoot.cer -out FiddlerRoot.pem 
openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem | head -1 # 输出:e5c3944b
# e5c3944b.0来源上一条指令的输出
cat FiddlerRoot.pem > e5c3944b.0 
openssl x509 -inform PEM -text -in FiddlerRoot.pem -out /dev/null >> e5c3944b.0
openssl x509 -inform PEM -subject_hash -in FiddlerRoot.pem | head -1  # 输出:82635c12
# 82635c12.0来源上一条指令的输出
cat FiddlerRoot.pem > 82635c12.0
openssl x509 -inform PEM -text -in FiddlerRoot.pem -out /dev/null >> 82635c12.0

将制作的证书推入Android手机存储,并挂载/system分区后移动到系统证书内部

Bash
# 将制作完的2个证书推送到Android的sdcard/中
adb push 82635c12.0 /sdcard/
82635c12.0: 1 file pushed, 0 skipped. 7.6 MB/s (1322 bytes in 0.000s)
adb push e5c3944b.0 /sdcard/
e5c3944b.0: 1 file pushed, 0 skipped. 5.3 MB/s (1322 bytes in 0.000s)

# 使用shell模式并进入Root用户操作Android手机
adb shell
polaris:/ # su

# 挂载system分区,然后复制2张Android证书到系统内部,更改其权限后重启机器
:/ mount -o remount,rw /system
:/ cp /sdcard/e5c3944b.0 /system/etc/security/cacerts/                            
:/ cp /sdcard/82635c12.0 /system/etc/security/cacerts/                            
:/ chmod 644 /system/etc/security/cacerts/e5c3944b.0
:/ chmod 644 /system/etc/security/cacerts/82635c12.0
:/ reboot

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]