jdy视频直播流采集分析

关于视频直播网站jdy的采集分析

前言:

本文仅用于交流学习,请勿用于非法用途,后果自负!

本文涉及知识点:
js逆向,AES对称加密算法,M3U8视频流

  • 第一部分

jdy直播网是从事体育赛事赛程展示及赛事视频直播的网站,具备多源直播流的特性,效果如下:在这里插入图片描述
当有直播信号时,会显示信号1,信号2.。。。点进去既可以获取到直播信号进行播放在这里插入图片描述

本文主要就是通过分析获取到该视频直播地址。

  • 第二部分
    好了,效果展示完毕,就让我们开始视频流地址的获取之路吧。通过f12打开控制台,当我们点击赛事详情页跳进播放页面时会出现下面的地址:
    在这里插入图片描述
    而且随着时间的推移,红色框的这些url会不断地增加。对于视频推流不是很熟悉的朋友可能会比较疑惑,这些https://yy.hnzczs.com/live/zbstream26578.m3u8?txSecret=63ee3c415ab4e65e86bb54da5d4c458d&txTime=1598110105是什么呢?其实,这就是上面图片中视频播放的播放地址,其中后缀为m3u8是直播中很常用的一种视频推流方式:m3u8是HLS(HTTP Live Streaming)协议的部分内容,而HLS是由苹果公司提出的基于HTTP的流媒体网络传输协议。简单点说:这种视频推流方式就是把一个视频文件切割成无数个ts文件供观看者进行下载观看,可以使用诸如VLC media player之类的流播放器直接进行播放。
    那这种m3u8的格式地址怎么获取呢?看起来,这些m3u8的url都挺有规律的,有没有办法可以根据规则生成那些m3u8播放地址呢?小伙子,还是别想了,这种推流格式是腾讯云的推流格式,采用了秘钥加密,而且秘钥我们拿不到,所以我们还是放弃吧。既然模拟生成不行,我们就只能考虑下另外一种方式了,那就是模拟浏览器行为获取这些播放地址。通过查看请求的referer和全局搜索exSecret等参数都未果后,那只能一步步逆向了在这里插入图片描述
    通过查看右边红色框里的代码,我们可以定位到payVideo这里,这里有个this.url参数,通过打断点刷新在这里插入图片描述
    如我们所料,这个url就是我们的播放地址了,但这里还看不出url怎么来的,我们继续往上找
    在这里插入图片描述
    最后,我们会来到这里,很明显,this.livesrc就是m3u8的url,然后livesrc又是来自liveData。接着通过该页面全局搜索,可以得知:liveData就是来自上图的2号框代码块。不信?好的,让我们打个断点运行下在这里插入图片描述
    看吧,就是了,但是这就能证明该url是在这里生成的了么,不,或许还会有小伙伴会说:你看代码不是还调用了h,d这些函数/变量么,应该再接着点进去查看,里面才是真实的生成代码。但是我想说的是,这里就是生成的函数了,为什么呢?懂得人自然懂好吧。不懂?没关系,我告诉你:通过ECB,Pkcs7我们就可以知道,这是采用了AES的对称加密算法的加密函数,之所以会有人觉得这些还不是最终的加密函数,是因为不了解AES加密算法(没错,之前的我就是这么多小可爱中的其中一个,哈哈)。那AES加密算法是怎么样的呢?
    AES加密算法:又称对称加密算法,简而言之:数据发送方通过把需要加密的明文数据切割成数个小数据块,然后使用秘钥对每个小数据块进行加密处理,就可以生成一串经过加密之后的密文数据。数据接收方在接收到密文数据之后,使用相同的秘钥进行解密处理就可以得到相应的明文数据了。ECB是AES加密算法中五种加密方式中的其中一种加密模式,Pkcs7则是切割明文数据时,位数补全规则。
    jdy就是使用了AES加密算法对直播流url进行了加密处理。接着让我们来捋下他是怎么使用这个加密算法的:e是随机获取的16位数字字符串。i是固定的字符串‘/livesport/getsport’,获取到i,e后,拼接i,e,然后发送一个请求给服务器,获取到响应,把响应传递给下面的函数进行处理。既然是发送请求,那url列表中肯定有对应的请求地址:https://www.jindouyun.live/livesport/getsport/4337085/8713628421063511
    查看对应响应:08VTr/qRfmCa5KICGqP/mf4vqazkyErdIJgrUmG/EKoz5ntzys5GIsHkQxG4TfiOBaYos5y3y7UX3w0NQ7im2a7N1ChE0fl39ejXflT9HPkz4v87o+Lg//mOAZ5KC8OWD7Dz1LQ8jTkBCgPDfe0c+3Kkf06Yb9YT8qs/5zWSyARDtVHUDcPKI0G4i7sgKiMs+CFyfELYeiQGW9zum7STjHRXgbYrk7XkuMom5syZxAmHa0ycSSnU2J3VHdknljLyO9m9FDF9DfVGjLD4y7ud7yROcV2cqsdhTmf4a8lBoqCUxGZXxEWGDpg4aH4Zg6Pb7n4gXmud2YYOD6j95D5YFBILkh96xCaw5Dbu4VFlSUvL/PwvCpI4f3BrdcuTaZU1o0j8mdzxGhVLTByMqp5a2/xcagYql2JpRQA4QkaBZyas5+X6UTX15KEfitSWcQbiUiyZIamzcKaCm48i7tw4JdmHSjZJeOso+gi/ZERHoyrV3pQ0XTNUmq/hOEF12xrqtRadwmdK959hemORTq8kfCN4UZB3G62nrxFMW7FTSDd2DvpqtMl/Ku71TuSMrebIPuilbMqOfKarZ3sEb+5GYVW21GdhO3UsTBme10SnT0k1nctsNXU0PEs0odkyrZf7dnulx8TfX4kDEM1V3wUEHCYu3nWMM6LnANMRZkDKMyQT6yeHnLsIl/nAOPBD41ve9J8wORVZIKge25XQ2PCIrQ==,很显然:i=响应数据。而a=‘5418561387136284’就是加密秘钥,接着就是使用AES加密算法对获取到,我们可以使用线上加密工具进行验证一下
    在这里插入图片描述
    完美,perfect!
  • 第三部分
    既然了解了别人是使用何种加密算法了,现在就该想想怎么使用python3实现对应的算法了。自己写算法?自己写是不可能自己写的了,既然js有对应的AES加密算法框架,我们python怎么可以没有呢?必须有的好么,通过查阅资料可知:python中能实现AES加解密的框架有很多:pycryptodome,pycrypto。PyCrypto很强大,可以用于AES、RSA等多种加密,所以我们使用pycryptodome,具体安装调用方法可以点击这里在这里插入图片描述
    当获取到需要解密的密文数据跟秘钥数据之后,代入运行即可获得解密之后的数据了
    在这里插入图片描述
    总结
    jdy直播网的视频推流url加密其实是比较简单的加密,最大的难点是:它使用了AES对称加密,如果没有接触过,容易忽略这个因素,然后陷入js调用陷阱里面,导致无法正确获取到数据。当了解了,一切就迎刃而解了。获取到加密的秘钥,加密的模式,补全方式等可以通过调用响应的函数库就能实现数据解密了。
    “好了,完结撒花!!”“等等,大佬,还有个地方你没讲呢?”“哪呢哪呢?”“就是那个加密秘钥‘5418561387136284’你没讲怎么获取呢?”“emmm…小伙子,一看你就是没自己动脑,我告诉你吧,那个加密秘钥的secretKey其实也是用AES加密得到,具体他是怎么加密得到的,他的加密秘钥跟加密模式那些是啥就自己动脑去找找、想想了,哈哈”

Finally

本文仅用于交流学习,请勿用于非法和商业用途,后果自负!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值