前面一篇文章 AST解混淆之处理数值与字符串 介绍过unicode或者utf8编码的字符串还原的方法,但是如果这个字符串是中文,这个方法并不会奏效,比如有下面这段代码:
1
| var a = "\u4f60\u597d\u0041\u0053\u0054";
|
经过前面的插件处理之后,结果为:
1
| var a = "\u4F60\u597DAST";
|
可以看到unicode编码的中文并没有还原。
要想还原unicode编码的中文,必须用到generate函数有个 options选项
,下面是这个选项能完成的功能:
图片
所以修改我们的插件代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| const fs = require('fs');
const parser = require("@babel/parser"); const traverse = require("@babel/traverse").default; const types = require("@babel/types"); const generator = require("@babel/generator").default;
if (process.argv.length < 4) { console.log("Usage: node ${file}.js ${encode}.js ${decode}.js"); process.exit(1); }
let input_file = process.argv[2], output_file = process.argv[3];
let jscode = fs.readFileSync(input_file, {encoding: "utf-8"});
let ast = parser.parse(jscode);
const visitor = { StringLiteral({node}) { if (node.extra && /\\[ux]/gi.test(node.extra.raw)) { node.extra = undefined; } }, }
traverse(ast, visitor);
let {code} = generator(ast, opts = {jsescOption:{"minimal":true}}); fs.writeFile(output_file, code, (err)=>{});
|
运行结果:
https://raw.githubusercontent.com/lyy077/blg-pic/main/pic/WX20220630-201530.png
Last updated:
关注微信公众号~~逆向一步步~~,第一时间获取更新文章的推送
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!