算法原理

算法原理

从源码解析、中间表示到容器封装与运行时装载,了解 LOAKPHP 的四层保护模型与完整性机制。

四层模型

每一层只解决一个问题

层与层之间用明确的中间格式衔接,出错时能定位到具体阶段,而不是一句“加载失败”。

01

解析与语义分析

读取 PHP 源码,构建抽象语法树,解析命名空间、类、Trait、闭包与属性声明,形成与运行时语义一致的中间表示。

02

中间表示与优化

把语法树降低为自定义指令序列,合并常量、重排字面量,并保留反射所需的元数据。

03

容器封装

指令与字面量分别编码、分区写入 LKP1 v2 容器,头部记录目标版本与摘要,最终完成封装。

04

运行时装载

loader 读取容器头、校验完整性与授权,按需还原执行单元,交回 Zend 引擎继续执行。

流程

一次封装,四个动作

封装在构建环境完成;运行环境只负责校验与执行,不接触源码目录。

源码目录src/
解析与降级AST → IR
容器封装LKP1 v2
装载执行loader → Zend
关于兼容性:中间表示以 PHP 语义为准,保留类名、方法签名与命名空间信息。 因此 Composer 自动加载、注解解析与框架反射调用不需要额外适配。
容器结构

LKP1 v2 的分区设计

分区不是为了复杂,而是让装载阶段只读取真正需要的那一部分。

分区 内容 作用
Header 容器版本、目标 PHP 版本、SAPI 类型、构建时间 装载前先读,用于拒绝不匹配的运行环境
Meta 命名空间、类名、方法签名与反射所需元数据 保证自动加载与框架反射链路正常
Code 按函数与类拆分的指令序列 按需还原执行单元,避免整文件驻留
Literals 常量、字符串与数组字面量池 独立编码,减少明文在内存中的停留时间
License 域名、目录、到期时间与功能开关 参与校验,修改即失效
Signature HMAC-SHA256 摘要与容器指纹 装载阶段校验完整性
运行时 · 装载日志
# 首次请求,loader 依次校验
[loak] header    LKP1 v2  php=8.3  sapi=fpm
[loak] integrity hmac-sha256 ................ ok
[loak] license   domain=example.com ......... ok
[loak] expire    2027-12-31 .................. ok
[loak] loader    1.4.2 ....................... ok

[loak] mounted   128 units in 4.7 ms
[loak] ready     request handled normally
保护机制

加密保障内容,摘要保障完整

每个项目使用独立材料:ChaCha20 负责内容加密,HMAC-SHA256 负责完整性校验, 需要跨端分发时通过 X25519 完成协商。运行端只持有该项目必需的部分。

  • 分离 — 内容保护材料与校验材料独立派生,互不复用。
  • 校验 — 容器摘要参与校验,位级改动即失败。
  • 签发 — 授权描述由授权服务签发,本地离线校验。
设计原则

保护强度来自工程约束

我们把可验证的约束写进装载流程,也对能力边界保持诚实。

最小明文驻留

只在执行单元装载的瞬间还原必要内容,避免整文件常驻内存。

保护材料分离

项目保护材料不随产物完整分发,运行端只持有该项目必需的部分。

失败即拒绝

版本、完整性、授权任一校验不通过即终止装载,并返回可定位的错误码。

可审计

每个构建提供 SHA-256 指纹,下载与部署阶段均可核验。

边界声明:LOAKPHP 用于保护自有知识产权与规范授权分发,不承诺「绝对不可还原」。 任何部署在客户侧的可执行内容都存在被分析的可能;我们做的是提高成本、增加约束、留下痕迹。 请勿将本产品用于规避他人授权、隐藏恶意代码或其他违法用途。

先下载扩展,再决定怎么接

按 PHP 版本获取 loader 并核对 SHA-256;域名绑定、授权状态与容器签发都在授权服务里完成。