AST反混淆实战|变量被反复赋值如何还原?

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1.混淆案例

我们在还原某里或者某平台的混淆代码,会发现有类似的混淆片段:

AST反混淆实战|变量被反复赋值如何还原?_第1张图片


这里有很多 字符串 被复制给了一个变量,然后这个变量再被其他代码引用。

这不是 "多此一举"嘛? 

这种混淆被还原后,应该是下面这样

AST反混淆实战|变量被反复赋值如何还原?_第2张图片

写个插件将其还原。

2.还原思路

  1. 这里是赋值语句的还原,所以遍历的类型是 AssignmentExpression。

  2. 条件过滤,发现其父节点是 ExpressionStatement 类型,其 left,operator,right 节点均有特征。

  3. 无法简单使用binding 来进行还原,因为它的 left 子节点 会经常的变动,被赋予不同类型的值。

  4. 通过 getAllNextSiblings 方法获取其父节点的所有后续节点,然后判断这些后续节点是否包含有 left 子节点的binding

  5. 设计一个 getNextSiblingType 函数,用来判断 后续节点 是否包含 left 子节点的 binding。

  6. 设计一个 isPathCanRemoved 函数,用了判断该赋值语句被还原后,是否可以被删除。

完整代码请看星球:

https://t.zsxq.com/15FwvFkn3

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

AST反混淆实战|变量被反复赋值如何还原?_第3张图片

欢迎加入知识星球,学习更多AST和爬虫技巧。

你可能感兴趣的:(AST反混淆实战|变量被反复赋值如何还原?)