例子
// 还原前 ((arr, nums) => { while (--nums) { arr["\x70\x75\x73\x68"](arr["\x73\x68\x69\x66\x74"]()); } })(arr, arr["\x6c\x65\x6e\x67\x74\x68"]); // 还原后 ((arr, nums) => { while (--nums) { arr["push"](arr["shift"]()); } })(arr, arr["length"]);
思路
unicode 与 十六进制 处理比较简单,只需要在 ast 转换成 代码时,加上几个参数就行
是否通用:是
const js_code = fs.readFileSync("./input/code.js", {encoding: "utf-8"}) let ast = parser.parse(js_code) // 代码转化为 ast // 还原 unicode 与 十六进制 let decode = generator(ast, {minified: true, jsescOption: {minimal: true}}).code // 这里一键还原了 unicode 与 十六进制,但是代码是 的 decode = generator(parser.parse(decode)).code // 再转一次 为了使代码格式化 fs.writeFile("./output/code.js", decode, (err => { }))
版权声明:《 【AST 还原】三、还原 unicode 与 十六进制 字符串 》为明妃原创文章,转载请注明出处!
最后编辑:2022-4-21 10:04:17