bivex/Kage
GitHub: bivex/Kage
基于 C 扩展的高性能 PHP 字节码虚拟化保护系统,通过多层加密混淆与硬件绑定防止源码被逆向分析。
Stars: 5 | Forks: 4
# Kage 安全扩展
## PHP 字节码保护与虚拟化系统
**项目:** Kage
**目标环境:** PHP 7.4 (Zend Engine 3.4.x)
## 1. 简介
Kage 是一个高性能的 PHP 扩展,专为代码的加密保护而设计。它实现了**字节码虚拟化**和**本地代码虚拟化**,以保护 PHP 源代码和执行逻辑免受静态和动态分析。
## 2. 架构设计
系统采用分层保护架构。
### 2.1 第一层:字节码虚拟化 (Zend 级别)
- **动态 ISA (指令集架构)**:受保护的文件基于每个文件的 32 位种子编译成独特、随机化的指令集。
- **控制流平坦化 (CFF)**:执行图通过**跳转目标混淆**进行修改。原始跳转目标经过 XOR 加密,并在运行时在内存中重新链接。
- **递归逻辑混淆**:对子结构(包括嵌套函数、类方法和匿名闭包)进行混淆。
### 2.2 第二层:数据与元数据加密
- **字面量表保护**:常量字符串和数值在编译器级别进行 XOR 加密,并在受保护的内存块中 JIT 解密。
- **符号表屏蔽**:`op_array->vars` 表中的变量名索引和名称被混淆,以防止通过 Reflection API 或调试器泄露信息。
### 2.3 第三层:本地虚拟化 (VMPacker)
- **二进制虚拟化**:核心函数 (`kage_raw_decrypt`, `kage_get_machine_id`) 使用 **VMPacker** 进行虚拟化。
- **解释器嵌套解释器**:C 逻辑被转换为自定义 VM 字节码,防止使用标准反汇编器分析解密算法。
## 3. 运行特性
### 3.1 即时 (JIT) 脱保护
Kage 实现了一种拦截策略:
1. **拦截**:受保护函数的入口点被替换为 `ZEND_NOP` 载体。
2. **恢复**:在首次调用时,分发器恢复原生的 Zend 处理程序,并就地脱保护 `op_array`。
3. **执行**:后续执行以原生 PHP 速度运行。
### 3.2 环境绑定 (HWID)
- **硬件锁定执行**:脚本可以绑定到特定的硬件指纹(支持 Linux `/etc/machine-id` 和 macOS `gethostname`)。
- **完整性验证**:带有 CRC32 校验的头部可确保被篡改的负载在执行前被拦截。
## 4. 系统集成与部署
### 4.1 要求
- **运行时**:PHP 7.4(AMD64/ARM64 架构)。
- **依赖项**:`libsodium`。
- **构建系统**:CMake 3.16+,GCC 10+,或 Docker。
### 4.2 安装步骤
部署二进制文件:
```
# Integrate binary 模块
cp artifacts/kage_protected.so $(php-config --extension-dir)/kage.so
# 配置 PHP 环境 (php.ini)
extension=kage.so
kage.encryption_key = "SECURE_32_CHAR_ALPHANUMERIC_KEY"
```
### 4.3 加密协议 (API)
生成受保护资源的步骤:
```
标签:Bash脚本, C扩展, DOM解析, JIT解密, Kage Security, PHP安全, PHP扩展, VMP, Web安全, Zend引擎, 代码加密, 代码审计防御, 代码混淆, 动态指令集, 反调试, 商业软件保护, 字节码虚拟化, 客户端加密, 控制流平坦化, 源代码保护, 编译器技术, 蓝队分析, 软件加壳, 防逆向工程, 高性能PHP