之前也介绍过 Charles 抓包神器,详细可以看这篇文章: 抓包神器。这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常?这样借助这个神器,基本上在开发过程中就能解决很多问题了。
学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作。
在开发中,不知道大家有没有遇到过这样的场景。
线上发布 App 出现一个 Bug,但是这个时候可能并不在公司(等于 Charles 无法发挥作用),也需要立即 定位问题,数据问题?界面问题?我的代码没动过啊!明明测试环境都是好的,大部分用户也是好的啊。基于 Charles 的 Map Remote 或 Rewrite 我们可以做到 App 灵活的在服务测试环境和正式环境之间切换,但是有一个前提,就是需要 电脑 ,要是没有电脑呢?
这时候手机抓包就派上用场了,但这只是针对开发。你有没有下面这样的需求呢?手机抓包也能派上用场:
有的 App 的广告真的太过分了,非常影响体验(虽然添加广告也是合理的)有没有什么办法可以去掉某些 App 的广告呢。
看到这里可能你对 HTTP Catcher 有一个基本的认识,这只是对它的一个基本介绍。
如上图所示,点击解密 HTTPS 流量 - 安装证书 - 下载证书 - 设置 - 已下载描述文件中安装证书。
(3)证书信任
紧接着我们还需要在 iOS 中对此证书进行信任。
设置 - 通过 - 关于本机 - 证书信任设置 - 选择 HTTP Catcher CA
序号 | 含义 |
---|---|
0️⃣ | HTTP Catcher 所抓到的包会现在在这个 Tab 下 |
1️⃣ | 开始监听请求,在开始监听前会清空之前的历史请求 |
2️⃣ | 跳转到工具栏,工具栏详情有 过滤器,代理,DNS 劫持,重写,黑名单 |
4️⃣ | 请求列表展示处 |
5️⃣ | 监听到的请求是按照请求时间展示,还是按照域名聚合展示 |
6️⃣ | 可以过滤请求结果。只展示 JSON 或者 图片,媒体,WebSocket,HTML |
7️⃣ | 历史数据监听包,点击右上角可删除。 |
如果不开启此开关,那么默认只会监听 HTTP 的流量。
不过我们在开发测试的时候一般是在 HTTP 下进行,正式进入生产环境才会使用 HTTPS,所以在开发环境下 不需要打开次开关。
过滤器的作用可以对指定的域名进行定向抓包,因为如果不设置指定域名的话,那么在开启代理后,会有很多其他的 App 的请求包,会略微影响到观看数据体验。
还有就是因为 iOS 系统不信任用户导入的证书,所以在开启抓包之后,类似于 iCloud,AppStore,iTunes 都是无法使用的,为了不影响上述服务的使用,我们可以将 苹果 旗下的域名进行排除。
假设我们正在开发的 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 参数
添加表单参数
修改表单参数
删除表单参数
某天想去下载一款 斗图 方面的表情包软件,然后就在 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, 然后在打开软件你会发现 这软件用起来真的体验翻倍。
{
"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 了
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 | 分析接口设计,蔚来的每个接口都是加签的,安全性还是比较高的。 |
学习 Charles,HTTP Catcher 这样的抓包软件,是为了帮助自己解决工作中棘手的问题。
在没有电脑的情况下,也能通过手机定位问题。再也不用一会要下载正式环境 App 一会 又要安装测试环境 App 了。
同时也可以通过抓包学习一下其他公司的 API 接口设计。如果恰巧你对这方面格外有兴趣的话,那么实现 禁用广告,VIP 破解,甚至于 商品秒杀,都没问题。
投稿作者:胡川港知乎主页:zhihu.com/people/hu-chuan-gang-58GitHub主页:https://github.com/xiaoxiunique