PHP 8.x · Rust 加载器 · Web + CLI · Linux / Unix

卖你的 PHP 程序。
不用连源代码一起卖。

BinaryPHP 用 AES-256-GCM 把你的商用 PHP 代码加密、 每个文件配独立密钥,再帮你绑定 域名或 MAC、加上到期日——所有解密过程都交给一个 极轻量的 Rust 加载器透明完成。每季更新密钥、永久向下兼容, 破解成本远高于正版授权费。

1. 在线编码 2. 客户安装 3. 加密执行
# 到 binaryphp.com/encode/ 上传文件、填好授权资料:

  域名: acmestore.com, *.acmestore.com
  到期: 2027-12-31
  名称: acme-pro

# 输入  →  plugin.php          (你写的源代码,~40 KB)
# 输出  →  plugin.php          (加密后,~41 KB 二进制内容)

# 文件名、扩展名都不变——可以直接覆盖原文件,调用的地方完全不用改。
# 加载器靠 5-byte "BPHP2" 魔术头识别文件,跟扩展名无关。
# 主密钥一直放在我们服务器,你拿到的只有加密后的成品。

PHP 没有编译这回事。
对卖程序的人来说,这是个大问题。

客户就是你的竞争对手

客户下载你的 .zip 那一刻,你写的每一行 PHP 他都能拿去抄、改、转卖。

授权码根本挡不住

源代码直接摊在那边,几分钟就能把授权检查整段去掉。没有代码层的保护,授权只是个开关,不是一道墙。

你的心血散在别人硬盘上

客户一下载完,你的知识产权就散落在共享主机、VPS、CI 机器各处——你看不到、管不到,一行 tar -xzf 就全挖出来。

运作方式

1

上传

.php 文件或整包插件 .zip 拖到我们的在线编码器,设置要绑的域名、MAC、到期日就好。主密钥一直放在我们这边——你完全不用操心保管的事。

2

分发

下载加密好的文件。每个文件配一份独立的 16-byte salt 跟 HKDF-SHA256 派生密钥;只要被改过任何一个 byte,GCM 校验就会失败、拒绝执行。

3

加载

客户在 php.ini 加一行 extension=binaryphp.so。加载器接到 PHP 的编译流程,在内存里解密、验证授权(看域名 SERVER_NAME / HTTP_HOST 或 CLI 环境的 MAC),最后把明码直接喂给 Zend Engine。

内置功能

🔐 AES-256-GCM

NIST 标准的认证加密。文件被改一个 byte,GCM tag 就过不了、直接拒绝执行。

🧂 每文件独立密钥

每个加密文件配独立 16-byte salt,再用 HKDF-SHA256 派生出该文件专属的密钥。每个文件各自密封,互不影响。

🛡️ 核心函数跑自家 VM

#[binaryphp\Protected] 的函数会编译成我们自家的 bytecode——不是 PHP,也不是 Zend opcode。运行时由加载器直接解释执行,算法不会以源代码形式落到客户硬盘上。

🌐 多域名授权

一张授权可以列多个主机名或通配符(*.example.com),任一匹配就放行。

🔌 绑 MAC 地址

CLI 工具、cron job 这种非 HTTP 环境:直接把授权绑到客户机器的 MAC(读 /sys/class/net)。

⏳ 到期日

发布有时效的版本(试用、订阅、发布周期)都行。加载器会拿系统时钟对照文件内嵌的时间戳。

⚙️ 标准 PHP 扩展

php.iniextension= 加载。PHP-FPM、mod_php、CLI、FrankenPHP 都支持。

🪶 加载器很轻

单一 ~2.0 MB stripped .so(已含字节码 VM 跟 cranelift JIT)。每文件解密耗时不到 1 毫秒。

🔁 没加密的文件不受影响

普通 .php 文件照样正常编译——加载器只拦截带 BinaryPHP 魔术头的文件,其他完全不碰。

性能:加密几乎不要钱

加载器挂在 zend_compile_file 上,每个 PHP 进程、每个文件只解密一次。 编译成 Zend opcode 之后,执行速度跟普通 PHP 完全没差别。 开了 OPcache 之后,连那一次解密都会被缓存摊平。

100 万次热循环跑分(for + % + 累加) · 条越短越快 · 基准是原生 PHP
原生 PHP
88.6 ms
1.0×
binaryphp-rs
89.5 ms
1.0×
binaryphp-vm + JIT
~115 ms
1.3×
binaryphp-vm 解释
197.6 ms
2.2×
原生 / .bphp 全文件加密 #[Protected] · cranelift JIT #[Protected] · 纯解释
工作负载 原生 PHP binaryphp-rs
(.bphp · 全文件加密)
binaryphp-vm
(#[Protected] · 字节码 VM)
函数内 100 万次热循环(for + % + 累加) 88.61 ms ± 0.95 89.48 ms ± 3.08 ~115 ms(JIT) · 解释 197.56 ms
冷启动 — 小文件(~220 B) 56.05 ms ± 1.62 56.46 ms ± 1.34 ~bphp (只是 stub,函数还没被调用,VM 不启动)
冷启动 — 10 KB 文件(200 个函数) 57.14 ms ± 1.33 57.09 ms ± 1.57 ~bphp (VM 成本算在调用,不算在加载)
OPcache 稳态 跟原生一样 跟原生一样 每次调用额外开销
原生 ≈ binaryphp-rs(差距在误差范围内)。 binaryphp-vm 热循环约慢 1.3 倍(cranelift JIT 已优化整数热路径) — 换来字节码级的保护:就算主密钥泄露,函数内容一样看不到。

测量于 2026-05-05,使用 hyperfine,每组数据跑 30 次。 环境:Debian 12(kernel 6.5)+ PHP 8.2.30 + Rust 1.95.0、 Intel Xeon E5-2680 v4 @ 2.40 GHz(binaryphp.so 548 KB, release + LTO 构建)。每次 include 的解密成本约等于 文件大小 / 1 GB/s(AES-NI 硬件加速),再加 ~50 µs 的 HKDF 跟授权检查。 VM 执行成本与字节码指令数成正比。 编译器的 peephole 优化($x++$x += k$x = $x + e、slot-vs-slot 整数比较、$x * immx % imm)已经把热循环成本从 ~5× 压到 ~2.5×,做法是把 LoadVar / StoreVar 的栈操作合并成单一 op。

VM 语言覆盖率: 面向对象(类、extendsabstractinterfacetrait + usestatic、类常量、$thisparent::self::、magic __construct / __get / __set / __call); 闭包 function () use (…) 与 箭头函数 fn () => exprtry / catch / finally / throwmatch=== / !==???:<=>instanceof; lazy / coroutine 生成器(yield 采 frame snapshot & resume — 无限生成器可用,只有实际被消费的值才会被计算); 完整的 for / while / foreach / switch / break / continue; spread ...$args; 引用 &$x(函数参数与内置如 array_push / sort 都支持); global;heredoc / nowdoc; 约 50 个内置函数(strlencounttrimexplodeimplodesprintfmd5sha1base64_encode/decodearray_* 等); #[Protected] 可标注在类方法上,$this->prop 读写会在 PHP 与 VM 间自动同步;cranelift AOT JIT 优化整数热循环。

怎么选:整包发布直接用 .bphp(binaryphp-rs)就好 — 跟原生 PHP 的速度差距已经测不出来。#[Protected](binaryphp-vm) 留给敏感的函数 — 授权验证、密钥派生、防篡改逻辑 — 用大约 2.5 倍的执行成本,换来「就算主密钥泄露,核心逻辑一样看不到」。 开了 OPcache 之后,没上保护的路径跟原生 PHP 完全一样快

方案与定价

通过 Stripe 月付或年付,年付直接打 8 折

免费

$0永久免费
  • 用 Google 登录即可使用
  • 单文件上限 1 MB.php.zip
  • 1 个精确域名(不能用通配符)+ 1 个 MAC
  • 加密强度跟付费版完全一样
  • 有提交速率限制
登录即可开始
ISV 专用

Ultra

$10/ 月 · $96 / 年(省 20%)
  • 包含 Pro 全部功能
  • 单文件上限 300 MB(multipart 大文件上传)
  • REST API + Webhook,可集成到你的销售流程
  • 客户向你下单 → 你调用我们 API → 我们把下载链接 webhook 给你 → 你发给客户
  • 每次编码可单独指定域名 / MAC / 到期日
  • 优先支持
通过 Stripe 订阅

免费版跟付费版用的是同一套编码引擎!一样的 AES-256-GCM、一样的字节码 VM、保护强度完全相同。差别只在使用配额(文件大小、API 权限、批量速率)。

安装加载器

免费、可自由分发。任何要跑 BinaryPHP 加密插件的主机都得先装这个。

客户端

标准安装(Debian/Ubuntu, PHP 8.2)

# 1. 把 .so 复制到 PHP 扩展目录
$ sudo cp binaryphp.so /usr/lib/php/20220829/

# 2. 启用此扩展
$ echo 'extension=binaryphp.so' | sudo tee /etc/php/8.2/mods-available/binaryphp.ini
$ sudo phpenmod binaryphp

# 3. 重启 PHP-FPM(或你的 SAPI)
$ sudo systemctl restart php8.2-fpm

验证加载器是否启用:

$ php -r 'echo binaryphp_version();'
0.9.2

$ php -r 'echo binaryphp_hostname();'
your-domain-or-hostname

$ php -r 'print_r(binaryphp_macs());'
Array ( [0] => aa:bb:cc:dd:ee:ff )

或者在浏览器打开任何 phpinfo() 页面 — 会看到一个专属的 BinaryPHP 区块,列出加载器版本、master 世代、支持格式、字节码 VM 状态。对没 CLI 权限的环境(cPanel、Plesk、共享主机)特别方便:

BinaryPHP support  →  enabled
Loader version     →  0.9.2
Master gen         →  2 (rotated 2026-05-06)
File formats       →  BPHP2/3/4 · HBPH1/2/3 · BVMC1/2/3
Bytecode VM        →  v3 obfuscation + cranelift JIT

请挑你 PHP 对应的小版本下载(每个 .so 是针对该 ABI 编译的,不能互换):

在你服务器跑 php -v 看实际版本。macOS / aarch64 / FreeBSD 暂不支持。

插件开发者

使用 SaaS 编码器

不用装 CLI、也不用保管主密钥。打开编码器、上传、设置授权、下载加密文件,就这样。

  • 每文件独立随机 salt + AES-256-GCM
  • 授权资料(域名 · MAC · 到期日)封装在密文里,无法被篡改
  • 文件名不变(.php.php
  • 加载器靠魔术头识别文件,跟扩展名无关
打开编码器

免费版接受 .php.zip,上限 1 MB。Pro 上限 100 MB;Ultra 通过 multipart 上限 300 MB。

常见问题

BinaryPHP 真的破解不了吗?

实话说:没有任何离线可执行的 DRM 能保证「永远无法破解」。包括 ionCube、Zend Guard、SourceGuardian 都曾被研究与破解过。

所以 BinaryPHP 的目标不是神话式的「绝对安全」,而是:

让破解成本远高于正版授权成本。

破解 BinaryPHP 并不只是「解密文件」而已。攻击者通常还需要:

  • 逆向工程 Loader
  • 分析运行期逻辑
  • 还原 VM Bytecode
  • 重建混淆后的程序流程

即使成功,得到的也通常不是源代码,而是:

  • 失去变量名
  • 没有注释
  • 控制流混乱
  • 难以维护的中间表示

而且 BinaryPHP 会持续更新:

  • Loader
  • VM 指令集
  • 混淆层
  • Anti-debug / Anti-tamper

让旧版破解工具快速失效。

这就是 BinaryPHP 的核心理念:

不是让破解「不可能」,而是让破解「不值得」。

Web 跟 CLI 该用哪种授权?

跑在 web server 上的程序用域名绑定。加载器会先检查 $_SERVER['SERVER_NAME'](这个值由 nginx / Apache 设置,客户端伪造不了),抓不到才退回去看 HTTP_HOST。CLI 工具就用 MAC 地址绑。两个也可以一起填,匹配任一个就放行。

会不会拖慢性能?

不会。解密只在编译阶段跑一次、每个文件一次。编译之后,执行速度跟原生 PHP 没差别。OPcache 一开,连那一次解密的成本都会被摊平到后续所有请求。

主密钥会放在我的服务器吗?

用 SaaS 编码器的话:不会。主密钥始终留在我们这边,不会外流到你的环境。

跟其他编码方案比有什么不同?

BinaryPHP 是 2026 年从头打造的全新版本,底层用现代密码学(AES-256-GCM、HKDF-SHA256),核心逻辑再用我们自家的字节码 VM 包一层。工具链以 SaaS 形式提供,主密钥一直放在我们服务器,文件格式也有公开规格。

共享主机能跑得起来吗?

主机要先装 BinaryPHP 加载器才行。加载器免费、可自由分发——可以让客户自己装(在 php.ini 加一行就好)或让主机商预装。

BinaryPHP 提供哪些保护层?

加载器内置三层独立防护:

  • AES-256-GCM 认证加密 + HKDF-SHA256 每文件派生密钥。每个文件各自有独立 salt 与密钥——破解一个不会影响其他文件。
  • 自家字节码 VM,专门处理你标 #[binaryphp\Protected] 的函数。这些函数会被编译成我们自家的 bytecode(不是 PHP,也不是 Zend opcode),运行时由加载器直接解释执行。客户硬盘上根本不会出现过明文 PHP。
  • 授权资料封在密文里:域名 / MAC / 到期日。只要动到任何一处,GCM tag 就过不了、拒绝执行。

最敏感的算法建议放在你自己的 server API 上跑;其他部分 BinaryPHP 用分层防护帮你挡下,不必把整套程序重写。

支持我的框架 / autoloader 吗?

支持。BinaryPHP 拦截的是 PHP 的编译流程,所以 include / require 都照常运作——Composer autoload、框架 router、插件系统都没问题。

OPcache 兼容吗?

兼容。OPcache 是在我们解密、编译完之后才接手缓存编译结果,每个失效周期只解密一次。

文件格式长什么样?

有公开且稳定的规格:52-byte 文件头("BPHP2" magic + 版本号 + 16-byte salt + 12-byte IV + 16-byte GCM tag)后面接密文。

支持哪些付款方式?

计费全部走 Stripe,可以挑:

  • 月付订阅 — Pro $5/月、Ultra $10/月,随时可取消。
  • 年付订阅 — 同样方案改年付,自动 打 8 折(Pro $48/年、Ultra $96/年)。

订阅享 30 天退款保证。Stripe 接受所有主要信用卡跟多数地区性付款方式。

有人上传恶意 PHP 会把你们系统搞垮吗?

架构上不会。我们不会执行你上传的 PHP,只做 tokenize(语法切片)跟加密。编码器对文件跑 token_get_all()(PHP 的词法分析器,不是执行器),把 HTML 跟 PHP 区块切开,用 AES 加密每个 PHP 区块、写出文件。整个流程没用 evalinclude、也没调用任何 shell 命令。

zip 上传还多了四道防线(解压前先验证):

  • 挡路径穿越攻击(../、绝对路径、磁盘代号)
  • 挡 zip bomb(累计解压 > 200 MB 或压缩比 > 100 倍)
  • 挡条目过多(> 2,000 个文件,或里面 > 1,000 个 .php)
  • 挡目录太深(> 16 层)

每个编码任务都在独立临时目录里跑、响应送出后立刻清掉。你想上传什么恶意代码都行——我们只会帮你加密好还给你。

API 方案怎么运作?

给分销加密 PHP 插件的 ISV / SaaS 厂商用。客户向你下单后:

  1. 你的服务器 POST 我们的 REST API,带上客户的域名 / MAC、编码参数、webhook URL。
  2. 我们从你给的 URL 抓源代码(或接受 inline),编码好上传到 R2。
  3. 我们把下载链接 POST 到你设定的 webhook。
  4. 你再把链接转给客户(邮件、控制面板、用什么方式都行)。

编码成品放在 R2 保留 72 小时自动清除;你上传的源代码 24 小时内就删掉。

正在用 BinaryPHP 发货的客户

别再把源代码一起送出去了。

用 Google 登录就能开始 — 免费版立即可用,不用刷卡。