Skip to content

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 模块,支持以下文件格式:

扩展名说明解密方式
.pyPython 源码无解密
.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_dir

exio3 是 CEFS 的 Python 绑定层,负责解密和读取 CPK 中的文件。引擎通过 unison.vfs 统一接口调用,由 <pymodules> 配置决定实际使用的后端模块。