如题
貌似是包内部分有加密,BOSS怪物之类的没加密,角色全加密了
馋得不得了只能说(
# script for decrypting bundles from ASTRA: Knights of Veda (.resource)
# created by spiritovod
get CHECK extension
if CHECK != "resource"
cleanexit
endif
get KEY filename
get FOLDER filepath
string FOLDER ! "\"
string NAME p "decrypted/%s/%s" FOLDER KEY
math HEADER = 0x40
encryption xor KEY
log NAME 0 HEADER
encryption "" ""
get SIZE asize
math SIZE - HEADER
append
log NAME HEADER SIZE
基本没静态立绘,没意思
佬 我该用什么方法来运行这段代码?
同问
牛
解出来了,感谢大佬
大佬 能不能说一下 怎么运行这段代码
把代码命名为.bms文件,用quickbms运行,然后用assetstudio打开。但是不知道为什么我没解密成功,只是把源文件复制到输出目录里了。请教路过的大佬
import os
import subprocess
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
import fnmatch
import threading
def get_quickbms_executable(file_path):
file_size = os.path.getsize(file_path)
# 检查文件大小是否大于3GB
if file_size > 3 * 1024 * 1024 * 1024:
return “quickbms_4gb_files.exe”
else:
return “quickbms.exe”
def extract_files(bms_script, input_folder, file_pattern, progress_var, total_files):
current_files = 0
for root, dirs, files in os.walk(input_folder):
for filename in fnmatch.filter(files, file_pattern):
file_path = os.path.join(root, filename)
quickbms_executable = get_quickbms_executable(file_path)
output_folder_name = os.path.splitext(filename)[0]
output_folder = os.path.join(root, output_folder_name)
if not os.path.exists(output_folder):
os.makedirs(output_folder)
command = [quickbms_executable, "-o", "-F", file_pattern, bms_script, file_path, output_folder]
subprocess.run(command, check=True)
# 更新进度
current_files += 1
progress_var.set((current_files / total_files) * 100)
window.update_idletasks() # 更新Tkinter界面
def select_bms_script():
return filedialog.askopenfilename(filetypes=[(“BMS files”, “*.bms”)])
def select_input_folder():
return filedialog.askdirectory()
def select_file_pattern():
pattern = tk.simpledialog.askstring(“Input”, “Enter the file extension pattern to extract (e.g., '.ext’):“, initialvalue=”.file”)
return pattern
def on_extract():
bms_script = bms_script_path.get()
input_folder = input_folder_path.get()
file_pattern = file_pattern_path.get()
if not bms_script or not input_folder or not file_pattern:
messagebox.showerror("Error", "All fields are required.")
return
# 统计文件数量
total_files = 0
for root, dirs, files in os.walk(input_folder):
total_files += len(fnmatch.filter(files, file_pattern))
# 设置进度变量
progress_var = tk.DoubleVar()
# 启动解包线程
threading.Thread(target=extract_files, args=(bms_script, input_folder, file_pattern, progress_var, total_files)).start()
# 创建进度条
progress_bar = ttk.Progressbar(window, orient="horizontal", length=100, mode="determinate", maximum=100, variable=progress_var)
progress_bar.grid(row=4, column=0, columnspan=3, padx=10, pady=10)
def main():
global window
window = tk.Tk()
window.title(“quickbms批量解包工具”)
window.geometry(“800x600”)
# Create entry fields
global bms_script_path, input_folder_path, file_pattern_path
bms_script_path = tk.StringVar()
input_folder_path = tk.StringVar()
file_pattern_path = tk.StringVar()
# Create and place labels and entry fields
tk.Label(window, text="选择BMS脚本:").grid(row=0, column=0, padx=10, pady=10)
tk.Entry(window, textvariable=bms_script_path).grid(row=0, column=1, padx=10, pady=10)
tk.Label(window, text="选择文件夹:").grid(row=1, column=0, padx=10, pady=10)
tk.Entry(window, textvariable=input_folder_path).grid(row=1, column=1, padx=10, pady=10)
tk.Label(window, text="输入文件后缀名:").grid(row=2, column=0, padx=10, pady=10)
tk.Entry(window, textvariable=file_pattern_path).grid(row=2, column=1, padx=10, pady=10)
# Create buttons for selecting script and folder
tk.Button(window, text="选择脚本", command=lambda: bms_script_path.set(select_bms_script())).grid(row=0, column=2, padx=10, pady=10)
tk.Button(window, text="选择路径", command=lambda: input_folder_path.set(select_input_folder())).grid(row=1, column=2, padx=10, pady=10)
tk.Button(window, text="选择后缀名", command=lambda: file_pattern_path.set(select_file_pattern())).grid(row=2, column=2, padx=10, pady=10)
# Create extract button
tk.Button(window, text="解包", command=on_extract).grid(row=3, column=0, columnspan=3, padx=10, pady=10)
window.mainloop()
if name == “main”:
main()
复制这个代码,改成py文件 放到quickbms目录里 双击运行就行了 我也是看你的才知道这个是bms文件代码
厉害啊,直接写个GUI
代码用了,还是不行,因为本质还是调用quickbms,不知道怎么回事还是解不开。可能是我的电脑问题,能分享一下解密后的包吗?
解完 用AS了吗 我这边完全正常
不行,看quickbms控制台信息就是把resource复制了一遍
重新下一个试试
不行,只是把文件复制了一遍,as读取不了
路過實測了一下,該bms代碼只能用於手游端,pc版本不行。會解密失敗。
感谢大佬
原来如此,当时百思不得其解,最后还在脚本中加了调试日志,发现根本没有解密过程,原来都是因为用的端游的缘故