瑞数五代ast反混淆笔记二

第一部分 瑞数五代ast反混淆笔记一
第二部分 瑞数五代ast反混淆笔记二


文章目录

  • 前言
  • 一、分析思路
  • 二、轨迹合并思路
  • 三、避免重复调用一个轨迹
  • 四、自己调用自己所在的函数
  • 五、语句中包含if的处理
  • 六、语句中包含try的处理
  • 七、节点中包含影响自身值的操作
  • 总结


前言

当if转为switch后,就要对switch-case节点进行节点合并了,这样才能保证更便捷的分析处理代码


一、分析思路

如果要合并代码,那我们要知道代码的运行轨迹是怎样的,因为while下面的代码中,条件变量的值是会改变的,每次取得下标会递增,在语句中还会赋值加减瑞数五代ast反混淆笔记二_第1张图片
所以可以创建一个对象,然后把每次的运行轨迹存起来,然后通过fiddler替换响应,页面执行后,就可以得到它的轨迹流程了瑞数五代ast反混淆笔记二_第2张图片

当地一层页面加载完成后,将轨迹复制出来
得到了运行轨迹,还有转化好的switch-case语句,然后开始轨迹合并

二、轨迹合并思路

根据while节点一个一个处理

  1. 找到while节点
  2. 取出之前保存好的该while节点对应的轨迹
  3. 根据轨迹构建case节点,直到return证明节点创建完毕
  4. 整合所有创建好的switch-case节点,替换while节点瑞数五代ast反混淆笔记二_第3张图片

三、避免重复调用一个轨迹

例如轨迹是这样的
[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节点瑞数五代ast反混淆笔记二_第4张图片

五、语句中包含if的处理

六、语句中包含try的处理

七、节点中包含影响自身值的操作

总结

你可能感兴趣的:(爬虫,javascript)