PHP文件被加密后的解密方法与技巧汇总
时间:2026-06-10 | 作者:深海捕梦者 | 阅读:0PHP文件突然打不开、读不了源代码了?别急,先判断一下是哪种“加密”在搞鬼——可能是恶意软件、勒索脚本,也可能是某些第三方混淆工具留下的“烂摊子”。下面针对不同情况,拆解几种靠谱的恢复方法。
一、识别加密类型:先看它是不是“假加密”
很多所谓的“加密”,其实只是用 base64、gzinflate、str_rot13 这类函数做了层编码或混淆。这类操作通常是可逆的。
重点检查文件里有没有常见的解码调用链,比如 eval(base64_decode(...)) 或 eval(gzinflate(...)) 这种套娃写法。
具体操作:
- 用文本编辑器打开文件,扫一眼开头有没有
eval(base64_decode(或gzuncompress(这类函数。 - 看看文件里是不是有大量不可读字符、超长的 base64 片段(特征:字母数字+/=),或者反复出现的十六进制转义序列(比如
被转义)。 - 如果发现
eval(包裹的动态执行逻辑,千万别在生产环境直接跑这个文件——一定要在隔离环境里分析。
二、base64/gzinflate 解码:自己动手解包
确认只是 base64 + gzinflate 这层包装的话,写个简单的 PHP 脚本就能逐层还原。这种方法对付常见的 WebShell 或盗版程序的多层混淆特别管用。
步骤:
- 新建一个临时文件
decode.php,内容如下(核心逻辑就是匹配 eval 里的编码串并解码):
- 把被加密的文件重命名为
encrypted.php,和decode.php放同一目录。 - 命令行执行
php decode.php > decoded.php,结果保存为新文件。 - 检查
decoded.php:如果里面还有嵌套的 eval,那就重复执行上面的步骤,直到没有 eval 包裹的编码段为止。
三、开源工具 php-deobfuscator:自动去混淆
如果手动拆包太麻烦,可以用专门的去混淆工具。php-deobfuscator 是个命令行工具,专门处理多层函数嵌套、变量重命名、控制流扁平化这类操作(ionCube 和 Zend Guard 除外)。
用法:
- 通过 Composer 安装:
composer global require jaybizzle/php-deobfuscator。 - 进入加密文件所在目录,执行
php-deobfuscator encrypted.php --output decoded.php。 - 如果提示“Unsupported encoding detected”,试试加参数
--force-base64或--force-gzip强制解码。 - 生成的
decoded.php可能还有变量名混乱的情况,这时候人工核对关键函数名(比如mysql_query、file_put_contents)是否恢复可读。
四、备份恢复:最稳妥的路径
如果加密是勒索脚本搞的,而且你平时没有做实时备份?那本地或远程的备份文件就是唯一的救命稻草了。这个方法不依赖任何解密算法,直接绕过解密失败的风险。
需要检查几个地方:
- 看网站根目录同级有没有
backup_、_old、.bak、.swp这类后缀的文件。 - 登录服务器控制面板(比如 cPanel、宝塔),进“文件管理器”翻翻“回收站”或“历史版本”功能。
- 如果项目在用 Git,执行
git status和git log --oneline -n 20,找到最后一次未加密的提交哈希,然后git checkout,把干净的版本直接覆盖加密文件。-- path/to/file.php
五、简单混淆(XOR/ROT13)的快速还原
部分轻量级恶意脚本会用固定密钥 XOR 或 ROT13 对敏感字符串(比如数据库密码、URL)做混淆。整体语法结构没变,只是关键字符串不可读。这种反而好处理。
举个例子:看到类似 $a="Khoor#Zruog"; 的字符串,ROT13 特征明显(字母位移13位)。可以用一句 shell 命令解:echo "Khoor#Zruog" | tr 'A-Za-z' 'N-ZA-Mn-za-m',输出来就是 Hello#World。
如果是 XOR 混淆,且已知密钥(比如 $k=15;),写个 PHP 循环逐字节异或就行。还原后的明文字符串手动替换回原文件对应位置,替换前务必对原文件做 md5sum 校验并保存哈希值,以免手误。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- PHP创建数据库的SQL语句教程
- 时间:2026-08-23
-
- PHP安全替换配置文件内容的方法与实战技巧
- 时间:2026-08-20
-
- PHP后台管理系统开发从入门到精通实战指南
- 时间:2026-08-19
-
- PHP中如何验证含星号通配符的括号字符串是否有效
- 时间:2026-08-18
-
- PHP中如何验证带星号通配符的括号字符串是否有效
- 时间:2026-08-18
-
- PHP中按分号分割含嵌套分号的多条SQL语句方法
- 时间:2026-08-18
-
- PHP循环中下拉框选项变更事件绑定方法及键盘导航支持
- 时间:2026-08-18
-
- PHP表单提交多个选中月份并显示对应数据的方法
- 时间:2026-08-18
精选合集
更多大家都在玩
大家都在看
更多-
- 为什么湿头发更容易断裂 蚂蚁庄园今日答案9.15
- 时间:2026-09-14
-
- 蚂蚁庄园今天答题答案2026年9月15日
- 时间:2026-09-14
-
- 蚂蚁庄园答题今日答案2026年9月15日
- 时间:2026-09-14
-
- 蚂蚁庄园小课堂2026年9月15日最新题目答案
- 时间:2026-09-14
-
- 小鸡答题今天的答案是什么2026年9月15日
- 时间:2026-09-14
-
- 蚂蚁庄园每日答题答案2026年9月15日
- 时间:2026-09-14
-
- 糖尿病患者禁食所有含糖食物吗 蚂蚁庄园今日答案9月15日
- 时间:2026-09-14
-
- 2026年9月14日蚂蚁新村答案
- 时间:2026-09-14