广东电信 IPTV 验证分析并自动提取播放链接

发表于 2022-06-02   |   分类于 默认分类   |   访问: 10,796 次

背景

最近整了个 R86S 之后又开始折腾起了 IPTV。几年前曾简单抓包获取了一堆播放地址,现在已经不能用了。尝试重新使用 wireshark 抓包,以为拿些比较稳定的 IGMP 组播地址,但是发现广东电信已经不会组播地址了,尝试使用网上的组播地址也都不能用了,可能是我配置不对,或者使用 DHCP 形式连接盒子不会下发 IGMP 地址,又或者电信现在已经不下发组播了。那就只能退而求其次使用 RTSP 地址了。但是我发现抓包获取的 RTSP 地址都有一个小尾巴包含了 IPTV 账户的登录信息,并且删掉之后就不能播放了。那这些播放地址都不是永久有效的,需要定期刷新,所以只能去研究一下自动化提取了。

验证过程

首先先破解盒子,获取 ADB,然后就能提取 /system/app/ 里面的 APK 了。一股脑全部丢 jadx 中。然后找到类 com.gd.chinatelecom.iptv.openapi.internalApi.impl.IPTVApiImpl,其中的 authorize 就是我们需要的验证过程了。(这个类是通过搜索 AuthenticationURL 字符串找到的,很轻松)。

通过分析代码,发现验证过程如下:

  1. HTTP GET http://eds.iptv.gd.cn:8082/EDS/jsp/AuthenticationURL?Action=Login&return_type=1&UserID={userid}。其中 {userid} 是 IPTV 的账号,不包含 @ 和后面的东西。这个链接会返回一个 epgurl,拿出其中的域名,这个才是真正的验证服务器(电信这相当于手动实现了一个负载均衡啊。。。)
  2. 用上一步拿到的域名 base_url 然后 GET 请求 http://{base_url}/EPG/oauth/v2/authorize?response_type=EncryToken&client_id=smcphone&UserID={userid},返回一个 JSON,获取其中的 EncryToken
  3. 获取 token 之后,用 IPTV 的密码计算 MD5,取前 24 位用作 key,然后计算 {randint(0, 1E7)}${token}${userid}${IMEI}${IP}${MAC}$$CTC 的 DES3 结果,记得 pad 一下。randint(0, 1E7) 就是 0 到 1e7 的随机整数;token 是上一步获取的;userid 是 IPTV 的用户名;IMEI 是盒子的 IMEI,可以为空;IP 是盒子的 IP,可以任填,我用 127.0.0.1 都行;MAC 是盒子的 MAC 地址,这个是写在盒子上的,不可以任填,格式是 AA:BB:CC:DD:EE:FF
  4. 算好上面计算的 authinfo 之后,GET 请求 http://{base_url}/EPG/oauth/v2/token?client_id=smcphone&DeviceType=deviceType&UserID={userid}&DeviceVersion=deviceVersion&userdomain=2&datadomain=3&accountType=1authinfo={authinfo}&grant_type=EncryToken,然后得到 cookie。

获取频道列表

有了上一步获取的 cookie 之后,直接 GET 请求 http://{base_url}/EPG/jsp/getchannellistHWCTC.jsp 就能获取所有频道列表,提取 RTSP 也很简单了,这里不再赘述。

已有 8 条评论


  1. 记录

    太高深了,看不懂,我这里电信的也是ppoe拨号,有两组账号,业务认证的账号是去掉iptv账号@以后的就是业务认证账号,我用爱快拨号,把盒子接入爱快路由,端口分流,盒子能正常链接可以看广告,看直播跟别的黑屏

    记录  July 1st, 2022 at 04:12 pm回复
  2. tom

    rtsp ip 挂了吗

    tom  September 22nd, 2022 at 03:09 pm回复
  3. nothing

    你好,请问这种方法第一步已经不实现了,响应状态为200,非302,也没有location url,还有其他方法么

    nothing  October 27th, 2022 at 12:26 am回复
    1. yujincheng08

      现在变成返回一个 epgurl 了。不过一样。

      yujincheng08 admin November 18th, 2022 at 06:01 pm回复
  4. Jerry

    IPTV的密码这里有个坑,不是拨号密码,默认密码是六个八

    Jerry  July 24th, 2023 at 09:03 pm回复
  5. 南梦宫

    和我这边差不多啊,不过我这边只要不重新获取cookies,直播地址永远不过期

    南梦宫  August 31st, 2023 at 11:50 pm回复
  6. Felix

    大佬可以提供openwrt的包实现文中的方法,定时输出m3u文件吗?

    Felix  February 10th, 2024 at 01:11 am回复
    1. yujincheng08

      已经有了

      yujincheng08 admin March 9th, 2024 at 11:45 pm回复

发表新评论

© 2024 Powered by Typecho & Theme Quark
粤ICP备17055048号