Skip to content

About

Tools for World of Warcraft 3.3.5a

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

56 Commits

Folders and files

Repository files navigation

wotlk-utils

Исследовательский комплекс, Game SDK и набор инструментов для реверс-инжиниринга и разработки под World of Warcraft 3.3.5a (Wrath of the Lich King, Build 12340).

Проект объединяет в себе три ключевых направления:

  1. Внутриигровой модуль (wotlk.dll + injector.exe) — перехват функций, исследование и обход подсистемы античита Warden, Game SDK для прямого взаимодействия с движком клиента, навигация Detour и фреймворк игрового бота.
  2. Редактор карт и навигации (map-editor) — автономное высокопроизводительное 64-битное приложение на DirectX 11 и Dear ImGui для визуализации навигационных сеток (TrinityCore .mmaps), редактирования графов дорог и точек интереса (POI), анализа рельефа и симуляции поиска пути.
  3. Исследовательская база данных (docs/) — детальные технические статьи, дампы модулей Warden, анализ алгоритмов шифрования (SRP6, RC4), спецификации протоколов и скрипты автоматизированного анализа.

Содержание


Архитектура проекта

                           +-------------------------------------------+
                           |            WoW Client 3.3.5a              |
                           |                (Wow.exe)                  |
                           +---------------------+---------------------+
                                                 |
                   [In-Process Injection]        |  [Hardware Breakpoints + VEH]
                                                 v
  +------------------+     LoadLibraryExA      +-----------------------------------+
  |   injector.exe   | ----------------------> |             wotlk.dll             |
  |  (Console, x86)  |                         |        (C++20 In-Process)         |
  +------------------+                         +-----------------+-----------------+
           |                                                     |
           |-- Event-driven safe unload                          |-- Warden Bypass & Spoofing
           |   (wotlk_unload_event)                              |-- DirectX 9 ImGui Overlay & Radar
                                                                 |-- Game SDK (ObjectManager, Unit, Spell)
                                                                 |-- Detour Navmesh Navigation (NavHelper)
                                                                 +-- Bot Framework & Action Queue

  +--------------------------------------------------------------------------------+
  |                          map-editor (Standalone, x64)                          |
  |                 DirectX 11 + Dear ImGui + Recast/Detour + StormLib             |
  +--------------------------------------------------------------------------------+
           |                                                     |
           |-- 2D Canvas & 3D Orbit/Free Viewport                |-- Navmesh (.mmtile) Streaming
           |-- TrinityCore Terrain (.map) & Buildings (.vmtile)  |-- Detour Pathfinding Testing
           |-- World Graph & Road Graph Editor                   |-- Topology Validation & Height Sampling
           +-- Direct Import from Python Road Extraction Pipeline (ADT MCAL)

Компоненты системы

Модуль Архитектура Технологии Назначение
map-editor x64 Windows C++20, DirectX 11, Dear ImGui, Recast/Detour, StormLib Визуализатор навигационных сеток, 3D рельефа и редактор графов дорог/маршрутов
wotlk x86 (Win32) C++20, MinHook, DirectX 9, Dear ImGui, Recast/Detour, glog Внутриигровая DLL: Game SDK, обход Warden, оверлей, бот-логика
injector x86 (Win32) C++20, WinAPI, glog Загрузчик DLL в процесс Wow.exe с поддержкой горячей выгрузки без крашей
road_extraction Python 3.10+ NumPy, SciPy, scikit-image, NetworkX, StormLib Экстракция дорожной сети из альфа-карт текстур ADT в формат WorldGraphData
shared MSBuild / C++ Property sheets (.props), glog custom sinks Общая конфигурация компилятора, путей библиотек и логирования

1. Map Editor (Автономный 3D/2D редактор)

map-editor — это отдельное 64-битное десктопное приложение для работы с пространственными данными World of Warcraft 3.3.5a. Оно создано для визуализации геометрических структур движка, разметки путей перемещения персонажей и тестирования алгоритмов навигации вне игрового клиента.

Основные возможности

2D режим (2D Pan/Zoom Canvas)

  • Рендеринг Navmesh: Прямая загрузка тайлов TrinityCore .mmtile (Detour NavMesh с заголовками MMAP). Рендеринг триангулированной сетки проходимости через DirectX 11 с кешированием вершинных буферов и поддержкой уровней детализации (LOD).
  • Фоновые тайлы миникарты: Потоковое чтение текстур .blp напрямую из игровых архивов MPQ (через StormLib) с использованием таблицы трансляции хешей md5translate.trs.
  • Координатная сетка: Адаптивная сетка мира с шагом 10 / 100 / 1000 ярдов и отображением границ ADT тайлов (от 0,0 до 63,63).
  • Управление слоями: Независимое включение/отключение видимости слоев рендеринга (Navmesh, миникарта, сетка, POI-граф, дорожный граф, маршруты, путь тестирования).

3D режим (DirectX 11 Viewport)

  • Камера: Орбитальная камера (свободное вращение вокруг фокуса, масштабирование, панорамирование) и режим свободной камеры (WASD + мышь). Возможность привязки камеры к виртуальному агенту/игроку.
  • Геометрия рельефа: Потоковое чтение карт высот TrinityCore (.map), триангуляция рельефа с учетом отверстий (holes), динамическое направленное освещение и несколько режимов затенения (Solid, градиент высот, затенение по уклону).
  • WMO и M2 объекты: Загрузка моделей зданий и декораций из спавн-листов .vmtile.
  • Полупрозрачный Navmesh: Наложение сетки проходимости поверх 3D рельефа с регулируемой прозрачностью и подсветкой ребер.
  • Симуляция движения агента: Интерактивная установка стартовой и целевой точек, мгновенный расчет пути через Detour, анимация перемещения маркера игрока по траектории с настраиваемой скоростью (1x–10x).

Редактирование графов (World Graph & Road Graph)

  • Три режима работы: Только просмотр (Read-Only), редактирование POI-графа мира (World Graph) и редактирование дорожной сети (Road Graph).
  • Инструменты редактирования:
    • Draw Mode (D): Потоковое добавление цепочки узлов кликами мыши с автосоединением и автоматическим расщеплением ребер при клике на существующие сегменты.
    • Edge Mode (E): Создание направленных и двунаправленных связей между узлами.
    • Split Edge (S): Вставка нового узла в существующее ребро в точке курсора.
    • Групповые операции: выделение рамкой / лассо, объединение узлов (merge в центроид), выравнивание цепочек (straighten path), массовое изменение фракций и типов ребер.
  • Terrain Height Sampling: Инструмент автоматического проецирования узлов графа на рельеф местности с расчетом точной координаты Z.
  • Валидатор графа (Issue Panel): Автоматическое выявление топологических проблем — изолированных узлов (orphans), несвязных компонент, чрезмерно крутых уклонов, тупиков и разрывов между дорожными сегментами.
  • Undo / Redo: Полная история действий до 100 шагов с изолированными стеками для каждого типа графа.

2. Подсистема внутриигровой инжекции (wotlk.dll & injector.exe)

Модуль инжекции спроектирован для надежного внедрения исследовательского кода в адресное пространство 32-битного клиента Wow.exe.

  • injector.exe:
    • Находит запущенный процесс Wow.exe или переходит в режим ожидания его запуска.
    • Выполняет инжекцию через удаленный поток с флагом LOAD_WITH_ALTERED_SEARCH_PATH, гарантируя корректную подгрузку зависимостей DLL из рабочей папки.
    • Поддерживает безопасную команду горячей выгрузки:
      injector.exe --eject
  • wotlk.dll:
    • Инициализирует консоль отладки (AllocConsole) с включенной поддержкой ANSI-эскейп последовательностей для цветного логирования (Google glog).
    • Перехватывает вызовы DirectX 9 (EndScene / Reset), встраивая интерфейс Dear ImGui прямо в процесс игры.
    • Корректно завершает работу при выгрузке: восстанавливает оригинальные прологи перехваченных функций, закрывает дескрипторы и вызывает FreeLibraryAndExitThread, исключая взаимные блокировки (loader lock deadlocks).

3. Warden Reverse Engineering & Bypass

В проекте реализован комплексный исследовательский фреймворк для анализа и нейтрализации серверной системы защиты Warden (патч 3.3.5a):

  • Hardware Breakpoints + VEH (Vectored Exception Handling):
    • Использование отладочных регистров процессора DR0–DR3 для перехвата потока выполнения без модификации байтов в кодовых секциях памяти.
    • Позволяет полностью исключить детекты Warden, проверяющие собственную память и код игры на наличие байтов 0xE9 (JMP), 0xCC (INT3) или хуков MinHook.
  • Shadow Copy (.text section):
    • Формирование теневой копии оригинальной секции исполняемого кода игры, считанной непосредственно с чистого бинарного файла на диске.
    • Прозрачная подмена адресов чтения при сканировании памяти: когда Warden читает модифицированный участок кода (MEM_CHECK), ему возвращаются чистые оригинальные байты.
  • PEB Unlinking:
    • Исключение wotlk.dll из двухсвязных списков загруженных модулей PEB (InLoadOrderModuleList, InMemoryOrderModuleList, InInitializationOrderModuleList), что нейтрализует обнаружение через MODULE_CHECK.
  • Перехват криптографических контекстов RC4:
    • Перехват генератора псевдослучайной последовательности (PRGA) шифра RC4 внутри динамически подгружаемых модулей Warden.
    • Автоматическое определение соглашений о вызовах (поддерживается 6 вариантов calling convention) и захват незашифрованного открытого текста пакетов до их отправки на сервер.
    • Резервный механизм клонирования S-box (256-байтного массива состояний) в приватной памяти.
  • Подмена ответов (Spoofing):
    • Модуль автоматического синтеза корректных ответов на проверки: HASH_REQUEST, MODULE_CHECK, DRIVER_CHECK, PROC_CHECK, MPQ_CHECK, LUA_EVAL.
  • Статический и динамический анализ модулей:
    • Алгоритмический разбор RLE-упакованных полиморфных модулей Warden (не являющихся стандартными PE-файлами).
    • Поиск деревьев диспетчеризации (dispatch chains) и автоматическое извлечение таблиц типов проверок (type IDs).

4. Game SDK & Bot Framework

Game SDK представляет собой набор высокоуровневых C++ абстракций над внутренними структурами игрового клиента Build 12340:

Game SDK

  • ObjectManager: Потокобезопасный обход связанного списка игровых объектов, фильтрация по GUID и типу (игроки, NPC, игровые объекты, динамические объекты).
  • Unit & Player: Чтение характеристик (HP, мана, энергия, уровень, ауры, баффы/дебаффы, статус каста заклинаний).
  • Movement: Программный интерфейс к механизму ClickToMove (CTM), разворот персонажа (SetFacing), прыжки и контроль остановки.
  • Spell: База заклинаний, проверка кулдаунов, вызов заклинаний по ID и имени.
  • LuaBridge: Выполнение защищенного внутриигрового Lua-кода через движок FrameScript_Execute с возвратом значений в C++.
  • SEH Memory Guard: Безопасное чтение памяти структур через Structured Exception Handling (__try / __except), предотвращающее аварийное падение клиента при обращении к невалидным указателям.

Bot & Navigation Framework

  • NavHelper: Интеграция библиотеки Detour NavMesh непосредственно в процесс клиента. Построение гладких траекторий на основе TrinityCore .mmaps.
  • NPC-Avoidance Pathfinding: Динамический скан угроз вокруг персонажа с огибанием зон агро враждебных мобов при расчете маршрута.
  • CTM Stop Fix: Корректная остановка персонажа при достижении путевых точек без микрорывков и паразитных пакетов движения.
  • Action Queue & Tools: Очередь модульных действий бота (move_to, interact, loot, wait, инструменты работы с квестами и диалогами NPC).
  • Radar Overlay: Внутриигровой 2D-радар на Dear ImGui с отображением окружающих мобов, уровня их агрессии, игроков и линии проложенного навигационного пути.

5. Python Pipeline: Road Extraction

В директории map-editor/docs/scripts/road_extraction/ расположен автономный инструмент на Python для автоматического извлечения геометрии дорог из игровых архивов MPQ:

cd map-editor/docs/scripts/road_extraction
python -m src.main --client "C:\Games\World of Warcraft 3.3.5a" --map Azeroth --all
  • Принцип работы:
    1. Извлечение файлов ландшафта .adt из MPQ архивов через StormLib.
    2. Декодирование альфа-карт текстур (MCAL чанки) и сопоставление текстур дорог (брусчатка, гравий, грунтовые дороги) по сигнатурам.
    3. Бинаризация масок проходимости, скелетизация через scikit-image.
    4. Построение графа с помощью NetworkX, фильтрация коротких паразитных тупиков и упрощение ломаных алгоритмом Рамера — Дугласа — Пекера (RDP).
    5. Экспорт дорожной сети в формат JSON, полностью совместимый с загрузчиком WorldGraphData в map-editor.

Структура репозитория

wotlk-utils/
├── injector/                     # Загрузчик DLL (x86 Console Application)
│   ├── src/                      # Точка входа, логика инжекции и выгрузки
│   └── injector.vcxproj          # Проект Visual Studio
│
├── map-editor/                   # Standalone 3D/2D редактор карт и навигации (x64)
│   ├── src/
│   │   ├── camera/               # Орбитальная и свободная 3D камеры
│   │   ├── data/                 # Чтение .map, .vmtile, .mcal, кэширование
│   │   ├── editor/               # Инструменты рисования узлов, ребер, Undo/Redo
│   │   ├── mpq/                  # Интеграция со StormLib для чтения BLP и DBC
│   │   ├── navmesh/              # Загрузка TrinityCore mmaps и интеграция Detour
│   │   ├── render/               # DX11 пайплайн: террейн, navmesh, 3D оверлеи
│   │   └── ui/                   # Панели Dear ImGui (слои, свойства, лог, легенда)
│   ├── docs/                     # Документация редактора, форматы и чейнджлоги
│   │   └── scripts/
│   │       └── road_extraction/  # Python пайплайн экстракции дорог из ADT
│   └── map-editor.vcxproj        # Проект Visual Studio
│
├── wotlk/                        # Внутриигровая библиотека (x86 In-Process DLL)
│   ├── src/
│   │   ├── bot/                  # Фреймворк бота, тулы, очередь действий
│   │   ├── game/                 # Game SDK: ObjectManager, Unit, Spell, Movement, Lua
│   │   ├── hooks/                # DirectX9, MinHook, FrameScript, HWBP + VEH хуки
│   │   ├── navigation/           # Внутриигровой навигатор NavHelper (Detour)
│   │   ├── offsets/              # Смещения функций и полей для Build 12340
│   │   ├── overlay/              # Dear ImGui оверлей, 2D радар, монитор статов
│   │   └── warden/               # Модуль анализа, дешифрования и обхода Warden
│   ├── docs/                     # Исследования, статьи по протоколу, офсеты, задачи
│   │   ├── game_data/            # Дампы модулей Warden, DBC файлы, графы
│   │   ├── reference/            # Научные реверс-инжиниринг пейперы и офсеты
│   │   └── scripts/              # Python скрипты анализа диспетчеров Warden
│   └── wotlk.vcxproj             # Проект Visual Studio
│
├── shared/                       # Общие .props файлы MSBuild (vcpkg, ImGui, Detour, glog)
└── wotlk-utils.sln               # Главное решение Visual Studio 2022

Сборка и запуск

Требования

  • ОС: Windows 10 / 11 (x64)
  • IDE: Visual Studio 2022 (с установленным набором «Разработка классических приложений на C++»)
  • Стандарт C++: C++20
  • Пакетный менеджер: vcpkg
  • Python: 3.10+ (опционально, для скриптов анализа и экспорта дорог)

Установка зависимостей через vcpkg

Перед сборкой установите необходимые библиотеки. Обратите внимание на разрядность: внутриигровой модуль и инжектор компилируются под x86, а редактор карт — строго под x64.

# 1. Зависимости для wotlk.dll и injector (x86 / Win32)
vcpkg install glog:x86-windows
vcpkg install minhook:x86-windows-static-md
vcpkg install recastnavigation:x86-windows-static-md

# 2. Зависимости для map-editor (x64)
vcpkg install imgui[dx11-binding,win32-binding]:x64-windows
vcpkg install glog:x64-windows
vcpkg install nlohmann-json:x64-windows
vcpkg install recastnavigation:x64-windows
vcpkg install stormlib:x64-windows

Примечание: Если ваш каталог vcpkg установлен не в C:\vcpkg, скорректируйте пути в файлах shared/*.props.

Сборка проектов

  1. Откройте файл решения wotlk-utils.sln в Visual Studio 2022.
  2. Сборка внутриигровых компонентов (wotlk и injector):
    • Выберите конфигурацию Release (или Debug) и платформу Win32 (x86).
    • Выполните сборку проектов injector и wotlk.
  3. Сборка редактора карт (map-editor):
    • Переключите платформу на x64.
    • Выполните сборку проекта map-editor. Необходимые динамические библиотеки (glog.dll, StormLib.dll и др.) автоматически скопируются в выходную директорию сборки.

Быстрый старт

Использование Map Editor

  1. Запустите map-editor.exe.
  2. В верхнем меню укажите пути к игровым ресурсам:
    • File > Set mmaps Directory — выберите папку mmaps/ (данные навигации TrinityCore).
    • File > Set WoW Directory — укажите корень установленной игры WoW 3.3.5a (для чтения текстур миникарты из MPQ архивов).
  3. Загрузите граф мира через File > Open World Graph... (например, wotlk/docs/game_data/world_graph.json).
  4. Для переключения в 3D режим нажмите Ctrl+2 (возврат в 2D — Ctrl+1).
  5. Для симуляции пути кликните на карте правой кнопкой мыши или используйте сочетания Ctrl+Click (старт) и Shift+Click (финиш).

Использование Инжектора и DLL

  1. Запустите injector.exe (приложение перейдет в режим ожидания клиента).
  2. Запустите клиент Wow.exe версии 3.3.5a (12340).
  3. Инжектор автоматически внесет библиотеку wotlk.dll, после чего в отдельном консольном окне отобразится лог перехвата функций и статус подсистемы Warden.
  4. Внутри игры появится оверлей ImGui со статистикой персонажа и навигационным радаром.
  5. Для корректной выгрузки DLL выполните:
    injector.exe --eject

Дисклеймер

Данный проект разработан исключительно в образовательных, исследовательских целях и для обратной разработки (reverse engineering) программного обеспечения. Все материалы предоставляются по принципу «как есть». Разработчики не поощряют использование данных наработок для нарушения пользовательских соглашений на публичных игровых серверах.

About

Tools for World of Warcraft 3.3.5a

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages