您现在的位置是: 网站首页> 学习笔记> JS逆向 JS逆向

ast规范js for循环,补全大括号

2022-08-09 [JS逆向] [ast] 2993人已围观

尝试使用AST解混淆,发现在js中经常有for循环不加大括号的写法,如:

for (var i=0; i<10086; i++)
  console.log(6666666);

这里只是打印输出的一行代码,在js逆向中,经常看到的是for后面接一大堆逗号表达式, 这时间如果我们直接去还原逗号表达式的话很容易出错,所以我们需要先规范一下for循环的写法,即给它加上大括号, 将上述代码转换成如下样子:

for (var i=0; i<10086; i++){
  console.log(6666666);
}

需要转换的地方很多,我们不可能手动去做转换,所以借助AST进行还原转换操作, 具体操作如下代码:

const fs = require('fs');
const {parse} = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const types = require("@babel/types");
const generator = require("@babel/generator").default;

let jscode =
`
for (var i=0; i<10086; i++)
  console.log(6666666);
`;

// let jscode = fs.readFileSync('./codetest.js',{encoding: 'utf-8'});
let ast = parse(jscode);

const visitor =
    {
        ForStatement(path)
        {

            //遍历for语句
            const { init, test, update, body } = path.node;

            if(types.isBlockStatement(body)){
                return;
            }
            let ss = types.ForStatement(init, test, update, types.blockStatement([body]))
            path.replaceWith(ss)
        },
    }

traverse(ast,visitor);
let {code} = generator(ast);
console.log(code);

******************************************/

输出的结果:

"C:\Program Files\nodejs\node.exe" D:\codes\fm\AST\规范for-while循环.js
for (var i = 0; i < 10086; i++) {
  console.log(6666666);
}

Process finished with exit code 0

文章评论

#2023-10-12 20:43 @ LIxpJAZNF:

Гў Carol DkVjSoOVrOWaA 5 20 2022 <a href=https://tadalafi.cfd>cialis 5mg best price</a> Penicillamine Lipid lowering agents including statins and HMF CoA reductase inhibitors Anticonvulsants Bacillus Calmette GuГ©rin BCG administration and other immunisations

添加评论





本栏推荐

站点信息

  • 建站时间:2021-01-01
  • 网站程序:Django 3.1.2
  • 文章统计:50篇
  • 文章评论:30条
  • 统计数据