手机抓包HTTPS
之前也介绍过 Charles 抓包神器,详细可以看这篇文章: 抓包神器。这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常?这样借助这个神器,基本上在开发过程中就能解决很多问题了。
学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作。
在开发中,不知道大家有没有遇到过这样的场景。
线上发布 App 出现一个 Bug,但是这个时候可能并不在公司(等于 Charles 无法发挥作用),也需要立即 定位问题,数据问题?界面问题?我的代码没动过啊!明明测试环境都是好的,大部分用户也是好的啊。基于 Charles 的 Map Remote 或 Rewrite 我们可以做到 App 灵活的在服务测试环境和正式环境之间切换,但是有一个前提,就是需要 电脑 💻,要是没有电脑呢?
这时候手机抓包就派上用场了,但这只是针对开发。你有没有下面这样的需求呢?手机抓包也能派上用场:
-
有的 App 的广告真的太过分了,非常影响体验(虽然添加广告也是合理的)有没有什么办法可以去掉某些 App 的广告呢。
- 不花钱的 VIP 他不香吗?
1. HTTP Catcher 简介
交代了故事背景,今天的主角就登场了。首先声明,本文章不是 App 广告,随便找了一个抓包工具,你也可以用其他的。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 有一个基本的认识,这只是对它的一个基本介绍。
2. 安装 & 配置
(1)在 AppStore 下载 HTTP Catcher。(2)安装证书,因为我们需要抓取 HTTPS 请求。如上图所示,点击解密 HTTPS 流量 - 安装证书 - 下载证书 - 设置 - 已下载描述文件中安装证书。
(3)证书信任
紧接着我们还需要在 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 访问
3. 实战
去广告
某天想去下载一款 斗图 方面的表情包软件,然后就在 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": {...}
}
}
好家伙,原来让我一进入 App 就评分就是这个东西再搞鬼。在看下面的 app_advertising
这个字段,很明显就是针对 App 广告的配置了。既然接口已经找到了,那么就可以开始我们进攻的号角了虽然目前我们虽然通过 接口分析 看到了类似广告的接口,但是我们还是需要来验证自己的推测。这里建议先在电脑上使用 Charles 的 Map Local 功能直接修改到执行的 文本文件里。然后直接将 app_advertising 对应的字段改为空对象,快速验证我们自己的想法。 {
"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": {}
}
}
我们将对应的返回结果里面的 app_advertising 字段修改为空对象,然后保存为 "ad.json" 然后手动将次接口的响应结果映射 ad.json 这样最终的返回接口就是 ad.json 文件中的内容了。在经过 Charles 设置之后的 App 就没有广告了,真的是通畅无比。 刚才我们已经在电脑上 通过 Charles 实现了广告过滤,那么其实大部分时间我们在使用手机的时候不在电脑旁边,也不一定连接的同一个 WIFI。这个时候就到 HTTP Catcher 就排上用场了。我们主要的任务就是将在电脑上 Charles 实现的功能自己在实现以下就可以了。开启手机 HTTP Catcher 数据包监听,打开软件,耐心等待广告加载完成后 进入 HTTP Catcher。 如上图所示,选择 new-kv.adesk.com 然后选中 config 接口 左滑。选择更多 在弹出的菜单栏中选择新建重写,选择在文本编辑器中编辑,然后复制下面的内容,将文本框中的内容进行替换。 {
"rules" : [
{
"action" : "body",
"matchField" : "",
"field" : "",
"value" : "\"app_advertising1\":{},\"test\"",
"matchValue" : "\"app_advertising\"",
"destiontion" : "response",
"isRegex" : false
}
],
"enabled" : true,
"name" : "去广告 ",
"description" : "",
"locations" : [
{
"method" : "GET",
"scheme" : "https",
"enabled" : true,
"port" : 443,
"query" : "appver=2.9.7&os=ios&packagename=com.emojifair.emoji",
"host" : "new-kv.adesk.com",
"path" : "\/v1\/config"
}
]
}
替换后,重启一下 HTTP Catcher, 然后在打开软件你会发现🤩 这软件用起来真的体验翻倍。 4. 白嫖 VIP
这里以 iOS 端 有道云笔记 为例在 HTTP Catcher 重写中添加以下内容 {
"rules" : [
{
"action" : "body",
"matchField" : "",
"field" : "",
"value" : "{\"service\": 1,\"payYear\": \"true\",\"end\": \"4100688000000\",\"um\": {\"nn\":\"atomhu\",\"q\": 3225419776,\"u\": 31360,\"dp\": 0,\"dq\": 100}}",
"matchValue" : "[\\s\\S]+",
"destiontion" : "response",
"isRegex" : true
}
],
"enabled" : true,
"name" : "有道笔记破解会员",
"locations" : [
{
"method" : "POST",
"scheme" : "https",
"enabled" : true,
"port" : 443,
"query" : "method=status",
"host" : "note.youdao.com",
"path" : "\/yws\/mapi\/payment"
}
]
}
然后再次打开有道云,你会神奇的发现,你已经变身 VIP 了 🤩🤩🤩🤩 这里变为 VIP 实际上也是利用重写功能,在有道云返回用户信息的接口里面,手动修改了用户的 VIP 状态。 很多的软件需要大家去探索才行,至于最后是否 OK 是多方面因数所影响的。
5. 软件抓取报告
当我学会使用 Charles 时开始,一发不可收拾,市面上 大部分常见 App 我都抓取过,这里整理一份报告App 名称 | 是否可抓取 | Content-Type | 备注 |
---|---|---|---|
掘金 | ✔️ | application/json; charset=utf-8 | 通过接口拿到一些自己定向想要查看的信息,定向搜索整理资源 这就是项目 awesome-IntelliJ-IDEA 的由来 |
简书 | ❌ | 未知 | 比较奇怪,开启抓包后 简书就不能使用了。 |
CSDN | ✔️ | application/json; charset=utf-8 | CSDN 有验签,接口不能重复请求 |
斗图表情 | ✔️ | application/json; charset=utf-8 | 去广告 |
小睡眠 | ✔️ | application/json; charset=utf-8 | 可以通过重写将自己的 Tilte 改为 VIP 但是不能带来实际的改变 因为权限验证是后端 |
潮汐 | ✔️ | application/json; charset=utf-8 | 倒腾了好久,最终还是没能 白嫖 VIP🤩🤩 |
闲鱼 | ❌ | 未知 | 不知道是不是 阿里系 原因 什么都看不到 靓仔落泪 |
自如 | ✔️ | | |
网易云 | ✔️ | text/plain;charset=UTF-8 | 网易云的返回结果应该都是加密的 什么都看不到 |
B 站 | ✔️ | application/json; charset=utf-8 | bilibili-schedule 哔哩哔哩(Bilibili)每日任务投币,点赞,分享视频,直播签到,银瓜子兑换硬币,漫画每日签到 |
微博 | ✔️ | application/json; charset=utf-8 | 可以抓取 每日热榜数据等 |
最右 | ✔️ | | 我记得最右 是关停过一段时间整体架构升级。我只能说改版后的架构 我什么都看不出来。 |
豆瓣 | ✔️ | application/json; charset=utf-8 | 电影榜单 |
幕布 | ✔️ | application/json; charset=utf-8 | 可以抓取优秀笔记 |
滴答清单 | ✔️ | application/json; charset=utf-8 | 如果你足够牛逼,应该可以变身 VIP |
知乎 | ✔️ | application/json; charset=utf-8 | 知乎热榜 知乎热搜词 |
有道云笔记 | ✔️ | application/json; charset=utf-8 | 实现 VIP 🤩🤩 通过重写功能可以实现 VIP 才能使用的 faceID 功能 |
美团 | ✔️ | application/json; charset=utf-8 | 查看自己附近的店铺列表 |
饿了吗 | ✔️ | application/json; charset=utf-8 | 查看自己附近的店铺列表 |
京东 | ✔️ | application/json; charset=utf-8 | 可以通过借口实现京东模拟签到 |
理想 | ✔️ | application/json; charset=utf-8 | 分析接口设计 |
小鹏 | ✔️ | application/json; charset=utf-8 | 分析接口设计 |
蔚来 | ✔️ | application/json; charset=utf-8 | 分析接口设计,蔚来的每个接口都是加签的,安全性还是比较高的。 |
6. 写到最后
学习 Charles,HTTP Catcher 这样的抓包软件,是为了帮助自己解决工作中棘手的问题。
在没有电脑的情况下,也能通过手机定位问题。再也不用一会要下载正式环境 App 一会 又要安装测试环境 App 了。
同时也可以通过抓包学习一下其他公司的 API 接口设计。如果恰巧你对这方面格外有兴趣的话,那么实现 禁用广告,VIP 破解,甚至于 商品秒杀,都没问题。
投稿作者:胡川港知乎主页:zhihu.com/people/hu-chuan-gang-58GitHub主页:https://github.com/xiaoxiunique