Charles 移动设备抓包

查看 97|回复 9
作者:雪走aa   
Charles 移动设备抓包
除了最常见的网页爬虫,还有一种是针对客户端软件的爬虫。前者使用范围广泛,对后者的数据采集需求越来越大。潜水多年的小白第一次发帖,内容如有不当,请随意斧正。
常见客户端:
PC( Windows 、macOS 、Linux )、Android 、IOS
抓包工具:
支持平台:Windows 、 macOS 、 Linux
以下内容都是基于这款抓包软件。
需求分析:
想要批量或者自动获取某一平台客户端的某些数据。要做到我们的需求,需要使用网络抓包工具。据了解得知,网络协议层的每一层几乎都有对应的抓包工具。现如今最常用的协议是 https、http 这两种网络传输协议。
HTTP 协议抓包:
http 协议不包含 SSL ,抓包时只需要简单配置网络代{过}{滤}理即可抓取,而 https 需要安装证书并且信任证书才能抓取,否则无法解析显示为红色的 unknown 。
HTTPS 协议抓包:
https 协议在配置网络代{过}{滤}理的前提下还需要安装证书,并且必须让系统信任安装的证书才能实现对 https 协议进行抓包。
Charles 快速上手:
主界面:

常用功能菜单:

常用功能菜单,故名思义这两个菜单是经常会用到的,这里先做一些说明:
Proxy:
  • Start Recording : 开始捕获网络流量,对应主界面的红点图标。
  • Start Throttling : 进入低速网络模式,对应主界面的乌龟图标。
  • macOS Porxy : 勾选时 Charles 处理 macOS 的网络流量。
  • Proxy Settings : 配置 HTTP 代{过}{滤}理端口,在给同一局域网内设备安装证书,或是设置代{过}{滤}理时需用到,常见设置为 8888。这里还包含一些 HTTP 、SOCKS 相关的设置。
  • SSL Porxying Setting : 配置是否启用 SSL ,启用时需配置主机(HOST)与端口(PORT)勾选上即为激活状态,在不清楚主机和端口时,可将主机与端口都设置为  *(星号),这样做可以捕获 http 和 https 的所有流量。

    Help —— SSL Porxying:
  • Install Charles Root Certificate : 安装证书到 macOS 系统内。
  • Install Charles Root Certificate on a Mobile Device or Remote Browser : 为同一局域网内的其它设备安装 Charles 证书.
  • Save Charles Root Certificate : 保存 Charles 证书到本地,可选 .pem .cer 两种类型的文件,推荐选择 .pem ,后续便于 Android 设备导入证书。

    安装 Charles 证书

  • macOS :
    [ol]
  • Charles 主界面点击 help —— SSL Porxying —— Install Charles Root Certificate ,默认安装即可完成安装。
  • 正如前面所说,安装完以后还需要让系统信任这个证书,具体做法:在所有程序中找到 钥匙串访问 —— 左栏下方 —— 点击证书 —— 双击 Charles Proxy CA ——信任 ,可以将所有的选项都设置为 始终信任。即可成功开启对 HTTPS 协议的捕获。
    [/ol]

  • IOS :
    [ol]
  • Charles 主界面点击 help —— SSL Porxying ——  Install Charles Root Certificate on a Mobile Device or Remote Browser 会出现 " Configure you device …… HTTP proxy on  192.168.1.6:8888 , then browse to chls.pro/ssl " 这里的 8888 在 Proxy —— Proxy Settings 内设置。
  • 手机或者其它设备要和抓包主机连接到同一局域网(网络频段也有影响),打开 设置 —— 无线局域网 —— 点击与抓包主机同一个局域网的那个 Wi-Fi 拉到底部 —— HTTP 代{过}{滤}理 —— 配置代{过}{滤}理 —— 手动 —— 服务器填前面的 192.168.1.6 端口填 8888 —— 右上角存储 。
  • 回到主界面,打开 Safari 浏览器,在地址栏输入前面的 chls.pro/ssl 打开。Charles 会弹出是否允许连接,点击 Allow 。手机上允许下载一个配置描述文件,下载完成后关闭。
  • 手机打开设置 —— 通用 —— 拉到底部找到 描述文件 打开 —— 点击 Charles Proxy CA(……)—— 右上角安装 —— 输入密码再次安装 —— 完成后拉到上面找到 关于本机 进入 —— 拉到底部找到 证书信任设置 进入 —— 打开 针对根证书启用完全信任。
  • 完成以上步骤后,即可抓取 IOS 客户端数据。
    [/ol]

  • Android:
    自 Android 7.0 以后无法信任第三方根证书,抓取第三方 app 数据时,现有方法几乎都需要 Root 设备,自行考虑风险。还可以使用 Android 模拟器来抓取数据,但是模拟器的信息不是很完整,容易被客户端app后台所识别出来,比较费力不讨好。现有的几种 Root 后抓取 HPPTS 的方法我都尝试过:
    使用 Xposed & edxposed 模块,在安装了 Xposed & Edxposed 框架的前提下,再安装 TrustMeAlready 模块并激活(经测试,部分系统 Android 10 ,部分软件无法使用,比如X信小程序);
    安装 VirtualXposed ,再安装 TrustMeAlready 模块并激活,因为 VirtualXposed 较容易被第三方app识别,从而禁止使用,优势是不需要root ;
    Root 后将 Charles 根证书导入并信任根证书,这个办法其实是将 Charles 根证书转换后放到 Android 系统根目录内。
    [ol]

  • Charles 主界面点击help —— SSL Porxying ——  Save Charles Root Certificate ,选择保存为 .pem 文件,以下只讲这种文件的转换方法。.cer 文件转换方法请自行寻找,欢迎交流。

  • 保存好 .pem 文件后,macOS 需要安装 openssl ,然后打开 终端app —— 输入 openssl x509 -subject_hash_old -in Charles根证书文件.pem 回车结果如下,圈起来的这串字符很重要: d2479ff1

  • 上一步完成后,将下载的 charles-proxy-ssl-proxying-certificate.pem 重命名为 d2479ff1.0 ,将 d2479ff1.0 文件放到手机内。

  • 手机端安装 MT文件管理器 ,打开授予 root 权限,使用 MT文件管理器复制到 /system/etc/security/cacerts/ 文件夹内,重启手机,在设置内搜索 加密与凭据  —— 打开后找到 信任的凭据 打开 —— 在系统部分可以找到 详细信息为 Charles Proxy CA (……) 的证书,代表成功导入证书到系统中。 可使用 Charles 抓取 HTTPS 协议。
    [/ol]

    利用 Magisk 导入证书
    自 Android O(8.0)以来,即使是获取了 root 权限,也很难修改系统分区文件,无法进行读写。且当下手机 root 方式都是利用 Magisk  修补 boot ,Magisk 还可以利用旁载的方式加载各种自定义模块,包括且不限于修改、替换系统文件。那么在这里我们可以根据上文所诉,创建一个 Magisk 补丁包,用以导入证书文件到根目录。
    首先还是需要安装 Charles 以及 OpenSSL( Windows 推荐使用  choco install openssl 命令安装,需使用带管理员权限的 powershell )
    导出证书文件
    依次点击 charles -> help -> SSL Proxying -> Save Charles Root …… 选择位置导出 Charles 证书文件
    转换证书文件
    命令行切换到证书所在文件夹,运行:
    openssl x509 -subject_hash_old -in 证书文件.pem
    将证书文件改名为 d2479ff1.0 (以上文为例,后缀为 .0 )
    创建 Magisk 模块
    首先需要 Magisk 模块模板 magisk-module-template ,解压后文件列表为:
    └─magisk-module-template-master
        │  customize.sh
        │  module.prop
        │  post-fs-data.sh
        │  README.md
        │  service.sh
        │  system.prop
        │
        ├─META-INF
        │  └─com
        │      └─google
        │          └─android
        │                  update-binary
        │                  updater-script
        │
        └─system #内部文件夹为自建
            └─etc
                └─security
                    └─cacerts
    上图详细文件说明详见 Developer Guides这里我们关注 system 文件夹及子文件夹即可。模板文件是仅有 system 而没有其子文件夹的,system/etc/security/cacerts/ 刚好对应着我们本来要放证书的地方,即系统证书所在目录.此时将我们的证书文件放到 cacerts 文件夹内,将整个文件夹压缩为 zip 文件,放入手机内,在 Magisk 内刷入即可,验证方式如上。

    证书, 文件

  • 雪走aa
    OP
      


    繒經最羙 发表于 2021-7-1 16:34
    没什么用了,稍微强一点程序员都会加入反代{过}{滤}理验证了,很多APP都有了。

    看来我还是太菜了,抓了蛮多软件和一些小程序,没遇到或者说没注意到,大佬给个方向
    nullable   

    对于原有客户端生成的证书在服务器校验的时候可能还是需要hook,而且每个应用里面如果需要过验的方法是不一样的
    xixicoco   

    好的,不错,加油
    繒經最羙   

    没什么用了,稍微强一点程序员都会加入反代{过}{滤}理验证了,很多APP都有了。
    sjy050606   

    这么复杂,导入后如果还是被反代{过}{滤}理验证了也不过白忙活一场
    联盟少侠   

    给大佬点个赞,这样的教程确实很不错。挺适合新手的。
    至于不走WIFI的代【】理正常得很,用其他软件强制走就行了!
    weiweivs00   

    苹果的吗?
    西湖老品丶   

    支付宝能抓包不
    zxxiaopi   

    感谢分享,学习
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部