- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 446
- Реакции
- 10
Народ, кто еще ковыряет APB или просто возится со старыми версиями UE3?
Попался в руки компактный, но рабочий скрипт на Python для автоматического поиска базовых оффсетов в дампе игры. Штука полезная, если вам лень каждый раз после микро-патчей лезть в IDA или ReClass, чтобы выцепить свежие GNames или GWorld.
Скрипт использует библиотеки pefile и capstone для корректного декодирования RIP-relative адресов. Логика простая: скрипт ищет сигнатуру, вычисляет относительное смещение и выплевывает готовый результат в JSON и лог-файл.
Что ищет из коробки:
Вердикт:
Это отличная база под допил собственного авто-апдейтера. Код чистый, без лишнего мусора, легко расширяется новыми паттернами под любые нужды. Если играете с External софтом, такая автоматизация сэкономит кучу времени.
Кто-нибудь уже пробовал адаптировать этот метод под поиск структур в других играх на Unreal Engine?
Попался в руки компактный, но рабочий скрипт на Python для автоматического поиска базовых оффсетов в дампе игры. Штука полезная, если вам лень каждый раз после микро-патчей лезть в IDA или ReClass, чтобы выцепить свежие GNames или GWorld.
Скрипт использует библиотеки pefile и capstone для корректного декодирования RIP-relative адресов. Логика простая: скрипт ищет сигнатуру, вычисляет относительное смещение и выплевывает готовый результат в JSON и лог-файл.
Что ищет из коробки:
- GNames (через lea rcx, [rip+offset])
- GObjects (mov rax, [rip+offset])
- GWorld (mov rbx, [rip+offset])
- UEngine
- ProcessEvent (пролог функции)
Код:
import pefile
import sys
import json
from capstone import *
from termcolor import colored
DUMP_FILE = "APB_dump.exe"
LOG_FILE = "OffsetScanLog.txt"
JSON_OUT = "DetectedOffsets.json"
# Define patterns to search for (simplified)
patterns = {
"GNames": b"\x48\x8D\x0D", # lea rcx, [rip+offset] (common pattern for GNames)
"GObjects": b"\x48\x8B\x05", # mov rax, [rip+offset]
"GWorld": b"\x48\x8B\x1D", # mov rbx, [rip+offset]
"UEngine": b"\x48\x8B\x0D", # mov rcx, [rip+offset]
"ProcessEvent": b"\x40\x53\x48\x83\xEC" # prologue of ProcessEvent
}
def find_offsets(data):
results = {}
for name, pattern in patterns.items():
offset = data.find(pattern)
if offset != -1:
# Decode RIP-relative address
try:
relative_offset = int.from_bytes(data[offset+3:offset+7], byteorder='little', signed=True)
address = offset + 7 + relative_offset
results[name] = hex(address)
print(colored(f"[✓] Found {name} at {hex(address)}", "green"))
except:
print(colored(f"[!] Failed decoding offset for {name}", "yellow"))
else:
print(colored(f"[X] {name} not found", "red"))
return results
def main():
try:
with open(DUMP_FILE, "rb") as f:
data = f.read()
except FileNotFoundError:
print(colored("Dump file not found!", "red"))
return
print(colored("�� Scanning dump for offsets...", "cyan"))
results = find_offsets(data)
with open(JSON_OUT, "w") as json_file:
json.dump(results, json_file, indent=4)
with open(LOG_FILE, "w") as log:
for key, value in results.items():
log.write(f"{key}: {value}\n")
print(colored(f"✅ Done! Results saved to {JSON_OUT} and {LOG_FILE}", "cyan"))
if __name__ == "__main__":
main()
- Для работы нужен Python 3.x и установленные зависимости через pip: pefile, capstone, termcolor.
- Скрипт заточен под x64 билд APB. Если будете юзать для других игр на UE3, сверяйте паттерны.
- В качестве входного файла ожидается развернутый дамп APB_dump.exe.
Вердикт:
Это отличная база под допил собственного авто-апдейтера. Код чистый, без лишнего мусора, легко расширяется новыми паттернами под любые нужды. Если играете с External софтом, такая автоматизация сэкономит кучу времени.
Кто-нибудь уже пробовал адаптировать этот метод под поиск структур в других играх на Unreal Engine?