Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Исходник [Сурс] APB Reloaded — Скрипт для автопоиска оффсетов (UE3)

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
658
Реакции
18
Народ, кто еще ковыряет APB или просто возится со старыми версиями UE3?

Попался в руки компактный, но рабочий скрипт на Python для автоматического поиска базовых оффсетов в дампе игры. Штука полезная, если вам лень каждый раз после микро-патчей лезть в IDA или ReClass, чтобы выцепить свежие GNames или GWorld.

Скрипт использует библиотеки pefile и capstone для корректного декодирования RIP-relative адресов. Логика простая: скрипт ищет сигнатуру, вычисляет относительное смещение и выплевывает готовый результат в JSON и лог-файл.

Что ищет из коробки:
  1. GNames (через lea rcx, [rip+offset])
  2. GObjects (mov rax, [rip+offset])
  3. GWorld (mov rbx, [rip+offset])
  4. UEngine
  5. ProcessEvent (пролог функции)

Код:
Expand Collapse Copy
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()

  1. Для работы нужен Python 3.x и установленные зависимости через pip: pefile, capstone, termcolor.
  2. Скрипт заточен под x64 билд APB. Если будете юзать для других игр на UE3, сверяйте паттерны.
  3. В качестве входного файла ожидается развернутый дамп APB_dump.exe.

Вердикт:
Это отличная база под допил собственного авто-апдейтера. Код чистый, без лишнего мусора, легко расширяется новыми паттернами под любые нужды. Если играете с External софтом, такая автоматизация сэкономит кучу времени.

Кто-нибудь уже пробовал адаптировать этот метод под поиск структур в других играх на Unreal Engine?
 
Назад
Сверху Снизу