某网站视频加密的wasm略谈

某网站视频加密的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目前还是大胆假设的过程,还没有时间进行小心求证

上一篇:c – 英特尔TBB中的任务延续


下一篇:WebAssembly 可以用来保护小程序代码吗?