【AST 还原】三、还原 unicode 与 十六进制 字符串

例子

// 还原前
((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 => {
}))
发表评论 / Comment

用心评论~