iOS小技能:Charles抓包【应用场景:App联调测试】

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: Charles 支持的协议:HTTP/1.1、HTTPS、HTTP/2、ws(WebSocket)、wss(WebSocket Secure,TLS 加密的 WebSocket)、SOCKS

前言

Charles 支持的协议:HTTP/1.1、HTTPS、HTTP/2、ws(WebSocket)、wss(WebSocket Secure,TLS 加密的 WebSocket)、SOCKS

“⚠️ 注:Charles 不支持 HTTP/3,但是大部分开启 HTTP/3 的网站都做了降级处理

若想抓取其他协议的报文,推荐用 Wireshark
Wireshark用的是RVI(Remote Virtual Interface)(iOS5以上才支持)。

更多关于Wireshark 请看这篇为文章:https://blog.csdn.net/z929118967/article/details/76914929

I 抓包配置

1.1 iOS侧的代理配置(默认不支持拦截SSL数据)

  • 把 iOS 的网络包转发到代理 IP 和代理端口的配置

    在这里插入图片描述

确保Mac和iPhone在一个局域网,并在iPhone上设置代理信息:Mac端地址代理端口即可

五元组:源 IP 地址,源端口,传输层协议,目的 IP 地址和目的端口

  • 查看 Mac地址
    在这里插入图片描述
    或者使用ifconfig查看IP
    ```bash
    inet 192.168.1.107 netmask 0xffffff00 broadcast 192.168.1.255

Charles 的代理端口号可以从` Charles -> Proxy -> Proxy Setttings `进行查看和更改。端口默认是 8888
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201229161331713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

## 1.2  Mac侧的证书安装
需要信任证书,否则将提示: You may need to configure your browser or application to trust the Charles Root Certificate.


HTTPS =  HTTP 协议 + TLS 协议
>在 TCP 三次握手之上加入了四次 TLS 握手,TLS 握手过程中会校验加密用的公钥证书,所以想要拦截SSL请求,我们需要手动安装并信任 Charles 的证书,




- Mac侧的证书安装
> `Charles -> Help -> SSL Proxying -> Install Charles Root Certificate `


![](https://ucc.alicdn.com/images/user-upload-01/20201229164321739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

- iPhone上的设置方法:` Charles -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Derive,这时候会跳出一个弹窗,根据提示在手机端访问 chls.pro/ssl,下载安装 Charles CA 证书`

>或者直接访问


![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20181210174012850.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

设置->通用 -> 选择对应的描述文件进行安装信任刚刚下载的证书。


## 1.3  iOS端信任证书的方法


- iOS 信任证书

iOS10.3.1 新安装的证书需要手动选择信任证书。

解决方式:

设置->通用->关于本机->证书信任设置


- 应用场景:iOS10.3.1 新安装的证书需要手动选择信任证书。




![解决方案](https://ucc.alicdn.com/images/user-upload-01/20181210173751815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)





# II 解决Certificate Pinning导致的无法分析问题


在 HTTPS 请求时,服务端发给客户端的公钥证书必须和客户端内置的公钥证书一致才能请求成功。
>(支付行业的产品都会采用这个基本的验证,具体请看这篇[文章](https://kunnan.blog.csdn.net/article/details/77115940):https://kunnan.blog.csdn.net/article/details/77115940)

##  方案1:把证书和私钥导入到 Charles
- 解决方案1:把证书和私钥导入到 Charles 中,解决Certificate Pinning
>`Charles -> Proxy -> SSL Proxying Setting -> Root Certificate,然后导入 .pem 或 p12 文件`
>![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201230141529616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)
双向认证的配置
![](https://ucc.alicdn.com/images/user-upload-01/20201230141954459.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

- 方案2:如果没有公钥证书和随之配套的私钥,这个时候当然可以采取逆向的手段来绕过证书校验

## 方案2:借助逆向手段来绕过证书校验

- [ios-ssl-kill-switch tweak](https://github.com/zhangkn/ios-ssl-kill-switch):https://github.com/zhangkn/ios-ssl-kill-switch
>更多相关信息请看这篇文章:https://kunnan.blog.csdn.net/article/details/77115940
- [ssl-kill-switch2:Blackbox tool to disable SSL certificate validation - including certificate pinning - within iOS and OS X Apps](https://github.com/nabla-c0d3/ssl-kill-switch2)
- [objection/hooks/ios](https://github.com/sensepost/objection/tree/master/objection/hooks/ios)

[pinning/disable.js: This hook attempts many ways to kill SSL pinning and certificate](https://github.com/sensepost/objection/blob/master/objection/hooks/ios/pinning/disable.js)

# III 预备知识
## 3.1 获取站点的证书【可选】

 如果遇到[app进行本地证书验证](https://kunnan.blog.csdn.net/article/details/77115940)的时候,需要在iPhone上信任对应的站点证书

>使用openssl命令来获取到服务器的公开二进制证书(以google为例):

```bash
openssl s_client -connect www.google.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > https.cer

3.2 pem转变格式为DER

证书有BASE64和DER两种编码,der二进制编码可以使用openssl进行转换。

  • 转变格式为DER
openssl x509 -outform der -in kncmpay.cer -out kncmpay.cer

3.3 Android不同版本对CA 证书权限的处理规则

Android 版本越高,HTTPS 报文越难抓

系统 CA 证书:基本拥有所有权限
用户 CA 证书:用户自行安装,权限很低

获得证书 ROOT 权限

1、直接 ROOT Android 手机,把 Charles 证书放到系统证书里,实现证书洗白
2、Android 7.0 以下:信任用户 CA 证书,可以简单的理解为我们安装的证书直接获得 ROOT 权限
3、修改Android的配置文件 res/xml/network_security_config.xml ,来控制网络安全:
```xml
<?xml version="1.0" encoding="utf-8"?>













```

release 包只信任 system 级别的证书,
debug 包同时信任 system 和 user 级别的证书

see also

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
13天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
55 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
2月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
314 75
|
16天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
40 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
16天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
46 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
12天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
129 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
164 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
16天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
49 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
41 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
4天前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
14 0
|
3月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
108 11

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 3
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 5
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 6
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 7
    1688APP 原数据 API 接口的开发、应用与收益
  • 8
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
  • 9
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 10
    语音app系统软件源码开发搭建新手启蒙篇