关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1.混淆分析
之前写了第一步操作,还原了部分类atob函数的调用表达式,具体可以看看这篇文章:
经过这一步操作后,发现还是有非常多的函数调用表达式没有进行处理,
并且大部分实参都是字面量。由于代码太多,可以写个插件,看看实参都有哪些类型:
const ShowCallExpression = {
CallExpression(path) {
let {callee,arguments} = path.node;
if (!types.isIdentifier(callee) || arguments.length != 2)
{
return;
}
console.log(path.toString());
},
}
traverse(ast, ShowCallExpression);
打印实参后发现,有类似这样的代码:
实参里面包含了逗号表达式,逗号表达式包含了赋值语句。而在AST进行遍历的时候,无法拿到 v 和 t 具体的值,因此没办法处理 lf(v - 697, t) 这个节点。因此可以先将赋值语句进行还原,再做后续处理。
2.还原处理
为了考虑周全一点,可以将变量声明节点和赋值语句都进行还原处理,用到星球里的 这两个插件:
1.变量定义语句初始化为常量(整个作用域不改变)时的还原
https://t.zsxq.com/19zgyjPmP
2.简单赋值语句的还原。
https://t.zsxq.com/19CiT3A2O
经过这两个插件的处理后,上面的表达式变成了这样:
这个时候,又可以使用常量折叠插件进行表达式的合并:
https://t.zsxq.com/19omUnibN
再次处理后就清爽多了:
3.反混淆源码
本人的demo及代码,放在星球里,需要的请自取。
https://t.zsxq.com/xmHCH
今天的分享就到这里,感谢阅读。
欢迎加入知识星球,学习更多AST和爬虫技巧。