Q: widevine-l3-guesser
是何物?
A: 它就是近期新出的,针对widevinecdm.dll 2209版本的widevine解密key获取插件
项目地址
项目初期版本比较耗费CPU,堪比挖矿~不过新版本已经可以做到秒出key了
使用很简单,下载项目后,chrome通过加载已解压的扩展程序即可,即选择解压后的项目文件夹
随后打开使用widevine相关的视频网站,控制台就会自动打印解密key
当然也可以选择修改版,无需打开控制台就能直接复制key
以上不是重点,该项目用的eme_interception.js
对使用shaka
套件的一类网站不适用
具体原因不太清楚(不是特别了解前端的东西),总之就是一些hook失效了,Satsuoni
本人也不太清楚,毕竟他也不是做前端开发的
widevine-l3-guesser
最新版已经修复了
不过Satsuoni
提到可以在onSessionMessage_
的附近手动断点,然后调用解密的函数完成解密
具体参见
首先对可以正常使用该插件的bitmovin
进行分析
可以看到解密实际上是调用WidevineCrypto.decryptContentKey
并传入license请求体与响应体进行的解密
具体解密过程不用关心,只要知道应该传什么就可以了
在Shaka Player Demo上,通过在onSessionMessage_
下断点,可以看到这里就是请求体,不过这个时候还没有响应体
所以继续跟下去,发现在这里就是响应体
那么在这里下断点手动调用WidevineCrypto.decryptContentKey
即可
但是手动肯定很麻烦,此时可以利用条件断点一劳永逸,同时WidevineCrypto.decryptContentKey
也是全局的
那么可以添加下面的条件,这样实际上不会停在这里,因为断在这里之后又把判断条件改回去了,但同时会调用解密函数
this.injectFlag ? this.injectFlag=true : Object.defineProperty(this,"injectFlag",{get:()=>true}),WidevineCrypto.decryptContentKey(request.body, new Uint8Array(response.data)),false
如此一来对于使用shaka
套件的网站也可以方便使用了,当然不同网站可能有差异,所每个网站都需要下一次断点
条件断点的一些骚操作见文末文章
参考
- https://github.com/Satsuoni/widevine-l3-guesser
- https://www.52pojie.cn/thread-1485179-1-1.html
- https://bitmovin.com/demos/drm
- https://shaka-player-demo.appspot.com/demo/#audiolang=zh-CN;textlang=zh-CN;uilang=zh-CN;asset=https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd;panel=ALL_CONTENT;panelData=source:SHAKA,drm:WIDEVINE,DASH,MP4;build=uncompiled