关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1. 需求分析
在部分混淆代码中,可以看到类似的代码:
var n = ""["concat"]("ASTPX"["replace"]("PX", ""), " is Good!");
可以看到,这是调用了String类实例的方法,并且实参均为字面量,拿到控制台运行,可以得到结果:
那该如何使用AST插件来进行还原?
2. 混淆代码
还原前:
var n = ""["concat"]("ASTPX"["replace"]("PX", ""), " is Good!");
还原后:
var n = "AST is Good!";
经过上面的还原操作后,使得代码更清晰,更利于我们做进一步的替换分析。
3. 思路
因为是函数调用并替换,所以遍历 CallExpression 比较合适,考虑到嵌套,建议采用 exit 方式进行遍历。
判断其 callee 节点 是否为 MemberExpression 类型,并且实参必须全部为字面量才行。
判断String 类实例及方法是否为字面量
分别获取上面字面量的value,本地计算出结果后构造 Literal 类型节点并替换。
4. 插件源码
https://t.zsxq.com/07RvRZVFm
大家可以通过阅读原文直达链接。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。