[KT] Chia sẻ script Python để dump nhanh danh sách file trong file pak
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Kết quả 1 đến 4 của 4
  1. #1
    Thành Viên
    Ngày tham gia
    Dec 2015
    Bài viết
    10
    Thanks
    6
    Thanked 3 Times in 3 Posts

    Chia sẻ script Python để dump nhanh danh sách file trong file pak

    Như các bạn đã biết để có được danh sách file thuộc file pak thì phải tự mày mò khá lâu nếu không biết cách.
    Nay mình viết 1 chương trình python tự động chạy game và bắt những file mà game gọi tới. Bạn chỉ cần bật script là game sẽ tự chạy và chơi 1 lúc là đã có danh sách file để unpack rồi.
    Script cũng khá đơn giản nên mình không giải thích nhiều. Nếu ai chưa hiểu script (không phải dân code) thì có thể hỏi trên đây mình sẽ chỉ đầy đủ.
    Script có 1 nhược điểm là không lấy được chính xác tên file Trung Quốc do file Trung Quốc đặt encoding kiểu gì đó, mình thử decode nhưng không ra đúng ký tự.

    Python code:

    import frida
    import sys
    import os

    # Định nghĩa phần prefix cần loại bỏ
    PREFIX_TO_REMOVE = r"D:\Kiem-the-client"

    # Tên file lưu kết quả
    OUTPUT_FILE = "file_paths.txt"

    # Đảm bảo file được tạo mới (nếu cần) với mã hóa UTF-8
    if not os.path.exists(OUTPUT_FILE):
    with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
    pass

    # Tạo tập hợp lưu các đường dẫn đã ghi
    saved_paths = set()
    if os.path.exists(OUTPUT_FILE):
    with open(OUTPUT_FILE, "r", encoding="utf-8") as f:
    for line in f:
    saved_paths.add(line.strip())

    # Hàm callback xử lý message từ Frida script
    def on_message(message, data):
    if message['type'] == 'send':
    path = message['payload']
    # Loại bỏ phần prefix nếu có
    if path.startswith(PREFIX_TO_REMOVE):
    path = path[len(PREFIX_TO_REMOVE):]
    # Nếu đường dẫn chưa được lưu thì ghi vào file
    if path not in saved_paths:
    saved_paths.add(path)
    with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
    f.write(path + "\n")
    elif message['type'] == 'error':
    print("[!] Lỗi từ script:", message['stack'])

    # Khởi chạy game.exe qua Frida
    pid = frida.spawn(["game.exe"])
    session = frida.attach(pid)

    # Script hook hàm CreateFileA trong kernel32.dll
    script = session.create_script("""
    const CreateFileA = Module.getExportByName("kernel32.dll", "CreateFileA");

    Interceptor.attach(CreateFileA, {
    onEnter: function (args) {
    var lpFileName = Memory.readAnsiString(args[0]);
    send(lpFileName);
    }
    });
    """)

    script.on("message", on_message)
    script.load()

    # Tiếp tục tiến trình game.exe
    frida.resume(pid)
    print("[*] Đang theo dõi CreateFileA... Nhấn Ctrl+C để dừng.")

    try:
    sys.stdin.read()
    except KeyboardInterrupt:
    print("\n[!] Kết thúc theo dõi.")
    session.detach()
    Khách viếng thăm hãy cùng hdvd2309 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. Các thành viên gởi lời cảm ơn đến hdvd2309 vì bài viết này !

    quan2051993 (14-03-25)

  3. #2
    ⚔ Nà Ní Team ⚔ ZhouJieLun's Avatar
    Ngày tham gia
    Dec 2012
    Đang ở
    Đà Lạt city
    Bài viết
    1,998
    Thanks
    220
    Thanked 1,004 Times in 390 Posts

    Ðề: Chia sẻ script Python để dump nhanh danh sách file trong file pak

    TQ hình như xài 8859-1
    [Only registered and activated users can see links. ] 2008
    [Only registered and activated users can see links. ] 2013
    [Only registered and activated users can see links. ] english
    [Only registered and activated users can see links. ] 2010 windows 1click

  4. Các thành viên gởi lời cảm ơn đến ZhouJieLun vì bài viết này !

    hdvd2309 (14-03-25)

  5. #3
    Dev Jx2 ookurooo's Avatar
    Ngày tham gia
    May 2011
    Đang ở
    Biện Kinh
    Bài viết
    731
    Thanks
    222
    Thanked 162 Times in 130 Posts

    Ðề: Chia sẻ script Python để dump nhanh danh sách file trong file pak

    Code:
    import frida
    import sys
    import os
    
    # Định nghĩa phần prefix cần loại bỏ
    PREFIX_TO_REMOVE = r"D:\Kiem-the-client"
    
    # Tên file lưu kết quả
    OUTPUT_FILE = "file_paths.txt"
    
    # Đảm bảo file được tạo mới (nếu cần) với mã hóa UTF-8
    if not os.path.exists(OUTPUT_FILE):
    	with open(OUTPUT_FILE, "w", encoding="utf-8") as f: pass
    
    # Tạo tập hợp lưu các đường dẫn đã ghi
    saved_paths = set()
    if os.path.exists(OUTPUT_FILE):
    	with open(OUTPUT_FILE, "r", encoding="utf-8") as f:
    		for line in f: saved_paths.add(line.strip())
    
    # Hàm callback xử lý message từ Frida script
    def on_message(message, data):
    	if message['type'] == 'send': path = message['payload']
    		# Loại bỏ phần prefix nếu có
    		if path.startswith(PREFIX_TO_REMOVE): path = path[len(PREFIX_TO_REMOVE):]
    		# Nếu đường dẫn chưa được lưu thì ghi vào file
    		if path not in saved_paths:
    			saved_paths.add(path)
    			with open(OUTPUT_FILE, "a", encoding="utf-8") as f: f.write(path + "\n")
    	elif message['type'] == 'error': print("[!] Lỗi từ script:", message['stack'])
    
    # Khởi chạy game.exe qua Frida
    pid = frida.spawn(["game.exe"])
    session = frida.attach(pid)
    
    # Script hook hàm CreateFileA trong kernel32.dll
    script = session.create_script("""
    	const CreateFileA = Module.getExportByName("kernel32.dll", "CreateFileA");
    	Interceptor.attach(CreateFileA, {
    		onEnter: function (args) {
    			var lpFileName = Memory.readAnsiString(args[0]);
    			send(lpFileName);
    		}
    	});
    """)
    
    script.on("message", on_message)
    script.load()
    
    # Tiếp tục tiến trình game.exe
    frida.resume(pid)
    print("[*] Đang theo dõi CreateFileA... Nhấn Ctrl+C để dừng.")
    
    try: sys.stdin.read()
    except KeyboardInterrupt:
    	print("\n[!] Kết thúc theo dõi.")
    	session.detach()

    ông thớt chỉnh lại indent đi, python dùng indent phân biệt block mà ông chơi thẳng tuột

    à mà file tên là ansi thì sao không lưu ở ansi mà utf8 ?
    với lại có thể mở file 1 lần rồi ghi trong hết 1 session chứ cứ đóng mở file liên tục
    Lần sửa cuối bởi ookurooo, ngày 17-03-25 lúc 09:47 AM.
    hóng được share jx2

  6. Các thành viên gởi lời cảm ơn đến ookurooo vì bài viết này !

    hdvd2309 (17-03-25)

  7. #4
    Thành Viên
    Ngày tham gia
    Dec 2015
    Bài viết
    10
    Thanks
    6
    Thanked 3 Times in 3 Posts

    Ðề: Chia sẻ script Python để dump nhanh danh sách file trong file pak

    Vâng indent là e hơi lười
    Tại e nghĩ 1 số đường dẫn có thể là tiếng Trung nên lưu UTF-8.
    Đọc ghi file thì đúng rồi ạ, đang làm k tối ưu.
    Tks bác đã chia sẻ.
    Khách viếng thăm hãy cùng hdvd2309 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 

Các Chủ đề tương tự

  1. [JX] [Help] Pak Thư Mục UI hoặc spr thành data file pak
    Bởi robjnsonsh trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 2
    Bài viết cuối: 27-04-19, 08:07 AM
  2. Giúp em sửa lỗi khi Pak file Sound.pak với ạ
    Bởi hackonline trong diễn đàn Chinh Đồ
    Trả lời: 0
    Bài viết cuối: 03-10-17, 11:48 AM
  3. [JX] Mấy tiền bối ai biết Pak file thành đuôi .pak rồi gộp lại hog?
    Bởi heodat139 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 0
    Bài viết cuối: 08-08-15, 11:47 AM
  4. Blender Cookie: Introduction to Python Scripting for Blender Artists
    Bởi apple2000 trong diễn đàn Thư Viện Software
    Trả lời: 0
    Bài viết cuối: 20-10-14, 12:30 AM
  5. [CROSSFIRE] Server incomplete [python] Emulator
    Bởi hichay trong diễn đàn Các Server Không Nằm Trong Box
    Trả lời: 29
    Bài viết cuối: 31-08-14, 09:45 AM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 01:25 PM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.