Sinee Loader 是面向 PHP 商业软件交付的源码加密、运行加载和授权管理系统。
当前仓库已经完成 M0 技术验证、M1 本地授权原型和 M2 项目级加密原型,本机验证链路已经跑通:
- 使用 Rust Encoder CLI 加密单个 PHP 文件或目录。
- 输出需要
sinee_loader扩展执行的包装 PHP 文件。 - 提供 PHP Loader 扩展,并完成 M0 解密执行闭环。
- Rust CLI 生成 Ed25519 授权密钥和离线 license。
- C Loader 校验产品、过期时间、签名,并按 license 中填写的域名、IP、机器码限制执行加密 PHP;未填写的维度不限制。
当前 M2 已实现 manifest、exclude、项目级完整性校验和 Laravel / ThinkPHP 最小项目验证;下一步是补正式目标环境复验。
技术路线见 docs/技术选型.md:Loader 用 C,Encoder 和 License 工具用 Rust。
docs/ 方案和阶段任务
encoder/ 加密器 CLI 原型
loader/ PHP Loader 扩展
examples/ M0 示例文件
scripts/ 本地验证脚本
gui/ Windows / macOS 本地桌面界面
日常加密交付走桌面界面即可,不需要手动敲 CLI 命令;纯命令行用法见 encoder/README.md。
开发环境直接运行:
python gui\windows\sinee_loader_gui.py或者打包成可双击运行的 exe(发行到不装 Python 的机器):
powershell -ExecutionPolicy Bypass -File scripts\build-windows-exe.ps1生成 dist\SineeLoaderGui\SineeLoaderGui.exe。
界面右上角"编码器状态"显示当前用的是 Rust Encoder 还是内置 Python fallback:找到 encoder\target\release\sinee-loader.exe 就优先用 Rust Encoder;找不到就自动回退到 Python fallback(同样支持文件/目录加密、license 和 manifest)。构建 Rust Encoder(需先装好 Visual Studio C++ Build Tools):
powershell -ExecutionPolicy Bypass -File scripts\build-windows-encoder.ps1界面分三步操作,对应左侧步骤条:
1. 选择源码
| 字段 | 说明 |
|---|---|
| 模式 | 文件:加密单个 PHP 文件;目录:加密整个项目(支持 M2 manifest 和完整性校验) |
| 输入路径 | 要加密的 PHP 文件或项目目录 |
| 输出目录 | 加密结果的存放位置 |
2. 授权配置
| 字段 | 说明 |
|---|---|
| 产品编码 / 客户名称 | 写入 license,Loader 运行时会核对产品编码 |
| PHP 版本 | 目标服务器 PHP 版本(7.2–8.5),决定要配哪个 Loader 扩展 |
| 到期时间 | license 过期时间,过期后 Loader 拒绝执行 |
| 版本号 | 交付版本标记,仅展示 |
| 加密密钥 | 源码加密密钥,必须和 Loader 编译时内置的 LOADER_DEFAULT_KEY、或运行时 sinee_loader.key 配置一致,否则无法解密 |
| 授权域名 / 授权 IP | 限制 license 生效的域名或 IP,逗号分隔多个值,留空表示该维度不限制 |
| 宽限天数 / 并发数 | 界面预留字段,当前尚未接入校验逻辑,填写不影响本次加密和 license 结果 |
3. 加密输出
右侧"交付包"面板预览三个产物的路径(以目录模式为例):
- 许可证文件:
<输出目录>\_sinee_license\license.lic - Manifest:
<输出目录>\<项目名>\sinee-loader-manifest.json - 加密源码:
<输出目录>\<项目名>\
点击"开始加密"执行;完成后点击"打开输出目录"跳转到产物文件夹。底部"执行日志"记录每一步操作,可按 INFO / WARN / ERROR 过滤排查问题。
首次加密会在 %APPDATA%\SineeLoader\vendor-keys\ 自动生成厂商 Ed25519 密钥对,之后每次加密复用同一对:
vendor-license-private.pem:厂商私钥,需妥善备份,不能交付客户vendor-license-public.pem:厂商公钥,构建统一 Loader 扩展时传给LOADER_PUBLIC_KEY_FILE
sh scripts/run-gui.sh打包成可双击运行的 App:
sh scripts/build-mac-app.sh生成文件:dist/Sinee Loader.app,内置 sinee-loader Encoder,无需额外安装。
macOS 界面和更多 GUI 细节见 gui/README.md。
sh scripts/m0-smoke.sh
sh scripts/rust-static-check.sh
sh scripts/m0-loader-smoke.sh
sh scripts/m1-license-smoke.sh
sh scripts/m2-project-smoke.sh
sh scripts/gui-smoke.sh当前 smoke 会优先使用 encoder/target/release/sinee-loader;如果尚未构建 Rust binary,则回退到 PHP fallback。m0-loader-smoke.sh 会在临时目录构建 C Loader,并验证解密执行闭环。
生成 Loader 扩展发布产物:
PHPIZE=/path/to/php7.2/bin/phpize \
PHP_CONFIG=/path/to/php7.2/bin/php-config \
PHP_VERSION=7.2 \
TARGET_SYSTEM=linux \
LOADER_DEFAULT_KEY=你的GUI加密密钥 \
LOADER_PUBLIC_KEY_FILE=/path/to/vendor-license-public.pem \
sh scripts/build-loader-extension.sh输出文件遵循 sinee_loader_系统_php版本.so 命名,例如 dist/extensions/sinee_loader_linux_php7.2.so。
如果构建扩展时内置了 LOADER_DEFAULT_KEY 和 LOADER_PUBLIC_KEY_FILE,服务器部署可只配置
extension=sinee_loader.so。Loader 会自动从项目目录向上查找 _sinee_license/license.lic
和 sinee-loader-manifest.json;产品编码会从加密 payload 自动读取。仍可用
sinee_loader.key/product/license/public_key/manifest 显式覆盖。
当前本机验证已覆盖 Encoder、Loader、License、M2 项目级 manifest 和 GUI 编译。目标支持 PHP 7.2 NTS 和 PHP 8.2 NTS,但最终兼容性仍需要在 Linux x86_64 对应 PHP 版本环境中复验并分别构建 Loader 扩展;目标环境还需要 OpenSSL 1.1.1+ 或 OpenSSL 3.x 支持 Ed25519。
本项目采用 MIT License。
