分支流程判断
上一章讲到,我们已经将
if (_0x1468d1['KYTBP']('OWFLT', _0x1468d1['imVvW']))
替换为
if ('OWFLT' !== 'OWFLT')
这篇内容的分支流程判断就是这里,可以很明显的看到
可以看到'OWFLT' !== 'OWFLT'必定为假,那么真部分的代码就是永远不会执行的,相当于废代码,而实际有用的就是假部分的代码
接着就是复制一段代码做语法分析
例如下面的代码
if ('JOSTK' !== 'JOSTK') {
function _0x74959b() {
var _0x25def5;
try {
_0x25def5 = capJun['YwhOk'](_0x87e8de, capJun['JnPpa'](capJun['nUheI'](capJun['EXptI'], capJun['NiQEl']), ');'))();
} catch (_0x8fd90a) {
_0x25def5 = _0x4844c7;
}
return _0x25def5;
}
} else {
if (_0x17aefa) {
var _0x46d4c7 = _0x17aefa['apply'](_0x502843, arguments);
}
}
这里可以看到这是一个IfStatement的节点,这个节点下有三个子节点,分别为test(判断的内容),consequent(真时执行的代码),alternate(假时执行的代码)
知道这些之后,就可以和之前一个递归遍历所有节点,找到节点的类型是IfStatement。再判断test里面是不是字符串比较,也就是之前说的类型是BinaryExpression,都符合的话,说明这个节点就是需要替换的节点。
然后获取符号以及符号左右的值,通过python判断结果是真还是假,分别替换为consequent或者alternate即可。第三步是所有步骤里面最简单的一步。
运行替换后格式化一下代码
这里可以看到,前面的if判断都被反混淆掉了
备注:源文件见最下方附件内的ob_step3.txt
|