// ast逆向还原模板
//-------------- 所需解析库 -----------------------
const parser = require("@babel/parser")
const traverse = require("@babel/traverse").default
const t = require("@babel/types")
const generator = require("@babel/generator").default
const fs = require("fs")
//-------------------- 写自己的解析逻辑函数 start ----------
// 删除节点中的extra属性(二进制、Unicode等编码 -> utf-8)
function replace_unicode(path) {
let node = path.node
if (node.extra === undefined)
return
delete node.extra
}
.............//使用时删除写逻辑
//-------------------- 写自己的解析逻辑函数 end ----------
// 需要解码的文件位置
let encode_file = "sources.js"
// 解码后的文件位置
let decode_file = "sources_decode.js"
// 读取需要解码的js文件, 注意文件编码为utf-8格式
let jscode = fs.readFileSync(encode_file, {encoding: "utf-8"})
// 将js代码修转成AST语法树
let ast = parser.parse(jscode)
const visitor = {
//..........写自己的解析逻辑函数 重点 如
StringLiteral: {
enter: [replace_unicode]
},
.............//使用时删除写逻辑
}
// 遍历语法树节点,调用修改函数
traverse(ast, visitor)
// 将ast转成js代码,{jsescOption: {"minimal": true}} unicode -> 中文
let {code} = generator(ast, opts = {jsescOption: {"minimal": true}})
// 将js代码保存到文件
fs.writeFile(decode_file, code, (err) => {
})