/***************************************************** Module name:main.js Author:悦来客栈的老板 Date:2022.04.06 混淆工具地址:https://obfuscator.io/ 脚本仅用于被obfuscator混淆了的代码,不支持商业工具混淆的代码 声明: 脚本仅用于学习研究,禁止非法使用,否则后果自负! 使用方法可以观看在线视频: https://www.bilibili.com/video/BV16V411H7yz *****************************************************/ const fs = require('fs'); const usefulPlugins = require("./tools/usefulPlugins"); const decodeObfuscator = require("./tools/decodeOb"); //js混淆代码读取 process.argv.length > 2 ? encodeFile = process.argv[2]: encodeFile ="./input/demo.js"; process.argv.length > 3 ? decodeFile = process.argv[3]: decodeFile ="./output/decodeResult.js"; //将源代码解析为AST let sourceCode = fs.readFileSync(encodeFile, {encoding: "utf-8"}); let ast = parser.parse(sourceCode); console.time("处理完毕,耗时"); //字面量解混淆 console.log("traverse Hex or Unicode String......."); traverse(ast, simplifyLiteral); console.log("constantFold......."); traverse(ast, constantFold); console.log("delete Repeat Define......."); traverse(ast, deleteRepeatDefine); traverse(ast, SimplifyIfStatement); traverse(ast, standardLoop); console.log("resolve Sequence......."); traverse(ast, resolveSequence); console.log("traverse CallExpress To ToLiteral......."); traverse(ast, CallExpressToLiteral); console.log("constantFold......."); traverse(ast, constantFold); //object key值Literal console.log("Object Preconditioning ......."); traverse(ast, keyToLiteral); traverse(ast, preDecodeObject); //处理object console.log("Object Decode ......."); traverse(ast, decodeObject); console.log("Control Flow Decoding.......\n"); traverse(ast, decodeControlFlow); console.log("constantFold......."); traverse(ast, constantFold); console.log("remove Dead Code.......\n"); traverse(ast, removeDeadCode); ast = parser.parse(generator(ast).code); traverse(ast, removeDeadCode); traverse(ast, simplifyLiteral); //可能会误删一些代码,可屏蔽 traverse(ast, deleteObfuscatorCode); console.timeEnd("处理完毕,耗时"); let {code} = generator(ast,opts = {jsescOption:{"minimal":true}}); fs.writeFile(decodeFile, code, (err) => {});