# 背景
之前介绍过 Charles 抓包神器,主要是解决在开发过程中快速定位是界面展示 Bug 还是接口数据异常,这样基本上在开发过程中就能解决很多问题了。
但。。。
但是不知道大家有没有遇到过这样的场景。
- 线上发布 App 出现一个 Bug,但是这个时候可能并不在公司(等于 Charles 无法发挥作用),也需要立即定位问题,数据问题?界面问题?我的代码没动过啊!明明测试环境都是好的,大部分用户也是好的啊。
- 基于 Charles 的 Map Remote 或 Rewrite 我们可以做到 App 灵活的在服务测试环境和正式环境之间切换,但是有一个前提,就是需要 电脑💻,要是没有电脑呢?
以上只是针对开发的,在看看你有没有这样的需求呢!!!!
- 有的 App 的广告真的太过分了,非常影响体验(虽然添加广告也是合理的)有没有什么办法可以去掉某些 App 的广告呢。
- 秒杀活动上,直接越过前置倒计时跳转至下单页面,他不香吗?
# HTTP Catcher 简介
交代了故事背景,今天的主角就登场了。
HTTP Catcher 是一个 Web 调试工具,可以对来自 iOS 系统的 http/https 请求进行拦截,查看,修改和重放。
你不需要连接电脑,HTTP Catcher 可以在后台记录 Wi-Fi 和蜂窝网络下的 HTTP 流量。HTTP Catcher 让你非常容易的测试你的应用和网站,你可以直接查看它们的请求和响应。
HTTP Catcher 会创建一个VPN配置。当你开启抓包时,HTTP Catcher 会在 VPN 进程中启动一个本地 HTTP 代理,所有的 HTTP 流量将通过 VPN 转发到这个本地代理中。
功能
- 解密 HTTPS
- 实时修改请求和响应
- 请求重放
- 阻止请求
- 域名过滤
- DNS 修改
看到这里可能你对 HTTP Catcher 有一个基本的认识,这只是对它的一个基本介绍。
# 安装 & 配置
在 AppStore 下载 HTTP Catcher。
安装证书,因为我们需要抓取 HTTPS 请求。
如上图所示,点击解密 HTTPS 流量 - 安装证书 - 下载证书 - 设置 - 已下载描述文件中安装证书
证书信任
紧接着我们还需要在 iOS 中对此证书进行信任。
设置 - 通过 - 关于本机 - 证书信任设置 - 选择 HTTP Catcher CA
# HTTP Catcher 界面功能介绍
# 主菜单
序号 | 含义 |
---|---|
0️⃣ | HTTP Catcher 所抓到的包会现在在这个 Tab 下 |
1️⃣ | 开始监听请求,在开始监听前会清空之前的历史请求 |
2️⃣ | 跳转到工具栏,工具栏详情有 过滤器,代理,DNS 劫持,重写,黑名单 |
4️⃣ | 请求列表展示处 |
5️⃣ | 监听到的请求是按照请求时间展示,还是按照域名聚合展示 |
6️⃣ | 可以过滤请求结果。只展示 JSON 或者 图片,媒体,WebSocket,HTML |
7️⃣ | 历史数据监听包,点击右上角可删除。 |
# 解密 HTTPS 流量开关
如果不开启此开关,那么默认只会监听 HTTP 的流量。
不过我们在开发测试的时候一般是在 HTTP 下进行,正式进入生产环境才会使用 HTTPS,所以在开发环境下 不需要打开次开关。
# 过滤器
过滤器的作用可以对指定的域名进行定向抓包,因为如果不设置指定域名的话,那么在开启代理后,会有很多其他的 App 的请求包,会略微影响到观看数据体验。
还有就是因为 iOS 系统不信任用户导入的证书,所以在开启抓包之后,类似于 iCloud,AppStore,iTunes 都是无法使用的,为了不影响上述服务的使用,我们可以将 苹果 旗下的域名进行排除。
# DNS 劫持
假设我们正在开发的 App 的正式环境的域名为 https://api.i.server.com 此时我们想要将次 App 变为测试环境 App
那么我们就需要将对应的 https://api.i.server.com 转变为 https://api.t.server.com ,这样这个 App 就变成测试环境 App 啦。
DNS 就是为了实现这个功能的。
# 黑名单
黑名单的作用就是设置之后,无法对目标地址发起请求。
至于应用场景,还没有太 Get 到。
# 重写
重写 基本上就是 HTTP Catcher 最强大的功能了,对标 Charles 的 Rewrite 功能。
主要作用是可以针对一次 HTTP 请求包,可以在请求和响应阶段修改任何内容。
修改细则为
- 添加 Header
- 修改 Header
- 删除 Header
- Path
- URL
- 添加 Query 参数
- 修改 Query 参数
- 删除 Query 参数
- 添加表单参数
- 修改表单参数
- 删除表单参数
- 修改 Body
# WiFi 访问
# 实战
# 去广告
某天想去下载一款 斗图 方面的表情包软件,然后就在 AppStore 上搜索并下载了 斗图表情 。接下来是使用体验。
打开 App 弹出 5s 广告。
打开软件之后 可能不到 2s 吧,直接弹出 AppStore 评分,这。。。。
在浏览20s 之后直接弹出 28s 的广告。并且刚开始还不能关闭,需要浏览 5 秒之后才能关闭。
到这 我想直接好家伙,这饭恰的 也太。。。。(有点让我不舒服,哈哈哈哈)
我也是被逼急了,不得不采用技术手段解决这件事了。
因为 App 需要在启动的时候就加载广告,那么 App 开屏页需要展示什么对应的肯定是服务器返回的。所以我们需要抓取一下在 App 刚开始启动的时候的接口调用情况。
此时打开 Charles ,手机配置好代理,就开始准备抓包了。分析启动接口。
上方图示可以看到,在 App 刚刚启动的时候通过观察接口抓取情况,可以定位到 该软件的域名是 adesk.com。然后接下来就需要分析接口了。
将所有请求展开之后,可以看到上方蓝色部分的 config 接口还是很醒目的💩💩💩💩。
打开他 看一下
{
"code": 0,
"msg": null,
"res": {
"app_rate": {
"enable_rate": true,
"tyle_custom": true,
"main_title": "给我们些建议吧!",
"sub_title": "非常感谢您使用我们的产品,我们非常重视您的评价和意见,如果您喜欢我们的产品,请给个好评吧!",
"confirm_text": "好评一下",
"cancel_text": "我再想想",
"targeturl": "https://apps.apple.com/cn/app/id1155901497",
"rate_interval": 2,
"rate_limit_time": 2
},
"app_update": {...},
"app_configuration": {...},
"other_data": {...},
"app_advertising": {...}
}
}
好家伙,原来让我评分就是这个东西再搞鬼