之前也介绍过 Charles 抓包神器,详细可以看这篇文章:抓包神器。这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常?这样借助这个神器,基本上在开发过程中就能解决很多问题了。
学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作。
在开发中,不知道大家有没有遇到过这样的场景。
基于 Charles 的 Map Remote 或 Rewrite 我们可以做到 App 灵活的在服务测试环境和正式环境之间切换,但是有一个前提,就是需要 电脑 ????,要是没有电脑呢?
这时候手机抓包就派上用场了,但这只是针对开发。你有没有下面这样的需求呢?手机抓包也能派上用场:
-
有的 App 的广告真的太过分了,非常影响体验(虽然添加广告也是合理的)有没有什么办法可以去掉某些 App 的广告呢。
-
不花钱的 VIP 他不香吗?
1. HTTP Catcher 简介
-
解密 HTTPS
-
实时修改请求和响应
-
请求重放
-
阻止请求
-
域名过滤
-
DNS 修改
看到这里可能你对 HTTP Catcher 有一个基本的认识,这只是对它的一个基本介绍。
2. 安装 & 配置
如上图所示,点击解密 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 上搜索并下载了 斗图表情 。接下来是使用体验。
{
"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 广告的配置了。
{
"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": {}
}
}
{
"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"
}
]
}
4. 白嫖 VIP
{
"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"
}
]
}
5. 软件抓取报告
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 破解,甚至于 商品秒杀,都没问题。
GitHub主页:https://github.com/xiaoxiunique
Java后端交流群已成立
公众号运营至今,离不开小伙伴们的支持。为了给小伙伴们提供一个互相交流的平台,特地开通了官方交流群。扫描下方二维码备注 进群 或者关注公众号 Java后端 后获取进群通道。
推 荐 阅 读 1. 抓包神器:Charles 2. Spring Boot 打包上传至 Docker 仓库? 3. 2W 字详解设计模式 4. 连夜撸了一个简易聊天室 5. 推荐一款 Java 对象映射神器
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。