第一部分 瑞数五代ast反混淆笔记一
第二部分 瑞数五代ast反混淆笔记二
文章目录
- 前言
- 一、分析思路
- 二、轨迹合并思路
- 三、避免重复调用一个轨迹
- 四、自己调用自己所在的函数
- 五、语句中包含if的处理
- 六、语句中包含try的处理
- 七、节点中包含影响自身值的操作
- 总结
前言
当if转为switch后,就要对switch-case节点进行节点合并了,这样才能保证更便捷的分析处理代码
一、分析思路
如果要合并代码,那我们要知道代码的运行轨迹是怎样的,因为while下面的代码中,条件变量的值是会改变的,每次取得下标会递增,在语句中还会赋值加减
所以可以创建一个对象,然后把每次的运行轨迹存起来,然后通过fiddler替换响应,页面执行后,就可以得到它的轨迹流程了
当地一层页面加载完成后,将轨迹复制出来
得到了运行轨迹,还有转化好的switch-case语句,然后开始轨迹合并
二、轨迹合并思路
根据while节点一个一个处理
- 找到while节点
- 取出之前保存好的该while节点对应的轨迹
- 根据轨迹构建case节点,直到return证明节点创建完毕
- 整合所有创建好的switch-case节点,替换while节点
三、避免重复调用一个轨迹
例如轨迹是这样的
[16,8,6,1,9,2,7,5,3,1,9,2,7,5,3,4,12,…]
可以看出 1,9,2,7,5,3, 调用了两次,其实 1 就是一个起始case节点, 如果这样的话就要忽略掉
case 1:
1节点内容;
9节点内容;
2节点内容;
7节点内容;
3节点内容;
return
所以一个节点创建了就不要重复再进行创建;
四、自己调用自己所在的函数
调用自身函数的时候,节点就要创建一个新的,如下图,就需要创建一个 case 8 节点,可以使用正则判断语句内是否包含本身函数并且传入了值,然后在进行创建case节点