百趣云 百趣云的博客

芒果tv扫码登录协议

背景

前阵子芒果 TV 的扫码协议还是很好破解的:把二维码链接提取出来,就可以直接跳转到账号密码登录页,等用户登录成功之后,电脑上的二维码也会自动登录成功。借着这个思路,抓包登录页面的登录接口,就能实现自动登录账号。

然而现在这个方法已经不现实了——芒果 TV 最新版的软件已经去除了这种方式,只支持微信和芒果 TV App 扫码,这就很头大了。

2024-10-21T13:23:04.png

分析二维码

大略看一下,生成的二维码信息里包含一个链接和一个 qcode,这个 qcode 就是关键的识别 ID。

微信内部是通过 code 转换识别微信账号的,肯定走不通;芒果 TV 又是自家的软件,看来只能对它自家 App 下手了。

抓包分析扫码流程

打开 Stream(iOS 抓包工具),对芒果 TV 手机端扫码的全过程进行抓包。抓了几十个包,逐个分析,发现在最后点击"登录"的那一步,走了 scan 接口。看看它的包:

curl 'https://xxx.mgtv.com/xxx?_support=10101001&abroad=0&ageMode=0&allowedRC=1&appVersion=8.2.5&ch=AppStore&device=iPhone&deviceid=e60d5bf6-8201-4deb-b5b6-d2ba45dba317&did=af6665c895c689f6226d5ba1e4dd9450a9df7f27&dname=iPhone&from=pcweb&invoker=hunantvphone&islogin=1&mac=af6665c895c689f6226d5ba1e4dd9450a9df7f27&osType=ios&osVersion=17.7&pic_use=multi&seqId=212b2b063cfde93a338c885d4a5876ce&src=mgtv&testversion=&ticket=BA33D51071953B09A1698AD0C7CE06D3&uid=17294279889091724227197' \
  -H 'Host: nuc.api.mgtv.com' \
  -H 'Cookie: mba_deviceid=e2b05951-8c21-5425-6540-9c49f1ab399b; mg_uuid=465c1e9d-9fc2-40de-bae4-a3b49a420cca' \
  -H 'User-Agent: MGTV-iPhone-appstore/8.2.5 (iPhone; iOS 17.7; Scale/3.00)'

参数很多,慢慢调试后发现最有用的信息就是 uidticket

  • uid:其实就是二维码里 qcode 的值
  • ticket:可以理解为登录后的 token

把这两个参数模拟一遍,成功实现登录。那么思路就清晰了:想办法用账号密码自动登录拿到 ticket,再去走抓到的 scan 接口,不就成了?

账号密码登录的坑

先对官网的账号密码登录抓包,发现 passwordsign 都是加密的。开启 debug 逆向看代码,写了一大串,结果还是不太行:sign 模拟出来了,但 password 的模拟一直出错。研究了一天,放弃了这条路。

于是转换思路,对历史版本的软件抓包,抓到了一个 r 开头的参数,扫码解析出来就是账号密码登录(注意:这并不是官网的接口)。看来还是有搞头——模拟了一遍接口,成功拿到 ticket!

封装接口

拿到 ticket 后就开始封装接口:

2024-10-21T13:33:55.png
  • 登录接口:https://api.teawhites.cn/index/login,传 usernamepassword
  • 扫码接口:https://api.teawhites.cn/index/scan,传 ticketurl(二维码解析转换后的地址)

直接拿 ticket 去跑第二个接口,整个流程就通了。

总结

  1. https://api.teawhites.cn/index/login(登录):传 username 和 password
  2. https://api.teawhites.cn/index/scan(扫码):传 ticket 和 url

合作微信联系:run1255

By 百趣云 阅读量:1226 On