php是一种解释型脚本语言.与编译型语言不同,php源代码不是直接翻译成机器语言.而是翻译成中间代码(OPCODE),再由解释器(ZEND引擎)对中间代码进行解释运行.
在php源代码的保护在原理可以分为3大类.
源代码混淆(编码)
OPCODE混淆(编码)
修改解释引擎(虚拟机)
在部署上可以分为2大类.
无扩展
有扩展
下面分析下各种加密方案的实现方法
PHP加密方案分析无扩展方案源代码混淆
无扩展的加密在一些小开发者比较常见。这种源代码保护方式侵入性小,无需对服务器做额外的配置,兼容性较强。
这种情况混淆后的源代码还原非常简单,可完全还原出源代码。有时连注释都会保留(x我觉得这种混淆都不能称之为加密基本流程压缩代码-混淆变量函数类名-使用简单函数和方法进行编码加密例:base64异或
或私信回复“资料”获取手工解密
看到这种的php不要慌这种处理后的文件解密流程的变量和函数名使用了大量的非打印字符按照正常的流程就可以ctrl+alt+l快捷键格式化代码(这里使用的PhpStorm其他IDE格式化遇到特殊符号可能出问题这里提前调整好了文件编码)
这里有一个php的特性php中的base64遇到非base64表中字符会直接忽略不会影响解码注:PHP7遇到空字符可能会抛出error可以使用php5.6执行(这里有一个兼容性问题)遇到这种加密最简单的方法就是找文件中最后一步执行的函数直接把内容打印出来这种编码方法最后一步肯定要使用eval执行还原后的php代码所以打印最后一个函数基本上php代码就会全部出来(x前面操作一大顿毫无卵用注:有保护方案也使用了call_user_func或call_user_func_array间接调用eval
成功还原源代码?phpphpinfo();?
自动化通用解密
PHP提供了强大的扩展功能可以直接通过编写php扩展hookeval相关函数获取执行的源代码HOOKphpzend引擎的zend_