破解2C(goto混淆)解密之旅

最近有朋友找我修复小程序的功能,接到文件浏览了一遍,原来是goto混淆,最后我是拒绝了解密。
这种加密方式已经不是第一次见了,以前也有很多人找我弄过这种,当时也尝试过去还原,捣鼓了3天左右,不得不说这种加密看起来很简单,其实还原起来非常吃力,第一次解密以失败告终。后来遇到这种加密的单子也是直接拒绝了,因为太难了,如果按照当时的见识和技术去研究的话,直到解密完成起码要花1-2个月,而且解密这种文件顶多也就收四、五块钱一个,所以没有必要浪费这么多时间去研究。
不过拒绝这个单子后回想,以前看过一些在线的解密,所以过后考虑一天,决定研究去解密。
讲解goto加密之前先上几张样本图:

在这里插入图片描述

经过研究,这种混淆器的混淆点和解决办法主要分以下几点:

if($code){
echo 'code';
}
//反向解密
if(!$code){
echo 'code';
}

单纯的if语句:这种单一存在的语句在混淆器中处理后,其中的condition会被反向 也就是条件反向的处理,所以处理if语句前需要遍历一次语法树进行condition的反向还原,即de_cond

复杂的if语句:比如if…else…和if…elseif…else等,这种if语句的处理只需正常处理即可

解析elseif语法:如果当前节点的下一个节点为if语法块,则进行elseif的还原if 下一个节点也是为 if 使用if-elseif拼接

//加密混淆代码
goto ZLIN5; xuT32: GkJl9: goto z0Q1l; qz2Od: echo "\347\254\xac\xe4\xba\214\344\xb8\xaa\151\146"; goto bm5cx; bm5cx: iMbaq: goto wnxep; RqBXL: if ($LDzsz == "\x31") { goto GkJl9; } goto Qx9
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值