有魔改的AS能解,但是我不知道名字.
Yes,Is it a revision made by Razmoth?Could you please provide it? Thank you!
不是,这怎么看都不是个开源的,我也没有,今天有人问我的
好的,十分感谢你提供的帮助,它确实很困扰人,但我想它是真是存在的,因为有一些作者有提到过.
Razmoth佬虽然会删单库但会把解密加到CLI里面,在CLI里面没看到游戏名,连最新的ZZZ之前单独库删了都放进去了,但唯独没有忘川
内存里隐藏了global-Metadata文件头,限于水平就提取不来了,也没有找到MetaDecrypt之类的函数,目前还是没想到方法对文件进行解密
製作此MMD舞蹈動畫的作者或許他有解密它的工具,如果可以你或許可以向他們溝通索要,因爲我不知道如何與他交流,另外如果你希望能分享,對大家也有幫助.
网易的格式,有个单独工具专门处理这个,但是很大的问题在于文件名没有还原且输出对象乱七八糟。
请问你说的是不是基于PY脚本,而不是ASGUI?它是否存在于GitHub.
对,我也把这里的00删了,改了头文件也不能打开;这一个bundle多文件也分离过了,后半段 change the size up to the lz4 information to the correct size as well 属实没理解什么意思。
我也正好想提取这个手游,这个文件头也是第一次见,搜索了下,有个类似的贴子: Help with the *.bundle(unity) file - ZenHAX
说是跟global-metadata.dat清单有关?可惜这个论坛不能登录了,没办法看附件,要是有人能看懂2楼的回复好了_(:з)∠)_
bms脚本
# script for extracting separate bundles from bundle files (Forgotten River Fenghua Lu)
# created by spiritovod
getdstring SIGN 4
if SIGN != "PM03"
print "This is not compatible bundle file"
cleanexit
endif
get TMP_NAME basename
endian big
math SHIFT = 128
math HEAD_SIZE = 42
get FSIZE asize
math FILES = 0
for OFFSET = 0 < FSIZE
savepos OFFSET
if OFFSET >= FSIZE
cleanexit
endif
get SIGN string
savepos HEAD
get VERSION long
get MAJOR string
get MINOR string
get SIZE longlong
get COMP_BLOCKS long
get UNCOMP_BLOCKS long
get COM_TYPE long
get VER byte
savepos BLOCKS
math COMP_BLOCKS - SHIFT
math UNCOMP_BLOCKS - SHIFT
math OFFSET + SIZE
xmath SIZE "SIZE - HEAD_SIZE - 8"
set MEMORY_FILE binary "\x55\x6E\x69\x74\x79\x46\x53\x00"
append
log MEMORY_FILE HEAD HEAD_SIZE
log MEMORY_FILE BLOCKS SIZE
append
putvarchr MEMORY_FILE 38 COMP_BLOCKS long
putvarchr MEMORY_FILE 42 UNCOMP_BLOCKS long
string NAME p "%s/%04d.bundle" TMP_NAME FILES
get SIZE asize MEMORY_FILE
log NAME 0 SIZE MEMORY_FILE
math FILES + 1
goto OFFSET
next
已测试上面的bms脚本可以成功提取!太感谢了!!assetstudio工具可以识别!
好像quickbms没办法批量遍历文件夹,我也不会写bms脚本……我去向chatGPT请教帮我写了Python脚本,这下免去手动选择文件夹的烦恼了~如有需要可以复制下面代码,另存为.py脚本运行即可~
import os
import subprocess
# 设置路径
quickbms_path = r'E:\quickbms-0.12\quickbms_4gb_files.exe'
bms_script_path = r'E:\path\to\script.bms'
input_root = r'E:\path\to\input\folders'
output_root = r'E:\path\to\output\folders'
# 遍历输入文件夹
for root, dirs, files in os.walk(input_root):
for file in files:
# 构建输入文件路径
input_file = os.path.join(root, file)
# 构建相对路径和输出文件夹路径
relative_path = os.path.relpath(root, input_root)
output_folder = os.path.join(output_root, relative_path)
os.makedirs(output_folder, exist_ok=True)
# 调用 QuickBMS
try:
subprocess.run([quickbms_path, bms_script_path, input_file, output_folder], check=True)
print(f"Processed {input_file} -> {output_folder}")
except subprocess.CalledProcessError as e:
print(f"Error processing {input_file}: {e}")
print("All files processed successfully.")
其实不用这样,quickbms本来就支持批量,配置了环境变量直接用下面这个格式就行,没配置前面加个./
quickbms_4gb_files.exe -o -F “*.你要提取的文件格式” 你的bms文件名.bms “C:\路径\到\输入文件夹” “C:\路径\到\输出文件夹”
啊!原来如此!原来可以命令行运行,我都不知道,我还傻乎乎开GUI手动一个个点……看了下官网确实是有命令行帮助,感谢传授经验!我记下来~我这边没有配置环境变量,一会儿配置下,感谢!