第一部分 瑞数五代ast反混淆笔记一
文章目录
- 前言
- 一、分析第一层js文件
- 二、转换为switch-case
- 三、效果图
- 总结
前言
瑞数五代的反混淆做了很久了,当时写的很复杂,也没有记笔记,现在看代码都看不懂了,重新归顺下逻辑思路
一、分析第一层js文件
第一层js文件是在html页面里的,分析结构,其实是一个大数组,加几个while循环的控制流
- 大数组包含了五个数组,对应while的数量,
- 有一个起始值,就是大数组上面那个值,第一个while就是取 大数组[0][起始值] 作为控制流条件的开始
while下面的第一行代码是作为条件值的变量,来判断走哪个if分支,if语句中的条件可以得到这个变量所属的范围
如果是else语句,那么它的条件范围就 in [父节点if中条件范围] and not in [兄弟节点if中条件范围]
根据这些范围就可以得到每个语句中的变量的值应该是多少。
还有一些坑,就是一些肯定不会走到的地方,比如说
if(k > 10){
if (k == 5){
}else if(k == 4){
}else if(k == 11){
}else{
}
}
k == 11 这个语句一定是不会执行的,所以要注意这个地方,这是个无效语句
二、转换为switch-case
步骤基本是这样的:
- 首先拿到while语句中if条件中变量的名称
- 创建一个对象存储case值及对应的case语句
- 然后根据if语句中的条件范围与父节点及兄弟节点的范围来进行确认这个节点对应的条件值是多少,然后把存入上面的对象中
- 最后根据第二步的对象创建出一个switch case 节点来替换掉while下面的block节点
三、效果图
总结
while 转 switch-case