把 charles,Fiddler 证书安装到安卓根目录,解决安卓微信 7.0 版本以后安装证书也无法抓包问题,需要 root

From:https://testerhome.com/topics/21956

OpenSSL :https://slproweb.com/products/Win32OpenSSL.html

1、安装为系统证书好处

  • (1)安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便。
  • (2)谷歌在 安卓7.0 修改了安全策略,安卓系统 大于 7.0 时 APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包。

解决方法

  • 降级 APP
  • 降级 系统版本
  • 将用户证书偷渡成系统证书,需要有 root 权限。将 charles 的 CA 证书安装进系统信任的证书目录下,这样在开启 charles 代理的时候,系统就会认为CA证书安全,从而可以获取 https 数据。

2、将证书安装为安卓系统证书

怎么将 Fiddler 或 Mitmproxy 的证书安装为安卓系统证书呢?

Android 的系统证书的存储位置是 /system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范。

第1步:下载Fiddler或Mitmproxy的证书文件,PEM或者DER格式均可。  
第2步:获取有效的系统证书文件名 
        # 如果是PEM格式的:  
        openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout  
        # 如果是DER格式的:  
        openssl x509 -inform der -subject_hash_old -in FiddlerRoot.cer  -noout  
        # 例如,输出8bbe0e8d  
第3步:转换证书格式为PEM格式,并重命名证书为有效的系统证书名。  
        # 如果是PEM格式的:  
        openssl x509 -inform PEM -in mitmproxy-ca-cert.pem -out 8bbe0e8d.0  
        # 如果是DER格式的:  
        openssl x509 -inform der -in FiddlerRoot.cer -out 8bbe0e8d.0  
  
第4步:上传准备好的证书文件到设备。例如:adb push 8bbe0e8d.0 /sdcard/  

第5步:复制证书到Android系统证书目录
        adb shell  
        su   
        mount -o rw,remount /system   
        cp /sdcard/8bbe0e8d.0 /system/etc/security/cacerts  
        chmod 644 /system/etc/security/cacerts/8bbe0e8d.0  
        # 上述可整合为一句  
        adb shell "su -c 'mount -o rw,remount /system;cp /sdcard/8bbe0e8d.0 /system/etc/security/cacerts;chmod 644 /system/etc/security/cacerts/8bbe0e8d.0;'"  
        # 重启设备  
        adb reboot  

adb shell
su root 
cd /data/misc/user/0/cacerts-added  #进入到用户证书目录
mount -o remount,rw /system    #将系统证书目录权限改成可读可写。要不没权限写入文件
cp * /etc/security/cacerts/         #这里可以使用cp也可以使用mv
mount -o remount,ro /system         #移动完之后记得把权限改回只读

Fiddler 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。

安卓系统证书跟 Fiddler 证书的格式不一样,需要转换。

1、安装 OPENSSL【https://slproweb.com/products/Win32OpenSSL.html】。linux 默认已经安装。如果使用 linux 系统,可以忽略这一步。

2、下载 fiddler 证书到电脑上

3、打开命令窗口,执行以下命令,查看证书哈希信息:

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

安卓系统的安全证书在 /system/etc/security/cacerts/ 目录下,进入adb shell,打开目录就能看到这些证书文件。

文件名是 Hash值 加 数字后缀。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1

4、转换证书

openssl x509 -inform DER -in FiddlerRoot.cer -text > [哈希].0

5、用记事本编辑证书

-----BEGIN CERTIFICATE----------END CERTIFICATE----- 的部分放到文件最前面。

可以使用 cat 命令随便查看一个 证书文件,就可以看到都是放在文件的最前面

6、将证书放到手机的 /system/etc/security/cacerts/ 下

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

重启手机,可以看到 Fiddler 的证书已经变成系统证书了,接下来就可以愉快的抓包了

Charles 证书安装到安卓根目录

一台已 root 过的手机,开启开发者选项,然后连接电脑。

下载证书到电脑上

  • 电脑端浏览器输入 chls.pro/ssl 即可下载,
  • 如果未下载也可以在 charles >> help >> SSL Proxying >>Save Charles Root Certificate 保存证书到本地文件夹

查看证书信息:

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

重命名证书:mv charles.pem 5a3b138a.0

执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts

以上就 OK 了。如果不放心可以 cd 到对应目录,检查文件是否存在,文件权限是否与其他证书一致。证书安装 OK,其他代理选项正常配置即可

如果出现 <hash>.0:Read-only file system 这个警告,这是因为 system 文件为只读,需要将其挂载为可读写。一般的解决方法是:mount -o rw,remount /system 修改system读写权限,然后再进行复制操作。如果修改了之后还是提示Read-only file system,还有方法

adb root
adb disable-verity
adb reboot #手机会重启,不用关闭cmd窗口,手机可能需要拔掉数据写重新连接
adb root
adb shell 
mount -o rw,remount /system    #再次进行修改

然后就可以进行复制操作了。复制完之后输入reboot 重启

重启之后,打开设置 ---> 更多设置 ---> 系统安全 ---> 信任的凭据中可以看到安装的证书

Charles工具配置

首先是 proxy - proxy settings,选择 socks proxy 模式,如图配置,点击ok完毕

取消勾选 windows proxy,因为我们不需要用来抓取windows的数据包。

然后是 proxy-ssl proxy settings

点 add,host、port 都填 * 即可。

设置完成后,就可以通过 charles 代理查看到 https 的数据了。 

Burpsuite 导入 Charles 的证书

打开 charles - help - ssl proxying

输入密码,导出证书,得到一个.p12的文件

往 burp 中导入

选择文件,输入密码,导入成功

联合 burp

因为charles抓包能力强但是不好做修改数据包之类的操作,所以我们就再做一层代理到burp来方便我们渗透测试人员。

proxy - external proxy settings

记得两个选项都要配置127.0.0.1:8080,因为我们的burp就是默认监听8080端口的,若不是8080,改成自己burp上监听的端口就可以了。

3、使用 Magisk 自动移动证书

Magisk 插件仓库

MagiskModuleManager 基于 FoxMMM 进行开发,可以 搜索,安装 "Magisk模块"。

movecert

https://github.com/Magisk-Modules-Repo/movecert

下载 Move Certificates 模块,直接在 Magisk 中载入。然后,就会把证书从用户目录自动移动到系统目录,重启手机证书生效

Android12 HttpCanary系统证书安装 Magisk模块movecert

https://blog.csdn.net/weixin_56039202/article/details/125794003

adguardcert

adguardcert 基于 movecert 开发:https://github.com/AdguardTeam/adguardcert

安卓12(高版本9+以上)安装Charles证书到系统证书安装目录:https://blog.csdn.net/weixin_51111267/article/details/131291643

步骤:

  • 先安装证书到用户证书的安装目录
  • 把刚刚安装到用户目录的证书 (例如:06c57dd5.0) 移动到 adguardcert 的证书目录中:/data/adb/modules/aguardcert/system/etc/security/cacerts
  • 如果出现 Read-only file system,执行下面adb语句
    adb root                    # 开启root权限
    adb remount             # 开启remount 权限,可修改删除系统应用
  • 重启手机,即可在系统证书目录搜索到证书

4、使用 MT 管理器

MT 管理器 需要获取 root 权限,才能把用户证书移动到系统证书目录下。

/data/misc/user/0/cacerts-added        # 用户证书目录
/etc/security/cacerts/                          # 系统证书目录

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值