今天很开心,讲一讲腾讯视频的js逆向过程,是过程,不是破解方法,也没有什么源代码,当然你可以看懂之后自己写出来。再顺便说下腾讯视频程序员的加密手段很狡猾。比爱奇艺不知道好多少。
打开控制台,看network,刷新几次也没有看到关于m3u8的请求,但是有切片ts。
所以只能从切片这里切入,打个断点刷新一下。
可以看到t是想要的数据,所以沿着栈慢慢找,一直找到最底部就能看到很有用的信息。
e看起来很像是m3u8里的内容。
在请求之前打个断点看看,刷新。
看到栈这里的函数名很有可疑。
点击跳转到e.load,上下查看代码可以看得出很接近了。有videoInfo这些字眼,还有一些log的输出,搜索一下没搜索到什么东西,就继续往栈走
这时候就跳到superplayer.js里,在loadInner里,看到一个很关键的:
this._videoInfos = [].concat(e).map((function(e) {
return new VideoInfo(e,o._config)
}
new了一个配置,在这里打个断点,刷新
可以看到这个e里面的url,是一个m3u8文件,所以只要找到这个从哪里来就知道了
e是函数的参数,所以找调用者,在start看到了getVideoRsp Rsp就是Response的缩写,响应数据的意思,打个断点,进去
眼前一亮!请求视频信息,进去
看到请求信息,然后下面是设置请求信息,进去看看
看了看,没看出有用的东西,但是后面又个call的调用,打个断点看看会进去嘛?因为前面有判定。
能进去,有个判断,打个断点过去,看看t的值是什么,t有值的,所以走parseExternalVideoInfo
parseExternalVideoInfo的函数调用正好在下面,看到了一个很关键的:sendRequestMiddleWare好像是向中间件发什么东西,但是它并没有调用,只是赋值到r上面,this._config.sendRequestMiddleWare没有定义,所以赋的是值sendRequestMiddleWare$2,点开看看函数
我们不知道它会不会执行,先打个断点,让程序执行,最后是能到的。一步一步单走。
达到e.reqPath,看到了getvinfo v是video,它缩写了,不想让人从整个代码中搜索到关键的字眼。
这看出是获取请求的网址,也就是准备开始请求了,代码(A = e.resData)的时候,匪夷所思的地方来了,还没有请求,才刚获取网址就已经有数据了??? 其实是缓存阻碍了我的分析
res也是response的缩写,也就是当一个有值赋值操作,它的boolean是true,也就是这程序会走[3,4] 不会走o.start。
看看o.start里面,query?还是一个什么netTool的东西,jsonp?难道?这里暂时放下,因为过去过不了,是true。所以就在Console里把e.resData赋一个null或者0都可以。
然后执行就能进去了
再进去就可以看懂了。好像是创建了什么,插入到了body里。
其实在这里已经有些人猜到了,就是jsonp而已,但是很奇怪为什么没有网络请求,jsonp也是会有网络请求的。把C的值用浏览器打开,发现不知道报了什么错误,但是至少来说已经知道了怎样请求了。发生错误的原因是我们把e.resData的数据改没了,本来它是不走这里的。
其实后来弄懂了,我想到了一个其他更简单的方法,就是切换一下画质,就立马有网络请求了
用浏览器打开就能看到里面的数据了,这不得不说腾讯做的很好,我当时觉得很神奇,为什么没有任何网络请求却能够获取到数据。
这些请求参数,我就长话短说了,这个cKey是最关键的。找到怎么生成就可以了。
返回代码,搜索一下cKey看看有没有信息,找到了
在更新key的时候,这个getckey非常的显眼,打个断点,有两个getckey,你可以都打,刷新一下,就到断点处了
通过对比可以看出:n是网址最后那部分,也叫vid,视频id。u是一个时间戳,a是开发的版本号,l其实是一个随机生成的值,但是这个值第一次生产之后会永远保留到腾讯服务器里,相当于唯一标志了。p是平台代码。这些不难找,我就直接说了出来。
进去看看怎么加密的,然后再进去,往上翻,看到getckey = function就可以从这里开始抽离函数了。
但是但是,程序员这有个比较用心的地方,看图,case 0:的时候会调用window。都知道的,脱离了浏览器,根本没什么window。所以要关注一下这里代码,看了一下这里的代码,明显是人写的,不会是那种复杂算法。还有还有,case 3:那里(没截取到),调用了window的URL,useAgent什么的,这明显,程序员太狡猾了,我没有见过加密放这些进去的。不得不说很聪明。
有趣的是,有很多乱七八糟的字符串,我想程序员的用意是在你复制的时候,可能会导致一些编码转换错误,倒是识别成其他字符串,但是我并没有遇到
最后这个cKey生成参数也很有讲究,首先是vid,每个视频都不一样。然后是时间戳,每次都不一样。然后到开发版本,每次大更新都可能变化。然后是全局唯一标志,根据用户不同而不同。最后是平台代码,每个平台生成的都不一样,这么多不一样生成一个cKey,可以说动一发牵全身
爱奇艺的呢?太搞笑了,不用vip也能看会员视频,它不绑定登录信息,我觉得很不可思议。还有控制台的信息,输出的调试信息,看着像个女生写的。。。
热议
推荐楼 莆田郑少斌 前天19:09
看着像个女生写的
拳头嚯嚯向楼主
推荐楼 HOH 前天19:31
水平一般,那个变量名v不是指的video而是压缩时自动混淆替换掉的仅此而已
推荐楼 yousihai 昨天13:51
是吗?我见的比较少,按这样来说的话,应该也把requestVIdeoInfo也给替换了
理论上都应该替换掉,但实际上有些调用在打包时会出现打包器很难确定是否可以优化所以跳过的情况,导致原始的函数名被保留下来。
通过混淆器的话,一般很少能保留下来,就算留下来也会改成a["requestVideoInfo"]方式调用,然后把其中的字符串再次提取出来做混淆,最终变成a[_O00OoOO00]这种样子
2楼 noamwtcv 前天19:03
好!!! 鼓掌 难道的技术贴
4楼 Tankie 前天19:10
打个记号,认准大佬。
5楼 zynzcl 前天19:19
我居然看完了
6楼 yrj 前天19:24
逆向大佬牛B,正缺乏这方面的知识,学习一下
7楼 Clost 前天19:28
标记一下向大佬鼓掌
9楼 yxq4319 前天19:34
大佬牛皮,顺便问问 JS 逆向该如何入门
10楼 mmedici 前天19:36
必须支持
12楼 Faxlok 前天19:54
大佬牛皮,顺便问问 JS 逆向该如何入门
不需要入门,学js久了自然会
13楼 caicaiwuguo 前天19:58
mark一下
14楼 xiaohu 前天21:36
学习了。
15楼 weixiangnan 前天22:11
想看爱奇艺的
16楼 Oneman 前天22:19
前端没秘密可言。
17楼 zhongziso 前天23:10
技术大佬,厉害
18楼 Kevil 昨天11:04
逆向大佬牛逼
19楼 tcjj3 昨天11:24
感谢大佬的分享!
平常遇到的js,只要能用F12调试,都不困难,但是有时候会遇到类似jsjiami.com的混淆方式生成的js,动态调试获取密码表+python还原字符串,经常要跑半天
20楼 yousihai 昨天13:51
是吗?我见的比较少,按这样来说的话,应该也把requestVIdeoInfo也给替换了
理论上都应该替换掉,但实际上有些调用在打包时会出现打包器很难确定是否可以优化所以跳过的情况,导致原始的函数名被保留下来。
通过混淆器的话,一般很少能保留下来,就算留下来也会改成a["requestVideoInfo"]方式调用,然后把其中的字符串再次提取出来做混淆,最终变成a[_O00OoOO00]这种样子
22楼 xiaobaiyang 昨天14:36
逆向大佬牛B,学习一下
23楼 CMT 昨天14:47
Mac的Chrome打开腾讯视频必卡,是什么原因?好久了,不会就我一个人这样吧。。。
24楼 begin 昨天15:26
前端代码不混淆一下??
25楼 tcjj3 昨天15:27
理论上都应该替换掉,但实际上有些调用在打包时会出现打包器很难确定是否可以优化所以跳过的情况,导致原 ...
jsjiami.com用的就是类似的原理
26楼 woniu 昨天16:12
感谢大佬的分享!
平常遇到的js,只要能用F12调试,都不困难,但是有时候会遇到类似jsjiami.com的混淆方式 ...
这个不难 用AST还原就行了
27楼 tcjj3 昨天18:11
这个不难 用AST还原就行了
AST可以还原js的结构,但经常还原不了加密的字符串。那些字符串,都是通过查一个动态的表来解密的,所以每次都只能用脚本动态还原
28楼 _hostloc 昨天18:29
js逆向,给大佬鼓掌
29楼 NoctuG 昨天19:09
支持大佬,真·硬核的技术帖
30楼 longpo 昨天22:31
膜拜大佬
32楼 A1s2 昨天23:36
大佬牛逼,学到了
学到了啥
33楼 Gin_Node 昨天23:38
是吗?我见的比较少,按这样来说的话,应该也把requestVIdeoInfo也给替换了
专有名词控制流平坦化
34楼 Gin_Node 昨天23:39
这个不难 用AST还原就行了
学不会ast语法树 可能是我没有系统学过js的原因
35楼 生如风絮 6小时前
技术贴绑定
楼主的爱奇艺解析服务似乎502 Bad gateway了
36楼 trips 5小时前
37楼 theoneman 3小时前
这是不是 某音 也是用的这个加密
38楼 匿名会员 10分钟前
请问楼主可以破解ykv格式吗
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
评论前必须登录!
立即登录 注册