php文件被加密时,应先识别是否为base64/gzinflate等可逆混淆,再用脚本或php-deobfuscator工具逐层解码,或通过备份、git历史、静态替换等方式恢复原始代码。

如果您的PHP文件被加密,导致无法正常读取或执行源代码,则可能是由于恶意软件、勒索脚本或第三方混淆工具所致。以下是针对不同加密类型的解密与恢复方法:
一、识别加密类型并检查是否为可逆加密
并非所有“加密”都是真正的加密;许多PHP恶意样本使用base64、gzinflate、str_rot13等函数进行编码或混淆,这类操作通常可逆。需先确认文件中是否存在常见解码函数调用链,如eval(base64_decode(、eval(gzinflate(、assert(base64_decode(等。
1、用文本编辑器打开被加密的PHP文件,观察开头是否包含类似eval(base64_decode(或gzuncompress(的函数调用。
2、查找字符串中是否存在大量不可读字符、长base64片段(含A-Za-z0-9+/=)或重复出现的十六进制转义序列(如
立即学习“PHP免费学习笔记(深入)”;
3、若发现eval(包裹的动态执行逻辑,切勿直接在生产环境运行该文件,应在隔离环境中分析。
二、使用在线或本地base64/gzinflate解码工具还原
当确认加密层仅为base64编码+gzinflate压缩时,可通过PHP脚本逐层解包还原原始代码。此方法适用于常见WebShell或盗版程序使用的多层混淆结构。
1、新建一个临时PHP文件(如decode.php),写入以下内容:
2、将被加密的PHP文件重命名为encrypted.php,与decode.php置于同一目录。
3、在命令行执行php decode.php > decoded.php,输出结果保存为新文件。
4、检查decoded.php内容,若仍含嵌套eval,需重复执行上述步骤直至无eval包裹的编码段。
三、使用php-deobfuscator工具自动化去混淆
php-deobfuscator是一个开源命令行工具,专用于解析和还原经过多层函数嵌套、变量重命名、控制流扁平化处理的PHP混淆代码,支持识别ionCube、Zend Guard以外的自定义混淆逻辑。
1、通过Composer安装:运行composer global require jaybizzle/php-deobfuscator。
2、进入被加密文件所在目录,执行php-deobfuscator encrypted.php --output decoded.php。
3、若提示“Unsupported encoding detected”,尝试添加--force-base64或--force-gzip参数强制解码。
4、生成的decoded.php可能仍含部分变量名混乱,此时应人工核对关键函数名(如mysql_query、file_put_contents)是否恢复可读。
四、恢复被加密的原始备份文件
若加密由勒索类脚本触发且未启用实时备份机制,本地或远程备份是唯一可靠恢复途径。该方法不依赖解密算法,直接规避解密失败风险。
1、检查网站根目录同级是否存在backup_、_old、.bak、.swp后缀的PHP文件。
2、登录服务器控制面板(如cPanel、宝塔),进入“文件管理器”,查看“回收站”或“历史版本”功能是否启用。
3、检查Git仓库状态:执行git status与git log --oneline -n 20,定位最后一次未加密提交的哈希值。
4、执行git checkout <commit-hash> -- path/to/file.php</commit-hash>,将指定版本的干净文件覆盖当前加密文件。
五、使用静态字符串替换清除简单XOR或ROT13混淆
部分轻量级恶意脚本采用固定密钥XOR或ROT13对敏感字符串(如数据库密码、URL)进行混淆,不影响整体语法结构,仅使关键字符串不可读。此类混淆可通过脚本快速还原。
1、提取疑似混淆字符串:例如$a="Khoor#Zruog";,观察其是否符合ROT13特征(字母位移13位)。
2、编写临时解ROT13脚本:echo "Khoor#Zruog" | tr 'A-Za-z' 'N-ZA-Mn-za-m';,输出应为Hello#World。
3、对于XOR混淆,若已知密钥(如$k=15;),使用PHP循环逐字节异或:for($i=0;$i<strlen echo chr>。</strlen>
4、将还原后的明文字符串手动替换回原文件对应位置,替换前务必对原文件执行md5sum校验并保存哈希值。











