【文艺复兴】JS混淆分析实战某大学Mooc(二)解密/合并字符串
# 前文上节我们处理了内存爆破问题
然后直接提取出来解密字符串

然后写一下解密字符串代码
```javascript
traverse(ast, {
CallExpression(path) {
if (path.node.callee?.name === "b") {
if (path.node.arguments.length !== 2) {
return;
}
let first = path.node.arguments.value;
let second = path.node.arguments.value;
let str_node = types.stringLiteral(ob_func.crp_name(first, second));
path.replaceInline(str_node);
}
},
});
```
可以看到已经解开了

但是字符串还是来回拼接的
所以我们用ast给组合一下
这里直接多循环生成几次代码就好了
之所以反复parse是因为实践多次操作会导致操作乱七八糟的错误问题(不明
所以我们反复循环解析再设置
代码很简单,循环一下就ok
```javascript
traverse(ast, {
BinaryExpression(path) {
if (path.node.operator === "+") {
let left = path.node.left;
let right = path.node.right;
if (left.type === "StringLiteral" && right.type === "StringLiteral") {
let str_node = types.stringLiteral(left.value + right.value);
path.replaceInline(str_node);
}
}
},
});
```

可以看到这时候已经具备一定的可读性了

# 结语
撒花~
曲高和寡 呜呜呜
页:
[1]