地址 : aHR0cHM6Ly93d3cuNWR5NS52aXAvdm9kcGxheS85MTA5Ny02LTEuaHRtbA==
一.分析执行流程🤭
1.干掉debugger反调试
首先打开f12后 进入上面的地址,会出现如下的情况
这里我采用最简单的方案干掉他,点击这个忽略断点,就不会进入此debug,但是会有另一个问题 ,就是cpu使用率是变高,但是因为我们只分析执行流程,找到关键的js,所以这里就无所谓了
2.分析谁发起了index.m3u8
的调用
我这边因为分析过多次,发现每次再请求.m3u8之前,都会有一次webscoket的请求,那么断定websocket一定是非常重要的
其实在这里我们已经拿到了m3u8的视频地址,但是只拿到m3u8的地址不是咱们的目的。
当我们点击上图右边蓝色链接进入这个main.js的这个js文件中发现,他是加密的如下图
其实也可以侧面的反应出,我们的推断是没错的。 如果不是非常重要的东西,他基本不可能加密
3.不正常的代码
二.还原代码😅
我们将main.js的代码复制下来,然后开始进行还原,我是复制了两份一份是没有格式化的代码,另一分是格式化过的代码。
1.环境问题
2.大致分析一下js代码
我们可以看到整个_0x3a74
这个函数一共有1041个之多,说明这个函数就是解密字符串的重要函数
3.抽取解密函数
4.第一次还原
4.1 还原代码如下
const parser = require("@babel/parser");
const template = require("@babel/template").default;
const traverse = require("@babel/traverse").default;
const t = require("@babel/types");
const generator = require("@babel/generator").default;
const path = require("path");
const fs = require("fs");
const {decryptStr,decryptStrFunName } = require("E:\\desktop\\2\\decrypt.js");
let filepath = "e:/desktop/main.js";
fs.readFile(filepath,{"encoding":"utf-8"},function(err,data) {
const ast = parser.parse(data);
step(ast);
let {code} = generator(ast);
fs.writeFile("e:/desktop/main1.js",code,err => {
if(err) throw err;
console.log("保存成功");
});
});
function step(ast) {
traverse(ast,{
CallExpression: ObjToStr,
})
}
function ObjToStr(path) {
let node = path.node;
&nbs
支付6UD,阅读全文
还有更多的精彩内容,作者设置为付费后可见