This repository has been archived by the owner on Jun 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 63
BGO部分AssetBundle解密后,无法用UnityPy读取 #78
Comments
hexstr
added a commit
that referenced
this issue
Oct 31, 2022
当时升级.net 6.0的时候换了解密库,不太会用这玩意儿,解密后没有移除掉padding block,现在手动移除了。 |
然而新commit编译后,在「解析AssetStorage.txt」时就会报错:
感觉解密后文件尾部并不仅仅是「多出来一部分」,CatAndMouseGame.cs:L339得到的长度与原始文件的长度未必一致。 |
更新,这次测试过加密解密都没问题了 |
感谢,现在解密后UnityPy能正常读取,P图方便多了 |
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
问题概述
使用FGOAssetsModifyTool解密AssetBundle后,部分文件仅能在AssetStudio中正常加载,使用UnityPy或UABE加载则报错。
复现
FGO版本
BGO:2.45.0(资源文件为2022.10.31最新版)
UnityPy报错的资源文件:
55e19c86de749ba96cab8080a339b1f84d1d1462.bin
9056d1258462f0588929d62ae227055fb54189e6.bin
b84618aaad342e15805d6f992b87a9d304462049.bin
……
附件:files.zip(其中
AssetStorage.txt
即origin
目录下的.bin
是从手机提取的加密文件;decrypted
目录下的.bin
是使用FGOAssetsModifyTool解密后、可在AssetStudio中加载的资源文件。正常/报错的.bin
文件各提供了几个样例)相关工具版本
FGOAssetsModifyTool:最新版(512265a)
UnityPy:1.9.20(win10,python3.8.3)
UABE:3.0 beta 1
AssetStudio:0.16.47
复现方法
AssetStorage.txt
和原始.bin
文件放到(FGOAssetsModifyTool.exe
所在目录的)Android
目录下;FGOAssetsModifyTool.exe
,依次选择67 -> 5 -> 6 -> 2(即切换至BGO秘钥、解密AssetStorage.txt
、解析AssetStorage.txt
、解密.bin
);Decrypted
目录下.bin
文件,全部解析正常;UnityPy.load("<bin_file_path>")
打开解密后.bin
文件,上面提到的几个文件会报错Corrupted input data
,返回的对象中无解析的asset;.bin
文件,上面提到的几个文件同样无法加载,报错Failed: Decompress bundle
。可能的原因
排查UnityPy代码发现,报错发生在解压UnityFS文件所含block的LZMA stream过程中,是python的lzma库抛的异常。在此之前的过程(UnityFS header解析、block info & directory node解析)都正常,甚至block的LZMA stream prop也正常。
对解密后
.bin
文件进行观察,发现其大小(bin size)与UnityFS header中记录的size(unityfs size)不相符。bin size总比unityfs size大10~20个字节,而且这些字节均为重复的D2 CE
。另一方面,测试的几个.bin
文件都只有1个block,所以unityfs size就是「header」+「compressed blocks info bytes」+「compressed block bytes」的总字节数。从UnityPy和AssetStudio源码看,这也是理论上AssetBundle文件的总长度。就是说,解密后.bin
文件在尾部多出了一些字节。而且,发现仅unityfs size为奇数的
.bin
文件会导致UnityFS及UABE报错。就怀疑是FGOAssetsModifyTool解密过程中的padding导致了文件尾部的损坏(可能只坏了一两个字节)。但这解释不了为何AssetStudio就能正常加载所有解密后的AssetBundle……
求助
找到FGO运行时实现AssetBundle解密的过程,并与FGOAssetsModifyTool的代码做对照排查,可能最有利于解决问题。但个人一时没有发现是在哪做的……
The text was updated successfully, but these errors were encountered: