AST 解混淆 分析在线网址:
下载解析库:
npm install @babel/core
javascript
const fs = require('fs')
// 解析
const parser = require("@babel/parser")
// 遍历
const traverse = require("@babel/traverse").default
// 类型判断
const types = require("@babel/types")
// 解完混淆后, 生成反混淆后的代码
const generator = require("@babel/generator").default
// 读取被混淆的文件
let jsCode = fs.readFileSync("encode.js", {encoding: "utf-8"});
// 解析成 AST
let ast = parser.parse(jsCode)
// 编写插件
plugs = {
BinaryExpression(path) {
let {left, operator, right} = path.node;
if(types.isLiteral(left) && operator === "+" && types.isLiteral(right)){
let newValue = left.value + right.value;
// 创建新的节点
let newNode = types.NumericLiteral(newValue);
// 替换原有节点
path.replaceWith(newNode)
}
}
}
// 遍历ast节点
traverse(ast, plugs)
// 生成新代码
let {code} = generator(ast)
console.log(code)