Appearance
CEPK 文件格式
CEPK (C ExRFy Package) 是自定义的游戏资源打包格式,基于 CEFS 文件系统设计。
特性
| 特性 | 支持选项 |
|---|---|
| 压缩 | ZLIB / ZSTD |
| 文件名混淆 | SHA256 / CRC32 / SHA1 / MD5 |
| 加密 | AES-ECB / AES-CBC / AES-CFB / AES-OFB / AES-CTR |
| 密钥派生 | PBKDF2 |
CPK 打包
CPK 文件通过 cepk.py 库实现压缩、文件名混淆和加密。
引擎中的 CPK 使用
引擎通过 unison.vfs 模块挂载 CPK 文件:
python
from unison import vfs
# 挂载加密 CPK
vfs.mount("Lib.cpk", "Lib/", encryption_key=-231)
# 挂载普通 CPK
vfs.mount("data.cpk", "data/")
# 挂载无加密 CPK
vfs.mount("fonts.cpk", "fonts/")CpkImporter — CPK 模块导入
引擎内置的 CpkImporter 可以从 CPK 加密包中直接导入 Python 模块,支持以下文件格式:
| 扩展名 | 说明 | 解密方式 |
|---|---|---|
.py | Python 源码 | 无解密 |
.pyc | 编译字节码 | 跳过 16 字节头 |
.rxc | 加密字节码 | rxcfile.drf_to_pyobject() |
.rxs | 加密源码 | rxsfile.decrypt_rxs_file() |
CpkImporter 由引擎在启动时自动安装到 sys.meta_path 最前端,脚本无需手动操作。
AES 加密模式
| 模式 | 说明 |
|---|---|
| ECB | 电子密码本(不推荐,相同明文产生相同密文) |
| CBC | 密码块链接(需要 IV,推荐) |
| CFB | 密码反馈 |
| OFB | 输出反馈 |
| CTR | 计数器模式 |
密钥通过 PBKDF2 从密码派生。
文件名混淆
文件名通过哈希算法混淆,可在打包时选择:
- SHA256 — 最安全,64 字符十六进制
- SHA1 — 40 字符
- CRC32 — 8 字符,短小但碰撞风险高
- MD5 — 32 字符
运行时依赖
CPK 文件在运行时的读取由 exio3 模块提供:
unison.xml → <pymodules> → exio3 → find_file / get_file / list_direxio3 是 CEFS 的 Python 绑定层,负责解密和读取 CPK 中的文件。引擎通过 unison.vfs 统一接口调用,由 <pymodules> 配置决定实际使用的后端模块。