【AST 还原】四、还原 逗号表达式混淆

例子

// 还原前
var a, b, c;
a = 2, b = 3, c = a + b;

// 还原后
var a, b, c;
a = 2;
b = 3;
c = a + b;

思路

获取 SequenceExpression 节点,获取其中 expressions 属性,遍历生成 生成 ExpressionStatement 节点,再整体替换

是否通用:是

mark

 // 逗号 表达式 还原  a = 2, b = 3, c = a + b;
traverse(ast, {
    SequenceExpression: {
        exit(path) {
            let expressions = path.node.expressions;
            let finalexpression = expressions.pop(); // 获取最后一个,替换 当前节点
            let statement = path.getStatementParent(); // 向上遍历 找到 父节点
            expressions.map((v) => {
                statement.insertBefore(type.ExpressionStatement(v))
            });
            path.replaceInline( // 
                type.ExpressionStatement(finalexpression));
        }
    }
})
发表评论 / Comment

用心评论~