某网站视频加密的wasm略谈
前言
前两天朋友和我说某网站更新了新得加密,然后我就顺手去看了一下。这个托管平台的加密方案从v10、v11、v1102到现在更新到了v12版本,首先上一个数据,仅个人感觉,仅供参考。
代码层面 | 难度提升 |
---|---|
js层加密逻辑 | 10% - 20% |
wasm层加密逻辑 | 30% - 40% |
js层分析
js层中其难度的提升主要是在出现了大量的异步操作,m3u8也进行了加密,解密逻辑也放到了js层
首先是json接口的解密,和之前是一模一样的,这个就不说了。解密后拿到的是pdx后缀的链接,请求得到的是一段加密的m3u8,通过跟踪调用堆栈,可以找到如下的解密函数
function rt(e, t) {
var n;
try {
n = JSON.parse(e)
} catch (t) {
return e
}
return function(e, t) {
var n = je.util.b(ze("NTQ1ZjhmY2QtMzk3OS00NWZhLTkxNjktYzk3NTlhNDNhNTQ4#" + t).slice(1, 17))
, r = nt(e)
, i = new je.m.c(n,[1, 1, 2, 3, 5, 8, 13, 21, 34, 21, 13, 8, 5, 3, 2, 1],!0).d(r);
return je.util.convertBytesToString(i)
}(n.body, String(2 * t))
}
发现是一个标准的aes解密,解密后就可以得到m3u8文本。同时也发现了一个和之前版本的不同点,每个分片的后缀是pts,而不直接是ts了
wasm略谈
因为wasm涉及核心算法,涉及版权问题,就不深入说了。目前我想到的是有三种解密方案
方案 | 优点 | 缺点 |
---|---|---|
反汇编,通过其他语言还原逻辑 | 效率最高,不需要依赖wasm | 需要反汇编wasm动静态分析还原 |
魔改wasm二进制文件 | 不需要知道key,直接调用即可 | 需要反汇编wasm分析和修改 |
反混淆wasm返回结果 | 不需要知道key,不需要修改wasm | 需要反汇编wasm分析和还原es流 |
方案1已经使用python还原,测试了合并文件ffmpeg没有报错,视频播放不会出现花屏、卡顿等问题
方案2和3目前还是大胆假设的过程,还没有时间进行小心求证