数据包文件: 515.37 MB file on MEGA
官网:Fire Emblem Shadows | Nintendo
重新开了个帖,想收语音,目前看了外网没有讨论这个解包的帖子,目前试了AssetStudio几个版本都无法加载bundle文件,VGM工具箱没有响应的方法,HxD内也无法分辨这个文件的类型,接触近几年新手游解包比较少,在此求教一下大佬们解包方法。
数据包文件: 515.37 MB file on MEGA
官网:Fire Emblem Shadows | Nintendo
重新开了个帖,想收语音,目前看了外网没有讨论这个解包的帖子,目前试了AssetStudio几个版本都无法加载bundle文件,VGM工具箱没有响应的方法,HxD内也无法分辨这个文件的类型,接触近几年新手游解包比较少,在此求教一下大佬们解包方法。
什么狼人杀。。。还有就是并非没有讨论,不过似乎只到local key为止
KEY_LOCAL = bytes.fromhex("8b3877795fb5a6ee3efcdd8874ad28c7")
KEY_REMOTE = bytes.fromhex("b17f5799272f256658f5f727ec058ef2")
def calculate_nonce(f):
v6 = 0
v8 = 0
for char in os.path.splitext(os.path.basename(f))[0]:
char_code = ord(char)
v10 = v6 & 0x3C
v6 += 4
v8 ^= (char_code & 0xF) << v10
v8 = v8 & 0xFFFFFFFFFFFFFFFF
return struct.pack("<Q", v8)
def decrypt(i):
nb = calculate_nonce(os.path.basename(i))
with open(i, "rb") as f:
enc = f.read()
keys_to_try = [
("REMOTE", KEY_REMOTE),
("LOCAL", KEY_LOCAL),
]
for key_name, key in keys_to_try:
cipher_ecb = AES.new(key, AES.MODE_ECB)
dec = bytearray()
numb = (len(enc) + 15) // 16
for bi in range(numb):
cb = nb + struct.pack(">Q", bi)
keystream = cipher_ecb.encrypt(cb)
s = bi * 16
end = min(s + 16, len(enc))
for i in range(end - s):
dec.append(enc[s + i] ^ keystream[i])
h = bytes(dec[:16])
if b"UnityFS" in h:
with open(i, "wb") as f:
f.write(bytes(dec))
return (True, key_name)
return (False, None)
能解密小一半的资产,剩下的懒得找key了,等大佬接手了
非常感谢。
战棋狼人杀,看到类型以后两眼一黑,感觉这游戏明天关服也不意外。