刚接触逆向,群友给我发来一个资源包文件(无扩展名,大小约16.4 MB),头部看起来像是UnityFS的变体,但标准工具无法解包。经过分析,文件特征如下:


其中:
魔数 15 1E 1C 0D 0D 23 21 类似于UnityFS的常见变种。
版本号 00 00 00 07 = 7。
主版本字符串 35 2E 78 2E 78 00 = "5.x.x"。
次版本字符串 32 30 31 39 2E 34 2E 31 34 66 31 00 = "2019.4.14f1"。
声明文件总大小 SIZE = 0xFB301E(约16.47 MB)。
COMP_BLOCKS = 0x3F8 (1016)
UNCOMP_BLOCKS = 0x1082 (4226)
COM_TYPE = 0x246 (582)
紧接着有2字节 VER = 0x32,可能是额外版本标识。
实际文件大小与 SIZE 基本一致(略有差异,可能是填充)。
数据结构:
文件头部之后,从偏移0x34到0x1000全是0。
从偏移0x1000开始出现有规律的非零数据(见附件截图),似乎是某种结构化数据。
然后再到0x2000再次出现非零数据。
已尝试的方法:
使用通用的UnityFS修复脚本,因 VER=0x32 未内置,手动设置 COMP_SHIFT 和 UNCOMP_SHIFT 在0~1000范围内穷举,均未成功解出有效文件。
直接解压:将偏移0x34处的1016字节分别用LZ4、Oodle解压,目标4226字节,结果解压失败或全零。尝试将偏移改为0x500也无果。
暴力搜索不同偏移和压缩大小,未找到任何能解出非零数据的组合。
修改文件头魔数为 UnityFS,将 COM_TYPE 改为3(LZ4HC),用AssetStudio打开报错“Lz4 decompression error”,提示写入/预期大小不匹配,似乎内部块信息错误。
用十六进制查看0x500开始的数据,无法识别格式,可能包含加密或自定义索引。
这种文件头结构是否有已知案例?
COM_TYPE=582 可能对应什么压缩类型?
VER 字段的作用是什么?
如何确定正确的 COMP_SHIFT 和 UNCOMP_SHIFT?
或者有无其他方式修正头部以正常解压?
从0x500开始的数据模式能否推断出文件结构(如目录、分块索引)?
如果有类似Unity资源包的解密经验,请各位指导手动提取资源的思路。
文件资源还在上传,这里只好展示部分截图:


然后到0x2000再次出现非零
