NOTES / DAX233← notes · hire

拆一个二进制格式:从 pxls.bytes 还原可编辑工程文件

2026-11-12 · 文件格式, 逆向, 像素美术

一次小型的逆向记录:不重写整个格式,只找最小差异。

背景

一款同人游戏的像素资产有两种形态:游戏导出的 pxls.bytes(图集 + UV),和 PixelLiner 的工程文件 .pxl。想改里面的像素小人,但常见工具只能拆出图集和 PNG,还原不回可编辑工程。

观察

  1. 两种文件都以 %PACK_SECTION% 为核心,差别在于:导出格式的图集记录带一个「贴图外置」标志位
  2. 把标志位清掉、PNG 内嵌回去,文件就变成 PixelLiner 能直接打开的形态
  3. 打开后它会自动把 PXLS 转成可编辑角色,另存就得到标准工程文件

结论:不需要重新实现整个工程格式,只需要处理这一个差异点。

实现

只做容器级改写:解析 section 表,只替换 %PACK_SECTION% 的内容,其余段(%POSE_SECTION%、%PTCL_SECTION%、%IMGV_SECTION% 等)原样复制。这样风险最小,也不会因为猜错段结构把文件写坏。

为什么不直接重写格式

因为成本不在写代码,在于确认自己没理解错。二进制格式里最贵的错误是「读出来像对、写回去全歪」。只改一个标志位,可验证面积小,出错也能定位。

教训

  1. 先找最小差异,别一上来重写整个格式
  2. 用真实样本 + 失败样本对照,比读文档快
  3. 自校验很便宜,能省掉大量「看起来成功」的返工

工具在 github.com/Dax233/AICPxlsUnpacker。

NEED A HAND

有打不开的工程文件、或者想把某个数据转成可编辑格式?发一个样本过来,我先看看可行性。

服务范围与报价 → · bakadax@qq.com

独立开发者 · 远程接单github.com/Dax233