ob混淆的特征
大数组+位移函数+解密函数,多个位置多次调用解密函数。
写AST
自执行函数如果带参数的都会有个加载器,我们看看兄弟节点有啥用吧。
这些setCookie这类的只是为某个obj的属性。只需观察这些函数里面有没有啥实参。
对这个自执行的函数来说,全局的变量只有这么两个_0x1032, 0x1a7
,就围绕这两个看看。
这两个实参到这个函数里是_0x263f33,_0x270f13
.
JS的函数的参数是啥传递。
也就是说,如果不通过属性来修改对象的值,那都不影响实参!!!
我们来看看这个函数里有哪里用到了实参。
只有这一处使用到了实参,数组实参只有加载器用到。
步进看看该函数是干啥的。
执行的函数是加载器,加载器的作用也只是为了执行参数而已。也就是说,其实整段代码其实也就只有++那段有用。
也就是这段。只需把函数名改为加载器的函数名,参数改为形参的参数名即可。
我们可以手动删掉,也可以通过AST来删。这里我们来用AST。
接下来我们来分析一下解密函数。
我们看到用到_0x270f13
只有一处。
再看rc4这函数是啥。
保留了以上提到的,后面这里===undefine处,仅仅只需保留
该处即可。
控制流平坦化
像这种通过switch和while来混淆代码的执行顺序,既是控制流平坦化,这类的代码比较麻烦,不过可以看看极验那块的代码,那块的控制流平坦化比ob混淆的要好些,这个相对简单,直接附上代码。
1 | const decode_while = { |
完整代码:
1 | /*********************************************************** |