eval(gzinflate(base64_decode( php代码解密方法

本文探讨了如何应对网站遭遇的PHP挂马攻击,重点介绍了如何通过循环解密技术反解eval(gzinflate(base64_decode()))类型的加密代码,提供了一个自定义的解密函数,并分享了防止恶意挂马的几点建议,如权限控制和代码修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天网站被人入侵了,一查被上传的php文件内容,发现有 eval(gzinflate(base64_decode(‘XXXXXX’)));此类代码,自己就想查一下代码到底执行了哪些操作。

首先去掉eval()函数,echo打印一下原始代码,结果发现还是类似这样的代码,原来这玩意不简单呀。

那么这些加密是怎么做到的。其实也没什么的,就是循环N次使用gzinflate压缩代码而已,我们需要通过多次循环把代码反解出来即可,由于人工操作循环的效率太差,于是写个函数处理吧。

#解密函数
function decode($str)
{
    $maxTimes = 1000; //最大循环解密次数
    $matches = [];
    for ($i = 0; $i < $maxTimes; $i++) {
        $arr = preg_split('/\r\n|\r|\n/', $str);
        $match = false;
        foreach ($arr as $s) {
            if (preg_match('/eval\((gzinflate\(base64_decode\([\'\"]([\w\/=+]+)[\'\"]\)\))\)/', $s, $matches)) {
                ob_start();
                eval('echo '.$matches[1].';');
                $str = ob_get_clean();
                $match = true;
                break;
            }
        }
        if (!$match) {
            break;
        }
    }
    return $str;
}

#使用方法(xxx.php 代表挂马文件)
$string = file_get_contents("xxx.php");
echo decode($string);

总结:防止被别人挂马,尽量少给php权限,主要有以下几点。
1、php-fpm进程不要以root用户启动,创建一个无任何权限的用户启动;
2、项目代码目录的权限尽量不给php进程用户;
3、mysql数据库不要空密码;

当然,能找到漏洞的代码修复就更好了。

关于PHP,eval、gzinflate、base64_decode函数相关的挂马代码反解就是这样了。发现网上的其他转载的代码解密并不适用,或者执行有问题,于是自己就重写了这个解密函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值