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

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

Обратите внимание, что на пользователя недавно была жалоба: Жалоба от lovehvhneverlose на hex_cat. Будьте осторожны!
Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
446
Реакции
10
Народ, кто еще ковыряет 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?
 
Назад
Сверху Снизу