记录一次破解微擎2C解密(goto解密)之旅二

记录一次破解微擎2C解密(goto解密)之旅一单if语句的因为被反向所以内部节点实际为外节点对于if内部实际只有一条或者两条语句的直接输出皆可嵌套if语句:编程过程中,语句的嵌套是不可少的,而在混淆器处理过的代码中是没有嵌套可言的,全部都是在外层存在的,在处理if过程中,加入一个节点嗅探,如果嗅探到所嵌套的节点有if语法,则让本次混淆节点再走一遍综合if解析 ([funcion parse_if_stmt])

正常stmt混淆:比如echo "hello world";会被混淆成label xxxx: echo "hello world"; goto next_label;,也就是三个语法块为一条语句,然后使用这三个语法点构成一个混淆节点,类似$tunk[] = array($label,$stmt,$goto),其他语句相同

这里还原难度最大的还是if语句的还原,以为还涉及嵌套的if。下面是if语句的语句处理点:

解析elseif语法:如果当前节点的下一个节点为if语法块,则进行elseif的还原

解析else语法:如果遇到的混淆中间节点为goto的,则认定为else语句结束点并进行结束处理。

最重要检测是否为跳点:由于混淆器内部会有多余的label进行干扰,需要构建一个跳点检测器进行跳点处理,处理foreach等loop语句的干扰节点,遇到这些节点后将跳过一个混淆节点。处理不当会无限循环

建立节点监听器:最后需要有一个语法树的traverse,你可以建立一个自己的节点监听器,监听过来的语法,然后处理如function、ClassMethod、TryCatch等节点的混淆语法树。

THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称