View Full Version : [KT] Đã hiểu vì sao không thể unpack mà không có danh sách file
hdvd2309
13-03-25, 11:47 PM
Em băn khoăn vì sao các tool có tên file thì có thể lấy được dữ liệu, nhưng lại không thể lấy được tên file từ file pak. Lý do đơn giản là tên file đã bị băm (hash) nên có thể dựa trên mã hash này để so sánh với ID file trong pak để lấy ra file, nhưng không thể từ ID suy ra được tên file ban đầu.
Muốn lấy tên file ban đầu thì có 1 vài cách như sau:
1. lấy file .pak.txt trước. Tuy nhiên có thể sẽ không có file này hoặc file này có nhưng liệt kê không đầy đủ file con
2. dùng chương trình như Cheat Engine để search các string như .txt .lua .ini để tìm file
hdvd2309
13-03-25, 11:55 PM
def file_name_to_id(filename: str) -> int:
hash_val = 0
counter = 0
for char in filename:
# Chuyển thành chữ thường nếu là chữ hoa
if 'A' <= char <= 'Z':
char = chr(ord(char) + 0x20) # hoặc char = char.lower()
counter += 1
char_value = ord(char)
temp_eax = char_value * counter
temp_eax += hash_val
quotient = temp_eax // 0x8000000B
remainder = temp_eax % 0x8000000B
hash_val = (remainder * (-0x11)) & 0xFFFFFFFF # Đảm bảo unsigned 32-bit
return hash_val ^ 0x12345678
filename = r"\ui\script\window\playerstate.lua"
id_val = file_name_to_id(filename)
print(f"ID: {hex(id_val)}")
Thuật toán hash viết bằng Python. ID sau đó sẽ được vứt vào chương trình unpack để tìm ra vị trí của file và unpack file.
Tuy vậy như đã nói ở trên là không có tool nào giúp unpack mà tìm ra được tên file gốc, vì nó đã bị hash :D
dragonwall
14-03-25, 10:25 PM
Về mặt kỹ thuật nó là một Cấu trúc dữ liệu dạng "Bảng Băm" (Hash Table) chỉ có duy nhất khóa (Key) và Giá trị (Value). Nếu ai dân CNTT khi tôi nói đến chắc chắn sẽ biết cái này :))
Với mục tiêu là tăng tốc độ xử lý truy xuất tìm kiếm thông tin chứ không phục vụ cho vấn đề quản lý. Chính vì vậy, nếu họ quan tâm đến vấn đề tên gốc thì họ nhất định sẽ bổ sung vào cây Value đó chứ chẳng phải dạng mã hóa theo công thức mà để cho các bạn lần ngược!
Không chỉ riêng Kiếm Thế và các dòng khác như JX1, JX2 đều là chung một gốc, chung quy tắc.
-------------------------------------------------------------------
Đối với vấn đề tìm về file gốc, chỉ có 3 cách :
Nếu bạn có khả năng lập trình tốt bạn có thể sử dụng các kỹ thuật chuyên sâu để thâm nhập vào quá trình đọc dữ liệu.
Nhẹ nhàng hơn, dùng một ứng dụng bên thứ ba lấy thông tin lịch sử đọc ghi của ứng dụng (bạn có thể tìm lần về các bài viết xưa bên Box hướng dẫn của JX1).
Nếu bạn am hiểu hết 2 phần trên rồi thì không quan tâm trong đó có thứ gì, thay vì giải hết rồi nén lại thì bây giờ sẽ cập nhật đè thẳng lên gói pack đó và thực hiện như một "update" tương tự như Vng, KS. Nó là cách nhanh gọn nhẹ, nhưng với các Tool đến thời điểm hiện tại tôi vẫn chưa thấy ai chia sẻ tính năng này vào :-?? ??
-------------------------------------------------------------------
Và cuối cùng kết luận: xin khẳng định với những bạn mới thì đây là mã một chiều và khi bạn muốn lần ngược về tên gốc thì xin thưa là: Không thể
Powered by vBulletin® Version 4.2.0 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.