手机抓包HTTPS

之前也介绍过 Charles 抓包神器,详细可以看这篇文章: 抓包神器。这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常?这样借助这个神器,基本上在开发过程中就能解决很多问题了。

手机抓包HTTPS_第1张图片

学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作。

在开发中,不知道大家有没有遇到过这样的场景。

线上发布 App 出现一个 Bug,但是这个时候可能并不在公司(等于 Charles 无法发挥作用),也需要立即 定位问题,数据问题?界面问题?我的代码没动过啊!明明测试环境都是好的,大部分用户也是好的啊。

基于 Charles 的 Map Remote 或 Rewrite 我们可以做到 App 灵活的在服务测试环境和正式环境之间切换,但是有一个前提,就是需要 电脑 ,要是没有电脑呢?

这时候手机抓包就派上用场了,但这只是针对开发。你有没有下面这样的需求呢?手机抓包也能派上用场:

  • 有的 App 的广告真的太过分了,非常影响体验(虽然添加广告也是合理的)有没有什么办法可以去掉某些 App 的广告呢。

  • 不花钱的 VIP 他不香吗?

1. HTTP Catcher 简介

手机抓包HTTPS_第2张图片交代了故事背景,今天的主角就登场了。首先声明,本文章不是 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张图片

如上图所示,点击解密 HTTPS 流量 - 安装证书 - 下载证书 - 设置 - 已下载描述文件中安装证书。

(3)证书信任

手机抓包HTTPS_第4张图片

紧接着我们还需要在 iOS 中对此证书进行信任。

设置 - 通过 - 关于本机 - 证书信任设置 - 选择 HTTP Catcher CA

HTTP Catcher 界面功能介绍

主菜单

手机抓包HTTPS_第5张图片
序号 含义
0️⃣ HTTP Catcher 所抓到的包会现在在这个 Tab 下
1️⃣ 开始监听请求,在开始监听前会清空之前的历史请求
2️⃣ 跳转到工具栏,工具栏详情有 过滤器,代理,DNS 劫持,重写,黑名单
4️⃣ 请求列表展示处
5️⃣ 监听到的请求是按照请求时间展示,还是按照域名聚合展示
6️⃣ 可以过滤请求结果。只展示 JSON 或者 图片,媒体,WebSocket,HTML
7️⃣ 历史数据监听包,点击右上角可删除。

解密 HTTPS 流量开关

如果不开启此开关,那么默认只会监听 HTTP 的流量。

不过我们在开发测试的时候一般是在 HTTP 下进行,正式进入生产环境才会使用 HTTPS,所以在开发环境下 不需要打开次开关。

过滤器

手机抓包HTTPS_第6张图片

过滤器的作用可以对指定的域名进行定向抓包,因为如果不设置指定域名的话,那么在开启代理后,会有很多其他的 App 的请求包,会略微影响到观看数据体验。

还有就是因为 iOS 系统不信任用户导入的证书,所以在开启抓包之后,类似于 iCloud,AppStore,iTunes  都是无法使用的,为了不影响上述服务的使用,我们可以将 苹果 旗下的域名进行排除。

DNS 劫持

手机抓包HTTPS_第7张图片

假设我们正在开发的 App 的 正式环境的域名为 https://api.i.server.com 此时我们想要将次 App 变为测试环境 App

那么我们就需要将对应的 https://api.i.server.com 转变为 https://api.t.server.com ,这样这个 App 就变成测试环境 App 啦。

DNS 就是为了实现这个功能的。

黑名单

手机抓包HTTPS_第8张图片

黑名单的作用就是设置之后,无法对目标地址发起请求。

至于应用场景,还没有太 Get 到。

重写

手机抓包HTTPS_第9张图片

重写 基本上就是 HTTP Catcher 最强大的功能了,对标 Charles 的 Rewrite 功能。

主要作用是可以针对一次 HTTP 请求包,可以在请求和响应阶段修改任何内容。

修改细则为

  • 添加 Header

  • 修改 Header

  • 删除 Header

  • Path

  • URL

  • 添加 Query 参数

  • 修改 Query 参数

  • 删除 Query 参数

  • 添加表单参数

  • 修改表单参数

  • 删除表单参数

  • 修改 Body

WiFi 访问

3. 实战

去广告

某天想去下载一款  斗图 方面的表情包软件,然后就在 AppStore 上搜索并下载了  斗图表情 。接下来是使用体验。

打开 App 弹出 5s 广告。 手机抓包HTTPS_第10张图片打开软件之后 可能不到 2s 吧,直接弹出 AppStore 评分,这。。。。 手机抓包HTTPS_第11张图片在浏览20s 之后直接弹出 28s 的广告。并且刚开始还不能关闭,需要浏览 5 秒之后才能关闭。 到这 我想直接好家伙,这饭恰的 也太。。。。(有点让我不舒服,哈哈哈哈) 手机抓包HTTPS_第12张图片我也是被逼急了,不得不采用技术手段解决这件事了。因为 App 需要在启动的时候就加载广告,那么 App 开屏页需要展示什么对应的肯定是服务器返回的。所以我们需要抓取一下在 App 刚开始启动的时候的接口调用情况。此时打开 Charles ,手机配置好代理,就开始准备抓包了。分析启动接口。 手机抓包HTTPS_第13张图片上方图示可以看到,在 App 刚刚启动的时候通过观察接口抓取情况,可以定位到 该软件的域名是 adesk.com。然后接下来就需要分析接口了。 手机抓包HTTPS_第14张图片将所有请求展开之后,可以看到上方蓝色部分的 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 就没有广告了,真的是通畅无比。 手机抓包HTTPS_第15张图片刚才我们已经在电脑上 通过 Charles 实现了广告过滤,那么其实大部分时间我们在使用手机的时候不在电脑旁边,也不一定连接的同一个 WIFI。这个时候就到 HTTP Catcher 就排上用场了。我们主要的任务就是将在电脑上 Charles 实现的功能自己在实现以下就可以了。开启手机  HTTP Catcher 数据包监听,打开软件,耐心等待广告加载完成后 进入 HTTP Catcher。 手机抓包HTTPS_第16张图片如上图所示,选择 new-kv.adesk.com 然后选中 config 接口 左滑。选择更多 手机抓包HTTPS_第17张图片在弹出的菜单栏中选择新建重写,选择在文本编辑器中编辑,然后复制下面的内容,将文本框中的内容进行替换。
  {   
   "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 状态。 手机抓包HTTPS_第18张图片很多的软件需要大家去探索才行,至于最后是否 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-58

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

你可能感兴趣的:(手机抓包HTTPS)