查看原文
其他

手机抓包!

胡川港&老逛 逛逛GitHub 2021-08-19

逛逛 GitHub 除了推荐一些好玩、有趣的 GitHub 项目,也会发一些有用的软件,比如历史发布的:

之前也介绍过 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-8CSDN 有验签,接口不能重复请求
斗图表情✔️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-8bilibili-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-58

GitHub主页:https://github.com/xiaoxiunique

推荐阅读

0. 逛逛GitHub交流群限时加入

1. IntelliJ IDEA 从入门到上瘾

2. 干掉马赛克!

3. 抓包神器!

4. GitHub 暗黑模式终于来了!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存