Current time: 06.02.2023, 03:20 Hello There, Guest! (LoginRegister)
Language: english | russian  

Poll: Интересно ли вам научиться самим находить необходимые данные в exe игры без посторонней помощи?
This poll is closed.
Да! 57.14% 8 57.14%
Конечно же ДА!!! 42.86% 6 42.86%
[...] 0% 0 0%
Total 14 votes 100%
* You voted for this item. [Show Results]

Post Reply 
Threaded Mode | Linear Mode
Реверс игры для новичков
» Небольшой туториал по нахождению данных для UN:C
Author Message
Berserker Offline
Administrators

Posts: 15924
Post: #61

Да ладно. Куча статических структур, весь вог в статике. Если память выделяется динамически, то проще всё, конечно. Просто перезаписываем адрес. Вот только если память очищается время от времени, выделять нужно её геройской функцией malloc.

Эра патчит много вог-кода. А там статические адреса. UN:C тоже работает со статическими. Вот где хранится единственно верный указатель на массив информации о монстрах в игре?
В OnAfterWoG достаточно вызвать RedirectMemoryBlock. Для бОльшей совместимости могу адреса следующих структур получать при отсутствии перенаправлений из указателей:

Code:
procedure OnAfterStructRelocations (Event: GameExt.PEvent); stdcall;
begin
  SecSkillNames := GameExt.GetRealAddr(SecSkillNames);
  SecSkillDescs := GameExt.GetRealAddr(SecSkillDescs);
  SecSkillTexts := GameExt.GetRealAddr(SecSkillTexts);
  MonInfos      := GameExt.GetRealAddr(MonInfos);
  ArtInfos      := ppointer(ArtInfos)^;
  Spells        := GameExt.GetRealAddr(Spells);
end;

SecSkillNames: PSecSkillNames = Ptr($698BC4);
SecSkillDescs: PSecSkillDescs = Ptr($698C34);
SecSkillTexts: PSecSkillTexts = Ptr($698D88);
Spells: PSpells = Ptr($7BD2C0);
MonInfos: PMonInfos = Ptr($7D0C90);
ArtInfos: PArtInfos = Ptr($660B68);

Только указатели в студию. Вторичные навыки (имена, описания), заклинания, монстры, артефакты.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
03.09.2022 12:47
Find all posts by this user Quote this message in a reply
XEPOMAHT Online
Moderators

Posts: 1996
Post: #62

(03.09.2022 06:26)wessonsm Wrote:  Расширение и перенос структуры в памяти как делается?

Зависит от того, где хранится структура и как к ней обращается код игры. Самый простой способ переноса - для динамических стуктур в динамической памяти, размер которых заранее не определён (там можно обойтись бинарным патчем, т.к. всё делает сам движок игры при создании структуры в памяти, т.е. патчится только конструктор и дезруктор). Посложнее - статические структуры в статической/динамической памяти - там придётся выделить память и перенести всю адресацию: в зависимости от сложности это может быть всего 1 адрес (когда игра всегда получает доступ с помощью базовой адресации, что очень удобно для переноса структуры) или например 2000. Ну и самое сложное в Третьих Героях - структуры, которые игра хранит в стеке: для переноса этих структур потребуется расширение выделяемой стековой памяти или перенос в динамическую память с заменой всех участков кода. В общем, рекомендую начинать с самого простого (в исходниках плагинов на новые артефакты или новых монстров), а потом уже переходит к более сложному.

(03.09.2022 06:26)wessonsm Wrote:  Я так понимаю, нужно пропатчить все места в коде игры, где идет обращение к полям этой структуры?

Да, абсолютно все.

(03.09.2022 06:26)wessonsm Wrote:  А как тогда убедиться, что нашли действительно ВСЕ такие места?

Методом научного тыка. Переносим и смотрим, работает ли вообще игра, если что-то начинает работать не так или вообще не работает - значит перенесено не всё. Когда появится опыт, то количество ошибок будет меньше.

(03.09.2022 06:26)wessonsm Wrote:  Ведь значительная часть кода не разобрана даже.

Для переноса структур исполнительный код разбирать практически не потребуется. Самое главное, чтобы была разобрана сама структура.

(03.09.2022 11:45)daemon_n Wrote:  сколько ни видел обращений к структурам, они все по ссылке идут.

Далеко не все. Оригинальных базовых адресов с десяток вряд ли наберётся. А вот если одна структура является частью тонны других структур, то её вообще очень затратно переносить (например структуру слотов армии вряд ли кто-то захочет переносить - ради добавления 8-го слота придётся переделать чуть ли не половину игрового кода, что может сделать только конченный психопат-задрот).

(03.09.2022 11:45)daemon_n Wrote:  Так понимаю, уведомить Эру надо, потому что она раньше всех плагинов на адреса цепляется?

До сих пор не понимаю, зачем это было сделано в Эре. Та же HoA совмещается с HD-модом по части перенесённых структур с помощью базовых адресов, что было унаследовано и в версии HD-мода для Эры, за счёт чего HD-мод видит новых монстров, новые артефакты и даже новые города.
03.09.2022 15:04
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15924
Post: #63

SecSkillNames: PSecSkillNames = Ptr($698BC4);
SecSkillDescs: PSecSkillDescs = Ptr($698C34);
SecSkillTexts: PSecSkillTexts = Ptr($698D88);
Spells: PSpells = Ptr($7BD2C0);
MonInfos: PMonInfos = Ptr($7D0C90);
ArtInfos: PArtInfos = Ptr($660B68);

Это список прямых адресов. Можешь написать надёжные, по твоему мнению, адреса указателей на данные статичные адреса.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
03.09.2022 19:24
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4204
Post: #64

Berserker, получается, надо переписывать вог 96-copy
Там такая муть, честно говоря. Что эти командиры, что опыт армии, что этот Erm...
Вынести бы это всё в отдельный плагин, а сама ERA основывалась бы на SoD


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
03.09.2022 23:20
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Online
Moderators

Posts: 1996
Post: #65

(03.09.2022 19:24)Berserker Wrote:  SecSkillNames: PSecSkillNames = Ptr($698BC4);

mov dword [4E6C00h], Таблица_имён_навыков
mov byte [4E6C4Bh], Количество_навыков

(03.09.2022 19:24)Berserker Wrote:  SecSkillDescs: PSecSkillDescs = Ptr($698C34);

mov dword [4E6C10h], Таблица_описаний_навыков

(03.09.2022 19:24)Berserker Wrote:  SecSkillTexts: PSecSkillTexts = Ptr($698D88);

mov dword [4E6C1Ah], Таблица_текстов_навыков

(03.09.2022 19:24)Berserker Wrote:  Spells: PSpells = Ptr($7BD2C0);

4. Структура заклинаний:

* Базовый адрес = [687FA8h]
* Количество заклинаний = байт [402902h] (c чит-кода на все заклинания, лимит 128, всё равно больше никто никогда не сделает)

(03.09.2022 19:24)Berserker Wrote:  MonInfos: PMonInfos = Ptr($7D0C90);

1. Структура монстров:

* Базовый адрес = [6747B0h]
* Количество монстров в игре = [5C8047h]

(03.09.2022 19:24)Berserker Wrote:  ArtInfos: PArtInfos = Ptr($660B68);

3. Структура артефактов:

* Базовый адрес = [660B68h]
* Количество артефактов = [44CCA8h]/4-2 (из загрузчика artraits.txt, так как количество артефактов игра никуда не пишет и нигде не проверяет)

(03.09.2022 19:24)Berserker Wrote:  Это список прямых адресов. Можешь написать надёжные, по твоему мнению, адреса указателей на данные статичные адреса.

Вполне подходят из загрузчиков текстовиков, т.к. их код вряд ли кто-то станет менят.

(03.09.2022 23:20)daemon_n Wrote:  
Berserker, получается, надо переписывать вог 96-copy
Там такая муть, честно говоря. Что эти командиры, что опыт армии, что этот Erm...
Вынести бы это всё в отдельный плагин, а сама ERA основывалась бы на SoD

В ERA+ в процессе. Но чистого СоДа не будет никогда, т.к. жизненно необходимый минимум воговского кода всё равно останется. Да, практически весь игровой воговский код, содержащий наибольшее количество косяков и костылей, скоро будет поглощён Тифоном, но непосредственно сам воговский движок, дополняющий содовский, останется на месте, т.к. он реализован вполне приемлимо (правда, он работает медленно по сравнению с СоДовским, но на современных ПК это особо не заметно, т.к. я постепенно убираю самую корявую и медлительную часть ВоГа - игровой воговский код, который на чистом ассемблере работает в несколько раз быстрее, что позитивно сказывается на скорости игры на моём старом ПК).
04.09.2022 04:47
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15924
Post: #66

XEPOMAHT, спасибо, применю в следующей обновлении.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.09.2022 07:10
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15924
Post: #67

https://dropmefiles.com/O5OPm

DLL с адресами от Хероманта. Проверил базовый запуск игры и вступление в бой.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.09.2022 08:07
Find all posts by this user Quote this message in a reply
wessonsm Offline

Posts: 788
Post: #68

(04.09.2022 08:07)Berserker Wrote:  https://dropmefiles.com/O5OPm

DLL с адресами от Хероманта. Проверил базовый запуск игры и вступление в бой.

Не получается скачать.
04.09.2022 08:56
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15924
Post: #69

Куда загружать временно подскажи )


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.09.2022 08:59
Find all posts by this user Quote this message in a reply
wessonsm Offline

Posts: 788
Post: #70

Berserker, куда угодно, хоть и на ЯД)
Всегда с dropmefiles нормально скачивалось, а сейчас при нажатии на кнопку "скачать" на полсекунды вываливается окошко "для разархивирования используйте пароль 123" и мгновенно исчезает, загрузка не начинается.
Попробовать другим браузером, что ли.

Отбой, ложная тревога ))
Оперой скачалось. Что-то не так с моим Firefox - я не могу скачать даже файл, который сам загрузил для проверки.
(This post was last modified: 04.09.2022 09:41 by wessonsm.)
04.09.2022 09:02
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4204
Post: #71

wessonsm, вот ты и нашёлся, робот Spiteful


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
04.09.2022 09:07
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 15924
Post: #72

Да, ботяра, долго мы тебя ловили 85

https://tmpfiles.org/34561/eraupdate.exe


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.09.2022 09:10
Find all posts by this user Quote this message in a reply
wessonsm Offline

Posts: 788
Post: #73

Спасибо ))
04.09.2022 09:15
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2023 MyBB Group