0x01 前言:

在 Android 6 之前, 手机系统既信任系统内置的证书, 也信任用户自己安装的证书, 但是在 Android 7 之后,却发生了变化, 手机系统只信任系统内置的根证书。当然了,这是为了手机系统更安全, 但是这样一来, 我们就无法使用 burpsuite, charles, fidder 抓包 app 的 HTTPS 请求。这里我将以 Charles 抓包工具的证书来演示如何讲抓包证书写入到系统根证书目录下。
在这里插入图片描述


0x02 前提准备:

windows 已安装 openssl (也可以使用 linux, 其自带 openssl)
已获得 root 的手机 (可以是模拟器如:夜神,雷电、逍遥)
windows 已安装 adb 驱动 (安装过程请参考:https://blog.csdn.net/sinat_41870148/article/details/123089861)


0x03 导出 Charles 证书:

在这里插入图片描述
在这里插入图片描述


0x04 使用 openssl 将 pem 证书转成系统根证书 (.0 结尾文件):

在这里插入图片描述

windows 不自带openssl, 需自行安装。而linux自带,因此我这里把证书存到 linux 中进行转换。

执行命令: openssl x509 -subject_hash_old -in 证书名

在这里插入图片描述
执行命令后将 Charles.pem 文件重命名为 9d4a1b5a.0 (9d4a1b5a 需要根据自己生成的结果进行命名)

在这里插入图片描述
将更改后的证书转移到安卓模拟器的根路径下:

在这里插入图片描述


0x05 使用 adb 连接安卓模拟器终端 (夜神模拟器为例)

  • 找到 NoxVMHandle.exe 进程的 PID, 输入命令: tasklist | findstr "NoxVMHandle.exe"
    在这里插入图片描述

  • 寻找此进程开放的端口,输入命令:netstat -ano | findstr 9204
    在这里插入图片描述

  • 找到62xxx的端口,并进行连接adb链接, 输入命令:adb connect 127.0.0.1:62026
    在这里插入图片描述


0x06 将证书写入系统根证书目录下:

小贴士: 由于Android是基于Linux的自由及开放源代码的操作系统,Android Shell是Linux操作系统命令的缩小版, 所以大部分命令是和linux一样的。

  • 连接模拟器 adb shell, 输入命令:adb -s 127.0.0.1:62026 shell
    在这里插入图片描述
  • 将根目录下的证书转入系统根证书目录下,执行命令:mv 9d4a1b5a.0 /system/etc/security/cacerts/
    在这里插入图片描述 ⚠️上述问题解决: ⚠️

1、如果是已经root的实体机,/dev/root 挂载在 /,以读写权限重新挂载

HWDUK:/ # cat /proc/mounts | grep "/"
/dev/root / ext4 ro,seclabel,relatime,data=ordered 0 0

HWDUK:/ # mount -o remount,rw /

2、如果是已经root的模拟器,/dev/block/sda6 挂载在 /system

d2q:/ # cat /proc/mounts | grep "/system "
/dev/block/sda6 /system ext4 rw,seclabel,noatime 0 0

1|d2q:/ # mount -o remount,rw /system

在这里插入图片描述

  • 修改证书权限为 644, 执行命令:chmod 644 /system/etc/security/cacerts/9d4a1b5a.0
    在这里插入图片描述

0x07 设置代理,测试HTTPS抓包:

  • 查看 charles 监听的 ip 与端口:
    在这里插入图片描述
  • 模拟器设置对应代理,adb 执行命令:settings put global http_proxy 192.168.0.101:8888
    在这里插入图片描述
  • 测试抓包 HTTPS:

前提先设置允许代理 SSL,代理所有 443 端口链接

在这里插入图片描述

在这里插入图片描述


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐