Charles Proxy

Charles

付费抓包工具,也是最常用的。

基础使用

  • 默认端口8888
  • [Proxy]-[SSL Proxy Settings]-[SSL Proxying],添加location。
  • 访问 [Help]-[SSL Proxying]-[Install Charles Root Certificate on a Mobile Device or Remote Browser],找到代理地址和端口。

注: 如果response中文显示乱码,需要确保本地已安装证书。[Help]-[SSL Proxying]-[Install Charles Root Certificate]即可。

注:在华为手机,需要把证书文件扩展名从pem改成crt。

抓包ROOT的安卓客户端

借助夜神模拟器,模拟rooted安卓设备上客户端的抓包。 主要步骤:

  1. 复制Charles根证书到系统证书目录
  2. 在模拟器设置代理为Charles地址

获取 Charles ROOT证书

# 获得charles证书的哈希值
openssl x509 -inform PEM -subject_hash_old -in charles-root-ca-win10.pem | head -1

# 重命名证书并复制到模拟器
cp charles-root-ca-win10.pem da19f3e2.0

模拟器准备和操作

# 连接模拟器
adb connect 127.0.0.1:62001
adb shell
#获取超级用户权限
su
#修改system目录读写权限
mount -o remount,rw /system
#将安卓共享目录中的证书文件复制到系统证书目录中去
cp /sdcard/Download/da19f3e2.0 /system/etc/security/cacerts/
#开启证书权限
chmod 644 /system/etc/security/cacerts/da19f3e2.0

参考链接:

安卓客户端代码设置 - 可选

限制
从Android 7开始,需要修改app配置信任用户证书,才能显示HTTPS内容。

如果targets API为24+或应用使用了certificate pinning(使用okhttp等),也可能不工作。

步骤如下:

在应用工程添加文件 res/xml/network_security_config.xml:

<network-security-config> 
  <debug-overrides> 
    <trust-anchors> 
      <!-- Trust user added CAs while debuggable only -->
      <certificates src="user" /> 
    </trust-anchors> 
  </debug-overrides> 
</network-security-config>

然后添加到应用的manifest文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config" >
        ...
    </application>
</manifest>

Mac Chrome

钥匙串访问 - Charles Proxy CA - 信任 - 使用此证书时下拉列表选择"始终信任"

Mock Response

  • 方式1: Tools - Rewrite 增加重写规则
  • 方式2: Proxy - Enable Breakpoints, Proxy - Breakpoints Settings
  • 方式3: Map Local 使用本地文件替换响应

扩展阅读