引言
开发者一直有个绕不开的问题:当项目完成交付的时候,源码往往也会跟着一同交出去。
这对普通内部项目来说影响并不大。但对于商业交付、私有化部署、授权系统以及支付逻辑这类场景,问题就很现实了——客户拿到的不只是“能运行的程序”,还是你的核心实现。
所以针对 PHP 代码加密要解决的问题,并不是把代码弄乱一点,而是:
在确保代码可以正常运行的前提之下,让源码不再以明文的形式进行交付。
这次我实测的对象是代码卫士,其官网地址为https://php.x5.chat。本次测试的重点只有一个,也就是它的SG16PRO方案,能不能真正提高PHP源码保护的门槛。
先说结论:
从这次样本结果来看,SG16PRO 并不是浅层的文本混淆;它已经进入了 Loader 执行以及更深层字节码保护的路线当中。但这次的测试样本规模较小,并且没有完整覆盖目标服务器的部署验证,所以这篇文章更准确的定位,是加密效果的实测,而非完整的生产可用性报告
一、测试说明
可以先把测试的边界给说清楚。
测试对象
代码卫士平台当中的SG16PRO方案。
测试样本
一个涵盖了4个PHP文件的测试项目:
- index.php
<?php
declare(strict_types=1);
require __DIR__ . '/src/MathService.php';
require __DIR__ . '/src/TextService.php';
require __DIR__ . '/config/app.php';
use Demo\\SecurityTest\\MathService;
use Demo\\SecurityTest\\TextService;
date_default_timezone_set('Asia/Shanghai');
$math = new MathService();
$text = new TextService();
$data = [
'time' => date('Y-m-d H:i:s'),
'sum' => $math->sum(12, 30),
'factorial_5' => $math->factorial(5),
'greeting' => $text->greet('代码卫士'),
'slug' => $text->slug('PHP Code Guard Test 2026'),
'config' => $appConfig,
];
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
- app.php
<?php
declare(strict_types=1);
$appConfig = [
'app_name' => 'CodeGuardTest',
'version' => '1.0.0',
'features' => [
'namespace',
'class_method',
'json_output',
'require_include',
],
];
- MathService.php
<?php
declare(strict_types=1);
namespace Demo\\SecurityTest;
class MathService
{
public function sum(int $a, int $b): int
{
return $a + $b;
}
public function factorial(int $n): int
{
if ($n < 0) {
throw new \\InvalidArgumentException('n must be >= 0');
}
if ($n === 0) {
return 1;
}
$result = 1;
for ($i = 1; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}
}
- TextService.php
<?php
declare(strict_types=1);
namespace Demo\\SecurityTest;
class TextService
{
public function greet(string $name): string
{
return "你好,{$name}";
}
public function slug(string $text): string
{
$text = strtolower($text);
$text = preg_replace('/[^a-z0-9]+/', '-', $text);
return trim((string)$text, '-');
}
}
本次验证内容
- 上传加密流程是否跑通
- 加密后文件形态是否发生明显变化
- 是否出现 Loader 保护执行特征
- 是否具备更深层源码保护迹象
本次未完整验证内容
- 目标服务器安装 Loader 后的完整运行结果
- 不同 PHP 版本兼容性
- 大型框架项目兼容性
- 高并发场景性能损耗
- 实际抗逆向强度评估
还有一个容易引起误解的点,也提前跟大家说明一下:
它不能直接被定义为完全免费的工具。从公开的信息以及平台的使用方式来看,它采用的是赠送免费额度模式、付费升级获取优惠权益两种模式。我这次所使用的账号已经花了399元升级至最高等级获取终身免费加密权益,所以界面上显示的是0元; 这也只能表明本次操作没有产生额外的扣费情况,具体的收费情况还是要以官方实际收费为准。
二、加密流程实测
1. 上传待加密项目
直接上传 code-guard-test.zip。

从操作方式来看,这一步的门槛并不高。对于开发者而言,可以先用 ZIP 包来开展小样本测试,这比先去折腾命令行或者本地的复杂配置要更加直观。
2. 选择 SG16PRO 并开始加密
平台界面所显示所运用的是 SG16PRO 方案。
这里术语说明一下:
- 平台页面显示的是 SG16PRO
- SourceGuardian 官方命名常见写法是 SourceGuardian 16 和 SourceGuardian 16 Pro
所以本文在描述平台界面的时候,统一使用 SG16PRO;在解释底层技术来源的时候,则说明它属于 SourceGuardian 16 / 16 Pro 体系。
加密完成的弹窗当中,这次可以确认的信息包括:
- 总文件数:4
- 已加密:4
- 错误:0
- 虚拟机混淆:已启用
- 本次界面显示费用:0 元

这里的“0 元”只说明本次操作没有额外扣费的情况,不能直接等同于“平台所有功能永久免费”。
3. 下载并解压结果

到这一步,流程本身算是跑通了。 但流程通不通只是第一层,真正要看的还是:加密后的代码形态变化。
三、加密后代码长什么样呢?
1. index.php


2. app.php


3. MathService.php


4. TextService.php


从这些截图当中,可以直接确认几个关键的特征。
- 文件头出现 Protected by SourceGuardian Pro
- 出现 if (!function_exists("sg_load"))
- 如果缺少 Loader,会提示安装 SourceGuardian Loader
- 原本可直接阅读的业务逻辑不再出现
- 文件末尾变成 return sg_load("…") 的受保护执行形式
- 文件中还包含错误处理逻辑与错误码映射
这些特征足以表明:
它并非只是简单改变量名、压缩成一行、套几层编码的浅层混淆。
四、它的工作方式,不能简单地被理解成只是包了一层 sg_load
关于这一点,需要把情况说准确。
要是只看文件的尾部部分,就很容易把它理解成“代码仅仅只是包了一层 sg_load()”。 这样的理解未免太过浅显了。
结合这次加密后的文件结果,以及 SourceGuardian 官方公开资料,这类方案更准确的工作方式是:
- 先把 PHP 源码编译成字节码
- 再对字节码做进一步保护处理
- SourceGuardian Pro 官方将其中一部分能力称为 bytecode entangling
- 最终生成受保护的 PHP 文件
- 运行时由对应的 SourceGuardian Loader 负责解码并执行
运行时会由对应的SourceGuardian Loader负责去解码并且执行相关内容。
所以当文件当中出现 sg_load(“…”) 的时候,只能说明最终的执行入口是依赖于 Loader 的。这并不等同于“加密原理只有这一层包装”。
五、“虚拟机混淆”是什么意思
加密完成弹窗里有一个关键信息:虚拟机混淆已启用。
这个词要是不加以解释的话,读者基本上就看不明白。这里所讲的“虚拟机混淆”,并不是指运行了一台操作系统虚拟机,而是一种更深层次的保护思路:
针对编译后的执行指令继续开展打散、重排以及加密操作,以此让原始的执行逻辑更难被还原。
简单的理解就是:
- 不是只处理源码文本
- 而是往更底层的执行表示上继续做保护
这和SourceGuardian Pro官方所提到的bytecode entangling是一致的方向。
但也要把结论收住:
- 我可以确认这次的界面显示了“虚拟机混淆已启用”。
- 我不能只凭借这个状态,就去断言它的实际抗逆向强度到底有多高
- 要对真正的强度进行判断,还需要开展系统的逆向测试工作。
六、加密前后对比
| 源码可读性 | 直接可读 | 原始逻辑不再直接可读 |
| 业务实现 | 明文暴露 | 受保护执行 |
| 运行方式 | 普通 PHP 执行 | 依赖 Loader 执行 |
| 交付风险 | 源码直接交出 | 源码保护门槛明显提高 |
| 适用场景 | 内部开发、调试 | 商业交付、私有化部署、核心模块保护 |
从这个对比来看,SG16PRO方案的核心价值是很明确的:
让 PHP 源码退出普通明文交付的状态。
这正是 PHP 代码加密最核心的目标。
七、从这次样本看,它至少已经高于浅层文本混淆
很多所谓 PHP 加密工具,实际开展的工作只是:
- 改变量名
- 压缩代码
- 编码包装
- 让人读起来费劲
这类方案对源码保护的帮助是比较有限的。这是由于业务逻辑本质上还留存于其中,只不过是“看起来乱”而已。
而这次样本当中所出现的特征,包括:
- SourceGuardian Pro 标识
- Loader 检查
- 受保护载荷执行
- 错误处理和错误码
这些足够说明:
这次测试所运用的方案,已经明显超出普通变量名混淆或是简单编码包装的范畴。
但也不能把话说得太满。仅凭文件的外观,还不能直接证明它的实际抗逆向强度到底有多高。如果要下更强的结论,还需要补充相关内容:
- 逆向测试
- 常见解码工具验证
- 更复杂项目兼容性测试
所以更准确的说法是:
从这次的样本来看,它显然并不是最浅层的字符串混淆,不过具体的强度还需要进行更深入的验证。
八、Loader 依赖是真门槛
这点必须单独拎出来说。
SG16PRO 的运行依赖 SourceGuardian Loader。
这意味着实际交付时,开发者要面对几个很现实的问题:
- Loader 要和目标 PHP 版本匹配
- 服务器没有对应 Loader,加密代码就无法运行
- 共享主机、受限托管环境,通常不允许用户安装 PHP 扩展
- PHP 升级后,还需要重新确认 Loader 是否兼容
- 不同操作系统、架构,也要选择对应 Loader 版本
要是打算把 SG16PRO 用在商业交付当中,不能只去测试“加密成功没有”,还得提前做好确认工作:
目标服务器能不能装Loader,Loader能不能和目标PHP版本对上。
这一步不确认,后面很容易翻车。
九、平台还有另一类方案:免扩展方向
这次我实测的是SG16PRO。但从平台公开页面以及后台菜单来看,代码卫士不只有这一条路线。它还提供像SGI6组件加密这样的方向,平台公开的卖点之一是免扩展运行。
这点十分关键。因为很多项目出现停滞的情况,并不是因为“加密强度不够”,而是因为“客户服务器根本没办法安装Loader”。
不过这里我不乱下结论:
鉴于这次没有开展实测 SGI6 方案的工作,所以我只能确认平台提供了这类方向,没办法替它得出运行结论。
十、在线加密所具备的便利,以及源码所存在的隐私风险,其实是一体两面的关系。
代码卫士是一款在线平台。它所具备的好处十分明确:
- 操作简单
- 上传 ZIP 就能处理
- 对小样本测试非常方便
但代价也很明确:
你是在把源码上传到第三方平台,以此来开展处理工作。
这意味着:
- 平台理论上可以接触到你所上传的代码
- 要是项目里带有核心商业逻辑、密钥以及敏感配置的话,在上传之前就必须开展风险评估工作。
- 对于高敏感项目而言,是否接受对源码开展在线处理工作,本身就是一项需要进行决策的问题。
所以开发者要分场景看:
- 普通交付项目、通用业务模块,可以优先看效率
- 高敏感代码,更适合先评估隐私机制,或者优先考虑本地化方案
但是我觉得这一点完全可以不用担心,人家后台直接不会显示你的源代码,加密后直接返回结果,完全不用担心核心代码泄漏到第三方平台。
十一、这次测试的结论边界
这次我确认到的是:
- 文件加密流程可以跑通
- 加密后代码形态发生了明显变化
- 样本进入了 Loader 保护执行模式
- 源码退出了普通明文可读状态
但这次没有完整覆盖:
- 目标服务器运行验证
- 不同 PHP 版本兼容性
- Laravel以及ThinkPHP等框架的项目兼容性
- 闭包、反射、匿名函数等复杂特性
- 大规模生产部署稳定性
- 性能损耗数据
所以这篇文章更准确的定位,是:
PHP 代码加密效果实测
不是:
完整生产可用性验证报告
这两个概念不能混。
十二、结论
要是仅依据这次样本所能确认的内容,我的判断相当明确:
- SG16PRO 并非属于浅层的文本混淆
- 它已经被纳入 Loader 执行以及更深层字节码保护这一类方案当中。
- 针对商业交付、私有化部署以及核心模块保护这类场景来说,它确实具备相应的价值。
但我不会直接把它吹成“闭眼可上生产”。缘由也很明确:
- 样本小
- 没完整做运行验证
- Loader 依赖是真门槛
- 在线加密存在源码层面的隐私风险
- 平台还有免扩展方向,但这次没展开测试
那么可以得到的更稳妥的结论是:
要是你在寻找一类可以提高 PHP 源码交付保护门槛的方案,那么代码卫士的 SG16PRO 值得认真去测试;不过在正式上线生产环境之前,最好结合目标运行环境、项目规模以及隐私要求,再补做一轮完整的验证工作。





