JavaScript | 优酷视频自研DRM密钥获取

前言

优酷在视频加密的路上一直走在前列……

 

之前DRM对License进行过一次升级,导致较新版本的浏览器都无法直接获取DRM密钥,目前DRM加密视频可以通过老版本浏览器搭配插件获得。

 

而近期优酷又对自研加密进行了迭代,好在算法并没有什么改变,依然可以搭配Nilaoda的老版本下载器进行解密下载,只不过网页端获取自研加密的密钥方式有了变化。

 

javascript:prompt(function sha1_to_base64(sha1){var digits=”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;var base64_rep = “”;var cnt = 0;var bit_arr = 0;var bit_num = 0;for(var n = 0; n < sha1.length; ++n){if(sha1[n] >= ‘A’ && sha1[n] <= ‘Z’){ascv = sha1.charCodeAt(n) – 55;}else if(sha1[n] >= ‘a’ && sha1[n] <= ‘z’){ascv = sha1.charCodeAt(n) – 87;}else{ascv = sha1.charCodeAt(n) – 48;}bit_arr = (bit_arr << 4) | ascv;bit_num += 4;if(bit_num >= 6){bit_num -= 6;base64_rep += digits[bit_arr >>> bit_num];bit_arr &= ~(-1 << bit_num);}}if(bit_num > 0){bit_arr <<= 6 – bit_num;base64_rep += digits[bit_arr];}var padding = base64_rep.length % 4;if(padding > 0){for(var n = 0; n < 4 – padding; ++n){base64_rep += “=”;}}return base64_rep;};var s=””;for(var i=0; i<16; i++){if(window.D.player.drmController.agent.decodeKey[i].toString(16).length==1){var st=”0″+window.D.player.drmController.agent.decodeKey[i].toString(16)}else{var st=window.D.player.drmController.agent.decodeKey[i].toString(16);}s+=st};prompt(“DRM KEY”, sha1_to_base64(s.toUpperCase()))

PS

既然优酷进行了迭代,就说明优酷在想办法隐藏js中的密钥,至少不可能像这样明文提供。

 

事实上之前优酷就已经对自研密钥进行过一次迭代,更新了相关的js版本号,只不过彼时还可以通过使用老版本js用老方式获取自研密钥,而这次是直接取消了老版本,强制使用新版本js文件。

 

也许某一天,随着优酷再一次js迭代,或者彻底改变自研加密的算法,那可能就真的没办法了……

《JavaScript | 优酷视频自研DRM密钥获取》上有4条评论

  1. 博主,这个书签好像有很多中文符号和缺少一些左右小括号或者大括号,能更新一下不?辛苦了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注