使用Charles对Android APP进行抓包

434 阅读7分钟

一、Charles与Sniffmaster简介

Charles 是一个功能强大的 HTTP 和 HTTPS 抓包工具,通常用于网络开发、移动应用开发以及 API 调试。它允许开发人员查看网络请求和响应的详细信息,帮助分析数据传输中的问题,调试应用程序,或查看网页加载性能。Charles 特别擅长在 HTTPS 加密连接中解密数据,因此也广泛用于分析和抓取移动应用程序的网络请求。

而 Sniffmaster(抓包大师)则是另一款强大的网络抓包工具,专注于网络流量的捕获与分析。与 Charles 类似,Sniffmaster 也支持 HTTP 和 HTTPS 抓包,并且提供了丰富的功能来帮助开发者调试网络请求、分析数据流以及优化应用性能。两者的结合可以为开发者提供更全面的网络调试解决方案。

Charles 的主要功能:

  1. HTTP 和 HTTPS 抓包

    • 能够捕获和显示所有 HTTP 和 HTTPS 网络请求及响应的内容,包含请求头、响应体、Cookie、查询参数、状态码等信息。
  2. SSL 解密

    • 支持解密 HTTPS 流量,通过安装信任的 Charles 根证书,可以查看加密传输的内容,如 API 返回的数据或网页的内容。
  3. 模拟网络环境

    • 可以模拟慢速网络(如 3G、2G)环境,帮助开发人员分析和优化应用在低速网络下的性能。
  4. 断点调试(Breakpoints)

    • 支持在请求和响应时设置断点,开发者可以在发送请求或接收响应前进行手动修改,便于调试网络请求和接口。
  5. 带宽限制

    • Charles 可以限制网络带宽,通过模拟带宽受限的场景,分析应用程序在不同网络条件下的表现。
  6. 重放请求

    • 通过 Charles 可以重放之前的请求,用于测试同一请求的不同响应情况。
  7. 跨平台支持

    • 支持多种操作系统,包括 Windows、macOS 和 Linux。

Sniffmaster 的主要功能:

  1. 实时流量监控

    • Sniffmaster 提供实时网络流量监控功能,能够捕获并显示当前网络中的所有数据包,帮助开发者快速定位问题。
  2. 深度数据包分析

    • 支持对捕获的数据包进行深度分析,包括协议解析、数据包重组等功能,帮助开发者深入了解网络通信细节。
  3. 自定义过滤规则

    • Sniffmaster 允许用户自定义过滤规则,只捕获特定协议或特定 IP 地址的流量,减少无关数据的干扰。
  4. 多平台支持

    • 与 Charles 类似,Sniffmaster 也支持多种操作系统,包括 Windows、macOS 和 Linux。

Charles 的工作原理

Charles 通过充当**代理服务器(Proxy Server)**的角色,拦截网络请求和响应流量。它位于客户端(如浏览器、移动应用)和服务器之间,截取网络请求并对其进行显示和分析。

具体工作过程如下:

  1. 代理配置

    • 首先,用户需要将 Charles 设置为代理服务器,Charles 会监听指定端口(默认 8888)。用户需要在操作系统或应用程序中配置代理,使得所有网络请求都通过 Charles。
  2. 截取请求和响应

    • 当客户端发送 HTTP/HTTPS 请求时,Charles 作为代理服务器拦截请求,将其发送到目标服务器。
    • 服务器返回响应后,Charles 同样拦截响应并展示给用户查看,之后再将响应返回给客户端。
  3. HTTPS 流量解密

    • 为了解密 HTTPS 请求,Charles 利用“中间人攻击(Man-in-the-Middle, MITM)”技术。它通过伪造服务器证书,使得客户端相信 Charles 是服务器端,从而解密加密的请求和响应内容。
    • 要实现这个功能,用户需要在客户端(如浏览器、移动设备)上安装 Charles 的根证书,并信任它,Charles 才能对 HTTPS 流量进行解密和抓取。
  4. 展示网络信息

    • Charles 会将所有的网络请求及响应信息,包括 headers、body、状态码、Cookie 等,以树状结构展示在工具界面中,用户可以轻松地分析和查看请求的详细内容。

常见的使用场景:

  1. 调试移动应用程序的网络请求

    • 通过设置手机代理并安装 Charles 证书,开发者可以查看移动应用发出的网络请求和服务器响应。
  2. API 调试与测试

    • Charles 可以查看和重放 API 请求,帮助开发者快速发现和调试接口问题。
  3. 前端开发

    • 前端开发人员可以用 Charles 查看浏览器发出的 HTTP 请求,分析资源加载速度和优化页面性能。
  4. 网络安全分析

    • 通过抓取和分析网络流量,可以检测可能的安全漏洞和数据泄露。

小结:

Charles 和 Sniffmaster 都是功能强大的代理抓包工具,帮助开发者全面分析网络流量,尤其是 HTTPS 请求。通过它们的代理模式和 SSL 解密功能,开发者可以捕获应用和网页的所有流量,便于进行调试和优化网络请求。

二、Charles下载安装

Charles 支持多种操作系统,包括 Windows、macOS 和 Linux。你可以从官方网站下载最新版本的 Charles。

三、环境配置

1. 抓取 HTTP 请求

前提条件:手机和 PC 端需要处于同一 WiFi 网络下。

  1. PC 端 Charles 软件处于开启状态。
  2. 手机配置 Charles 作为代理:在手机连接的 WiFi 网络的高级设置中(不同手机配置入口会有不同),找到代理服务器,选择【手动】,代理主机名填写 PC 端的局域网 IP(192.168 开头的 IP 地址)。代理服务端端口填写 Charles 的端口,默认是 8888,点击保存。
  3. 代理设置保存成功后,电脑会出现允许代理的提示,点击 Allow 即可。
  4. 进入 Proxy -> Proxy Setting,勾选 Enable transparent HTTP proxying(可以抓取移动设备的数据包)。

到此处表示可以抓取手机的 HTTP 请求了,如果想抓取 HTTPS 的请求,还需要继续往下设置。

2. 抓取 HTTPS 请求

  1. 在 Charles 中,进入 Proxy -> SSL Proxying Settings,勾选 Enable SSL Proxying。
  2. 配置完这时候抓手机的 HTTPS 请求还是 unknown,还需要电脑和手机安装 SSL CA 证书。
Mac 系统安装证书
  1. Help -> SSL Proxying -> Install Charles Root Certificate
  2. 进入钥匙串
  3. 信任证书(注意:选择始终信任)
Windows 系统安装证书
  1. Help -> SSL Proxying -> Install Charles Root Certificate
  2. 进入证书导入向导,点击安装证书
  3. 选择本地计算机,点击下一步按钮
  4. 将所有的证书都放入下列存储,点击浏览按钮
  5. 点击受信任的根证书颁发机构,点击确定按钮
  6. 一直点击下一步
  7. 出现安全警告时点击是
  8. 显示导入成功
手机安装证书
  1. 在手机自带的浏览器中输入 chls.pro/ssl
  2. 此时会下载 xxx.crt 文件,然后我们安装此证书,安装类型为 CA 证书。此时安装的证书是用户级别的,在 Android 6.0 及以下系统可以抓包,而 Android 7.0 及以上系统不能再抓包了,因为 Android 7.0 及以上系统版本新增了证书验证,应用默认不允许信任用户自定义的 CA 证书(如 Charles 的代理证书),所以 app 内不再像原来一样默认信任用户的证书了。

解决方法有三个:

方法 1:如果抓包 APP 有源码可以自己打包的话,可以在源码中增加 network-security-config 网络安全配置来允许应用信任用户自定义证书。

方法 2:对手机进行 root,将 Charles 的安全证书升级为系统级别的证书。

方法 3:参考相关技术文档进行配置。

如果需要使用 VPN 工具连接代理,只需要 PC 和移动端处于同一 WiFi 网络下,PC 端使用 Connect VPN 连接其他 VPN 即可。