Skip to content

资产解析层的一些BUG #4

Open

Description

@AXiX-official

1. UnityFS 的 LZMA 解压实现错误

Bundle.DecodeLzma 跳过了 13 字节(5 字节编码属性加 8 字节解压后大小)再把剩余部分交给 Decoder.Code。而UnityFS 实际存的是 5 字节属性(1 字节 lc/lp/pb,4 字节字典大小),紧跟 LZMA1 原始流。可以参考UnityPy中的实现,如果是对比较老的UnityWeb格式,LZMA的实现才是带解压后大小的13字节

2. BundleFIle的Header的对齐实现

在Unity 2019.4.x的某些版本中,即使Header.Version == 6,但是Header任然需要对齐。K0lb3/UnityPy#364
这个PR中没有给出具体版本,实际上对于2019.4.x版本中,2019.4.15以后都是这种特例。

3. 其他一些零零碎碎的问题

不太确定该项目准备怎么处理带加密的资产,Unity的cn版本有一种官方自带的加密类型叫做UnityCN,UnityPy是直接支持的。另外Tuanjie引擎的格式和Unity海外版本也有不少出入,变动也很多。有些游戏会修改一些资产类型的TypeTree,全都走tpk读取未必能处理,当然如果实际修改了Shader的数据结构,可能也就不适用于shader还原了,可能不在本项目的考虑范畴。

一些建议

总而言之,Unity没有公开过资产的格式,而且版本繁多加上各个厂商魔改,让AI自己从头实现一遍解析费力也不一定能有好效果。

如果你希望让AI修正现在的实现,我觉得参考UnityPy的代码实现是一个不错的主意。

或者你可以试试已经有的成熟的Csharp库,比如AssetsTools.NET或者UnityAsset.NET

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions