【AST 还原】三、还原 unicode 与 十六进制 字符串 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:21")}}更新例子
// 还原前
((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 => {
}))
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}