Android手机使用charles抓https请求

摘要

Charles安装和破解

参考:https://www.cnblogs.com/upstudy/p/18735698

下载:https://www.charlesproxy.com/latest-release/download.do

选appx格式。msi的不知为啥我点安装没反应

Charles破解:https://www.zzzmode.com/mytools/charles/

用户名自己想一个,点生成。打开Charles,help-enter license,输入用户名和license key,激活

image-20260121222113232

image-20260121222155403

抓包

参考:https://www.cnblogs.com/bao0/articles/16769863.html

代理

image-20260121224308135

手机安装证书

image-20260121224728885

image-20260121224747942

编辑网络-代理-手动

image-20260121225141360

弹窗

image-20260121225224397

然后浏览器访问http://ssl.charles下载证书

image-20260121225643886

打开设置搜索certificate,安装,选中证书文件

image-20260121225852706

https

Proxy > SSL Proxying Settings > SSL Proxying, 启用 Enable SSL Proxying,添加include规则,全填*

image-20260121230859402

登录的时候报错证书错误

image-20260121231728328

系统不信任用户添加的证书

这个问题可能是因为,系统不信任用户添加的证书

来源:https://developer.aliyun.com/article/917052

Android 7.0 之后默认不信任用户添加到系统的 CA 证书:

To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.(源自 Android Developers Blog

换句话说,就是对基于 SDK24 及以上的 APP 来说,即使你在手机上安装了抓包工具的证书也无法抓取 HTTPS 请求。

手动推到信任的证书

保存证书到电脑,计算哈希

1
openssl x509 -inform PEM -subject_hash_old -in charles.pem

保存第一行那8位

image-20260121233353495

重命名为8b60ce84.0

adb root

挂载根分区为可读写。被禁止了,哎哟

image-20260121233646304

还是记一下后面大概的步骤吧:

推送证书

1
adb push 7bba63c6.0 /system/etc/security/cacerts/

改权限 & 上下文

1
2
adb shell "chmod 644 /system/etc/security/cacerts/7bba63c6.0"
adb shell "chcon u:object_r:system_file:s0 /system/etc/security/cacerts/7bba63c6.0"

重新挂载只读

1
adb shell "mount -o remount,ro /system"

Xposed+JustTrustMe

这个方案试了不适配高版本

参考:https://bbs.kanxue.com/thread-226435-1.htm

JustTrustMe

https://github.com/Fuzion24/JustTrustMe

release页面下载apk

1
adb install ./JustTrustMe.apk

要求SDK22

image-20260121235703214

xposed

下载:https://xposed.cc/

在Android11上也不适配

image-20260122160433492

新装一个Android5.1

直接新建找不到这么老的版本。右上角设置,SDK Manager → SDK Platforms 。勾选

image-20260121235757784

还是没有,发现是得展开并且选择系统镜像才行

image-20260122145837585

Magisk+LSPosed

Magisk安装

网址:https://magiskcn.com/

参考:https://blog.lansepeach.cn/archives/892

查看内核版本

1
adb shell uname -r

image-20260122223855849

(如果是真机需要解锁 Bootloader,搜对应品牌解锁教程)

打开长这样。点install

image-20260122225122301

这里需要选择boot.img文件来patch

image-20260122225309860

提取boot.img

https://magiskcn.com/payload-dumper-go-boot.html

本来是想按这个来的,发现找不到对应的ROM…我真的什么都看不懂饶了我吧

试试手动提取。

怎么找对应的文件?如果直接有boot.img最好,可能在/system/etc/目录,不用提取。如果没有,看看在不在/dev/block/by-name/boot。也没有,说明可能使用了 “super” 分区方案(Android 10+ 的动态分区),需要合并啥的

以上是边问ai边做边总结的,不保证对

这里是有/dev/block/by-name/但是其下没有boot

image-20260122231554014

dump这个vda。ai说vda 最前端 1-65536 扇区就是 kernel + ramdisk(传统 boot 区域)。

1
2
3
4
5
adb shell
su
dd if=/dev/block/vda of=/sdcard/vda.img bs=1M
exit
adb pull /sdcard/vda.img

image-20260122231833337

image-20260122234127679

引用:https://www.cnblogs.com/viiv/p/15674864.html

Android 产品中,内核格式是Linux标准的zImage,根文件系统采用ramdisk格式。这两者在Android下是直接合并在一起取名为boot.img,会放在一个独立分区当中。这个分区格式是Android自行制定的格式。
Android开发时,最标准的做法是重新编译于内核和根文件系统,然后调用Android给的命令行文件mkbootimg来打包。
常用的就是打包和解包工具:unpackbootimg 和 mkbootimg

导致其他应用走代理的问题

因为无法信任这个代理火狐直接不给访问了,抓到的包也很杂,得搞一下