电信阿里鱼卡 UC 免流原理
date
‣
slug
china-telecom-ali-free-flow
status
Published
tags
Android
summary
上个月和电信客服扯皮两周多终于把手机套餐改成了阿里鱼卡套餐。
从 59RMB (500MB+100分钟通话) 的高端套餐改成了 19RMB(1GB+100分钟+日租+阿里文娱应用免流) 低端套餐。
实在要吐槽一下电信改套餐的规定。改套餐明明一个电话或者App戳戳就能搞定事情,偏偏让你回归属地营业厅跑一趟。虽然最后手持身份证拍照异地受理了但体验实在是不好。
鱼卡UC浏览器免流大体实现是这样的
type
Post
上个月和电信客服扯皮两周多终于把手机套餐改成了阿里鱼卡套餐。
从 59RMB (500MB+100分钟通话) 的高端套餐改成了 19RMB(1GB+100分钟+日租+阿里文娱应用免流) 低端套餐。
实在要吐槽一下电信改套餐的规定。改套餐明明一个电话或者App戳戳就能搞定事情,偏偏让你回归属地营业厅跑一趟。虽然最后手持身份证拍照异地受理了但体验实在是不好。
鱼卡UC浏览器免流大体实现是这样的
抓包
Wireshark抓包
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2Faa038e47-53f1-4659-b986-340d134a2d12%2FUntitled.png?table=block&id=ae5147d7-dfa4-41ae-8d39-6c1544470a93&cache=v2)
注意这段
Proxy-Authorization: 1|15120022766*******|com.ucweb.iphone.lowversion|ca5fe4b11712e10ba745c2817*******
关于 Proxy-Authorization 见 https://developer.mozilla.org
即UC浏览器的请求都经过代理服务器。
对比几次请求可以发现 1|UID|UA|Key 这几段猜测规律
- 1 不变
- UID 标示用户ID
- UA 浏览器UA
- Key 由网站Host计算,应该是md5
反编译
反编译 Android 客户端,基本验证各字段的意义
UC浏览器拼接Proxy-Authorization
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2Fd1972dc6-e1fa-49e7-9637-6483bcf5162a%2FUntitled.png?table=block&id=d338bdb9-9232-4d05-a80d-178ec30c8834&cache=v2)
而 bcX 和 bcW 的获取过程断点获得调用栈如下
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2F1351a4be-7cc7-4523-9d01-a73055329d39%2FUntitled.png?table=block&id=708e3b05-2b48-4429-a97a-348fae3842c1&cache=v2)
在浏览器激活免流的时候会获取相关字段(不清楚是否会定时更新)
请求 https://freeflow.uc.cn/freeflow/generatePhoneToken 获取一段密文,解密之后解析赋值给 bcX bcW
当开始网络请求时由对应 UID|Key|Host 计算 md5
获取Host
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2Ffb21aaa8-31fd-4405-a273-1d9b79cc6d18%2FUntitled.png?table=block&id=bc7a1072-de0a-4f93-b1bf-e824f75fb80d&cache=v2)
计算MD5
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2F99f9997c-740d-4e6e-a666-4baf1059d5d2%2FUntitled.png?table=block&id=622bbd66-5960-4991-98ab-1466b70d82bb&cache=v2)
拼接Proxy-Authorization
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2Fca3b579c-b5bc-4bf1-84eb-d1eddcaa80bf%2FUntitled.png?table=block&id=3f7f02e3-28e8-4f23-a57d-46c5654d7685&cache=v2)
密文解密之后的结构体
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F74874109-3f4a-47e8-bd21-d244a829d694%2F2be4be51-cc80-4ac3-a4e5-d57c61396f19%2FUntitled.png?table=block&id=f0b5644f-2f33-43aa-b35e-dda3099f7bb2&cache=v2)
上面需要的 UID UA KEY Server Port都在里面
结论?
SSL Pinning 还是必须的。