PHP 8.x · Rust 載入器 · Web + CLI · Linux / Unix
BinaryPHP 用 AES-256-GCM 把你的商業 PHP 程式碼加密、 每個檔案配獨立金鑰,再幫你綁定 網域或 MAC、加上到期日——所有解密過程都交給一個 極輕量的 Rust 載入器透明完成。每季更新金鑰、永久向下相容, 破解成本遠高於正版授權費。
# 到 binaryphp.com/encode/ 上傳檔案、填好授權資料:
網域: acmestore.com, *.acmestore.com
到期: 2027-12-31
名稱: acme-pro
# 輸入 → plugin.php (你寫的原始碼,~40 KB)
# 輸出 → plugin.php (加密後,~41 KB 二進位內容)
# 檔名、副檔名都不變——可以直接覆蓋原檔,呼叫的地方完全不用改。
# 載入器靠 5-byte "BPHP2" 魔術頭認檔,跟副檔名無關。
# 主金鑰一直放在我們伺服器,你拿到的只有加密後的成品。
客戶下載你的 .zip 的那一刻,你寫的每一行 PHP 他都能拿去抄、改、轉賣。
原始碼直接攤在那邊,幾分鐘就能把授權檢查整段拿掉。沒有程式碼層的保護,授權只是個開關,不是一道牆。
客戶一下載完,你的智慧財產就散落在共享主機、VPS、CI 機器各處——你看不到、管不到,一行 tar -xzf 就全挖出來。
把 .php 檔或整包外掛 .zip 拖到我們的線上編碼器,設定要綁的網域、MAC、到期日就好。主金鑰一直放在我們這邊——你完全不用煩惱保管的事。
下載加密好的檔案。每個檔案配一份獨立的 16-byte salt 跟 HKDF-SHA256 衍生金鑰;只要被改過任何一個 byte,GCM 驗證就會失敗、拒絕執行。
客戶在 php.ini 加一行 extension=binaryphp.so。載入器接到 PHP 的編譯流程,在記憶體裡解密、驗證授權(看網域 SERVER_NAME / HTTP_HOST 或 CLI 環境的 MAC),最後把明碼直接餵給 Zend Engine。
NIST 標準的認證加密。檔案被改一個 byte,GCM tag 就過不了、直接拒絕執行。
每個加密檔配獨立 16-byte salt,再用 HKDF-SHA256 衍生出該檔專屬的金鑰。每個檔各自密封,互不影響。
標 #[binaryphp\Protected] 的函式會編譯成我們自家的 bytecode——不是 PHP,也不是 Zend opcode。執行階段由載入器直接解譯,演算法不會以原始碼形式落在客戶硬碟上。
一張授權可以列多個主機名稱或萬用字尾(*.example.com),任一符合就放行。
CLI 工具、cron job 這種非 HTTP 環境:直接把授權綁到客戶機器的 MAC(讀 /sys/class/net)。
發行有時效的版本(試用、訂閱、發行週期)都行。載入器會拿系統時鐘對照檔案內嵌的時間戳。
在 php.ini 用 extension= 載入。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 之後,連那一次解密都會被快取攤平。
for + % + 累加) · 條越短越快 · 基準是原生 PHP
| 工作負載 | 原生 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 * imm、
x % imm)已經把熱迴圈成本從 ~5× 壓到 ~2.5×,做法是把
LoadVar / StoreVar 的堆疊操作合併成單一 op。
VM 語言覆蓋率:
物件導向(類別、extends、abstract、
interface、trait + use、
static、類別常數、$this、
parent::、self::、magic
__construct / __get /
__set / __call);
閉包 function () use (…) 與
箭頭函式 fn () => expr;
try / catch / finally / throw;
match、=== / !==、??、
?:、<=>、instanceof;
lazy / coroutine 生成器(yield 採 frame snapshot & resume —
無限生成器可用,只有實際被消費的值會被計算);
完整的 for / while / foreach / switch / break / continue;
spread ...$args;
引用 &$x(函式參數與內建如
array_push / sort 都支援);
global;heredoc / nowdoc;
約 50 個內建函式(strlen、
count、trim、explode、
implode、sprintf、md5、
sha1、base64_encode/decode、
array_* 等);
#[Protected] 可標註在類別方法上,$this->prop
讀寫會在 PHP 與 VM 間自動同步;cranelift AOT JIT 優化整數熱迴圈。
.bphp(binaryphp-rs)就好 —
跟原生 PHP 的速度差距已經量不出來。#[Protected](binaryphp-vm)
留給最敏感的函式 — 授權驗證、金鑰派生、防竄改邏輯 —
用大約 2.5 倍的執行成本,換到「就算主金鑰外洩,核心邏輯一樣看不到」。
開了 OPcache 之後,沒上保護的路徑跟原生 PHP 完全一樣快。
透過 Stripe 月繳或年繳,年繳直接打 8 折。
.php 或 .zip.zip 上限 100 MB免費版跟付費版用的是同一套編碼引擎!一樣的 AES-256-GCM、一樣的位元碼 VM、保護強度完全相同。差別只在用量限制(檔案大小、API 權限、批次速率)。
免費、可自由散布。任何要跑 BinaryPHP 加密外掛的主機都得先裝這個。
# 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 暫不支持。
不用裝 CLI、也不用保管主金鑰。打開編碼器、上傳、設定授權、下載加密檔,就這樣。
.php → .php)免費版接受 .php 或 .zip,上限 1 MB。Pro 上限 100 MB;Ultra 透過 multipart 上限 300 MB。
老實說:沒有任何離線可執行的 DRM 能保證「永遠無法破解」。包括 ionCube、Zend Guard、SourceGuardian 都曾被研究與破解過。
所以 BinaryPHP 的目標不是神話式的「絕對安全」,而是:
讓破解成本遠高於正版授權成本。
破解 BinaryPHP 並不只是「解密檔案」而已。攻擊者通常還需要:
即使成功,得到的也通常不是原始碼,而是:
而且 BinaryPHP 會持續更新:
讓舊版破解工具快速失效。
這就是 BinaryPHP 的核心理念:
不是讓破解「不可能」,而是讓破解「不值得」。
跑在 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\Protected] 的函式。這些函式會被編譯成我們自家的 bytecode(不是 PHP,也不是 Zend opcode),執行階段由載入器直接解譯。客戶硬碟上根本不會出現過明文 PHP。最敏感的演算法建議放在你自己的 server API 上跑;其他部分 BinaryPHP 用分層防護幫你擋下,不必把整套程式重寫。
支援。BinaryPHP 攔的是 PHP 的編譯流程,所以 include / require 都照常運作——Composer autoload、框架 router、外掛系統都沒問題。
相容。OPcache 是在我們解密、編譯完之後才接手快取編譯結果,每個失效週期只解密一次。
有公開且穩定的規格:52-byte 檔頭("BPHP2" magic + 版本號 + 16-byte salt + 12-byte IV + 16-byte GCM tag)後面接密文。
計費全部走 Stripe,可以挑:
訂閱享 30 天退款保證。Stripe 接受所有主要信用卡跟多數地區性付款方式。
架構上不會。我們不會執行你上傳的 PHP,只做 tokenize(語法切片)跟加密。編碼器對檔案跑 token_get_all()(PHP 的詞法分析器,不是執行器),把 HTML 跟 PHP 區塊切開,用 AES 加密每個 PHP 區塊、寫出檔案。整個流程沒用 eval、include、也沒呼叫任何 shell 指令。
zip 上傳還多了四道防線(解壓前先驗):
../、絕對路徑、磁碟代號)每個編碼工作都在獨立暫存目錄裡跑、回應送出後立刻清掉。你想上傳什麼惡意程式碼都行——我們只會幫你加密好還給你。
給轉售加密 PHP 外掛的 ISV / SaaS 業者用。客戶向你下單後:
POST 我們的 REST API,帶上客戶的網域 / MAC、編碼參數、webhook URL。POST 到你設定的 webhook。編碼成品放在 R2 保留 72 小時自動清除;你上傳的原始碼 24 小時內就刪掉。
十分鐘信箱
「BinaryPHP 我們一開始使用免費版本測試,效果感覺不錯,目前使用 Pro 將整個網站編譯進去,連同 PHPMailer 這真是太強大了!速度上也沒感覺到拖累。」