├── JCZX_GUI.pyw └── README.md /JCZX_GUI.pyw: -------------------------------------------------------------------------------- 1 | import os 2 | import threading 3 | import tkinter as tk 4 | from tkinter import filedialog 5 | from tkinter.ttk import Progressbar 6 | 7 | def Decrypt(data: bytes) -> bytes: 8 | str_to_find = b'UnityFS' 9 | start = data.find(str_to_find, data.find(str_to_find)+1) 10 | return data[start:] 11 | 12 | def read_files(folder_label, current_file_label, progress): 13 | folder_path = filedialog.askdirectory() 14 | folder_label.config(text=f"AB包文件夹: {folder_path}") 15 | files = os.listdir(folder_path) 16 | progress['maximum'] = len(files) 17 | 18 | for i, file_name in enumerate(files): 19 | current_file_label.config(text=f"当前文件: {file_name}") 20 | try: 21 | with open(os.path.join(folder_path, file_name), 'rb') as f: 22 | data = f.read() 23 | if data[0:7].decode() != "UnityFS" : continue 24 | decrypted_data = Decrypt(data) 25 | try: 26 | os.makedirs('output', exist_ok=True) 27 | with open(f'output/{os.path.basename(file_name)}', 'wb') as output_file: 28 | output_file.write(decrypted_data) 29 | progress.step() 30 | except Exception as e: 31 | current_file_label.config(text=f"无法将文件写入'output'目录: {e}") 32 | return 33 | except Exception as e: 34 | current_file_label.config(text=f"无法打开文件{file_name}: {e}") 35 | return 36 | current_file_label.config(text="处理完成.") 37 | 38 | def start_read_files_thread(folder_label, current_file_label, progress): 39 | thread = threading.Thread(target=read_files, args=(folder_label, current_file_label, progress), daemon=True) 40 | thread.start() 41 | 42 | def main(): 43 | root = tk.Tk() 44 | root.title("交错战线 AssetBundle 解密器 By: Sakura Nyoru 2024-1-8") 45 | root.geometry("800x300") 46 | 47 | frame = tk.Frame(root) 48 | frame.place(relx=0.5, rely=0.5, anchor='center') 49 | 50 | folder_label = tk.Label(frame, text="AB包文件夹:") 51 | current_file_label = tk.Label(frame, text="当前处理文件:") 52 | button = tk.Button(frame, text="选择AB包文件目录", command=lambda: start_read_files_thread(folder_label, current_file_label, progress)) 53 | progress = Progressbar(frame, orient = 'horizontal', length = 300, mode = 'determinate') 54 | 55 | button.grid(row=0, column=0) 56 | folder_label.grid(row=1, column=0) 57 | current_file_label.grid(row=2, column=0) 58 | progress.grid(row=3, column=0) 59 | 60 | root.mainloop() 61 | 62 | if __name__ == "__main__": 63 | main() 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JCZX_Decrypter 2 | 3 | 交错战线 AssetBundle 解密器 4 | --------------------------------------------------------------------------------