Current time: 24.11.2024, 16:40 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
PerryR Offline

Posts: 460
Post: #16

Thanks for this contribution igrik. On the weekend I will study.
Can you give me your privat phone number so I can call you during night when I have a question about UN:C 96-copy?
(This post was last modified: 23.07.2020 09:51 by PerryR.)
23.07.2020 09:51
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #17

Отличный мануал! Спасибо! Понял почти все, так что осталось лишь попрактиковаться, в идеале же, ещё и научить потом какого-нибудь так же делать166


Image: widget.png?style=banner2

Новейший Heroes Launcher
23.07.2020 10:55
Visit this user's website Find all posts by this user Quote this message in a reply
wessonsm Offline

Posts: 792
Post: #18

igrik, можно что-то конкретное спросить?
Мне нужно научиться находить элементы диалогов (любых) и изменять их (перемещать, менять размер, отключать, включать). Думаю, это не очень сложно, хотя..
В общем, интерфейс изменять.
23.07.2020 11:54
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #19

(23.07.2020 11:54)wessonsm Wrote:  Мне нужно научиться находить элементы диалогов (любых) и изменять их (перемещать, менять размер, отключать, включать). Думаю, это не очень сложно, хотя..
В общем, интерфейс изменять.

Для ЭРЫ - больная мозоль из-за того, что все диалоги в игре так или иначе модифицируются HD-модом (опять вечная проблема совместимости). Сами адреса находятся очень просто в шестнадцатеричном редакторе по графическим элементам, используемым в диалоге (def'ы, pcx-ы), в основном всё это уходит на стек на вызовах функциях-сборщиках элементов диалога в его конструкторе. Ну и если запомнишь порядок аргументов функции и их назначение (и то и то подписано в комментариях IDA-базы), то можно пробовать делать бинарный патч на это дело (через UN:C может оказаться поздновато, т.к. ERM выполняется самое раннее - только в инструкции карты, а при старте самой игры - только в MoP, а Берсеркер так не хочет, ибо противоречит концепции ERM).
(This post was last modified: 23.07.2020 12:20 by XEPOMAHT.)
23.07.2020 12:18
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #20

XEPOMAHT, а если перейти на lua?


Image: widget.png?style=banner2

Новейший Heroes Launcher
23.07.2020 12:55
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #21

(23.07.2020 12:55)daemon_n Wrote:  а если перейти на lua?

В WoG 3.59 часть диалогов перевели на lua, итог:

1. Полная несовместимость с HD-модом.
2. Изменение-добавление по силам только профессиональным программистам. Обычным моддерам типа меня не особо что-то понятно во всём этом винегрете на lua:

3. Глючность (нормальная поддержка lua в Третьих Героях - скорее из разряда древневоговских мифов, чем реальности).
(This post was last modified: 23.07.2020 13:40 by XEPOMAHT.)
23.07.2020 13:29
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #22

RoseKavalier, igrik, отличные руководства! 132

XEPOMAHT, а при чём hd-мод до своих DL-диалогов?


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

Posts: 2356
Post: #23

(23.07.2020 15:52)Berserker Wrote:  а при чём hd-мод до своих DL-диалогов?

DL-диалоги, как и все остальные диалоги, центрируются HD-модом под нужное разрешение (без этого, они будут на экране в соответствии с 800х600).
23.07.2020 16:04
Find all posts by this user Quote this message in a reply
Zur13 Offline

Posts: 223
Post: #24

igrik, супер вроде всё понятно, вечером буду пробовать свою новую проблему порешать 132

RoseKavalier, great addition, but I didn't get it where to get that structs and how to attach them to IDA, maybe you could share your IDA base with structures attached?

P.S. может тему закрепить или вообще в новый раздел модинг для новичков?
(This post was last modified: 23.07.2020 16:35 by Zur13.)
23.07.2020 16:32
Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 118
Post: #25

My database is the same as everyone else's but modified to use H3API terminology. Here are a few screens to show the process of adding enumerations (same way for structures) - you can copy them from H3API, ERM, or wherever you please.

Cleaning up IDA code
Hope igrik doesn't mind))

We start with igrik's database. I found the function using the FUNCTIONS WINDOW and Ctrl+F using the term 'shoot'. I've numbered some things that can be modified to enhance comprehension of the current section.

Adding an enumeration/structure to IDA. The easiest is SHIFT+F1 but it may take some time to get used to hotkeys.

Now Insert a new local type or use right-click menu.

You get a window like this where you can either create or just copy-paste.

When you are done, the enum/struct exists in local types and is not available globally, so:
* scroll to the bottom
* select your new type
* press enter (or double-click it)

This makes it accessible globally and you will see it in the ENUMS tab.

Go back to PSEUDOCODE section, and set the enuM.

Now you'll get text instead of `15`, while not perfect it shows what the code actually intends to do.

Now let's copy some more enums and repeat the process.

Don't forget to add the type globally!

After you add some more enums, you may get more than one option when choosing what to assign, just pick the one that makes sense.

Now all enums are set for this portion of code, things are looking better; however due to how nwc wrote the BattleMgr original class, there is still some incomprehensible junk next to HeroA... it takes some time to recognize such patterns but this is because the original is an array of 2 _Hero_* instead of being split into attacking and defending hero.

Double-click the HeroA term to be taken to it in the STRUCTURES tab.

We edit this term's tYpe or with right-click...

Finally 'HeroA' no longer makes sense, reName it to 'Heroes'.

Go back to PSEUDOCODE and refresh the decompilation (F5). Now +221 is transformed to secondary skills offset which is again easier to understand.

One last step, add the secondary skills enum, and assign it to the value within.

End result... there is still some work to rename v.. terms but usually this is only necessary when you face complicated pieces of code or are working on disassembling something new.

Actual time was about 3 minutes because I had to look up the enumerations. Now that they exist in this database, I can go elsewhere and do this process in 15 seconds and have code that is readable without relying on outside sources.

I don't ERM (and don't plan to) so I can never even fill half of igrik's shoes, but I hope this is useful. As with everything else, you get better by practice: the more you do the better you'll get at recognizing patterns and assigning the correct values/structures.
23.07.2020 18:47
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #26

RoseKavalier, really useful, thanks.


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

Posts: 610
Post: #27

I still think that the one who can master their knowledge is RoseKavalier Rolleyes
24.07.2020 03:15
Find all posts by this user Quote this message in a reply
Zur13 Offline

Posts: 223
Post: #28

Я тут сделал первую попытку что-то самостоятельно поправить, оказывается я еще кое-что помню из ассемблера, хе-хе. Попробую свои похождения описать в виде небольшого туториала, приступать нужно после того как освоились с тем что описано в туториале igrik.

Возможно получилось немного сумбурно, но я вначале пошел не по тому пути и попытался найти нужное место через исходники ВоГ, но в итоге оказалось что вся нужная информация есть в креш лог файле, но первый этап будет полезен для других задач, когда игра не падает.

У меня задача была такая: при попытке передвинуть боевую машину на поле битвы используя команду BM:P игра падает, нужно это исправить патчем.

Общая информация по ресурсам для этого туториала:

1. В сборке ERA 2.9.14 есть исходники WoG и ERA

HoMM 3 Complete ERA 2.9.14\Tools\Era\Sources\Era 2.6x Delphi 2007\
HoMM 3 Complete ERA 2.9.14\Tools\WoG Sources

2. При падении игра генерирует лог файл с описанием того что произошло при падении, в корне папки с игрой появляется файл HD_CRASH_LOG.TXT

3. Для третьего этапа можно подсматривать нужные команды по ссылкам

Краткое описание ассемблерных комманд
Краткое описание ассемблерных комманд с кодами операций
Подробное описание ассемблерных комманд с кодами операций



Итак часть первая как по ЕРМ ресиверу BM:P найти участок кода игры в ИДА, который его обрабатывает.



Итак часть вторая как с помощью крешлога найти место падения игры.



На данном этапе мы знаем, что падение вызвано тем что у перемещаемого монстра (подводы боеприпасов) нет звукового файла который должен проигрываться при перемещении. Правильным вариантом в этом случае было бы назначение стеку боевых машин звука перемещения или другие правки которые приведут к тому же результату (больше подробностей чуть ниже в сообщении XEPOMAHT). Но в учебных целях мы попробуем исправить это с помощью правки найденого выше участка кода игры "на лету" из ЕРМ скрипта.

Итак часть третья как пропатчить КДЕ2 под FreBSD, шутка Sm , как исправить креш патчем кода с помощью UN:C.



Вопрос знатокам, насколько плохо то что я сделал в третьей части и можно ли такое проворачивать?
(This post was last modified: 25.07.2020 04:44 by Zur13.)
24.07.2020 03:26
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #29

Zur13, у тебя (в третьем варианте) достаточно хорошее решение. Ты же восстанавливаешь параметр, после того как сделал необходимые тебе действия. Я думаю это наиболее правильных ход, применимый для данной ситуации.
По началу оно все сумбурно выходит. Но это дело только практики)

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

XEPOMAHT, напомни - в чем проблема у тебя поставить Win 7? В слабом ПК? А XP не потащит? Просто использование вогобазы в текстовом режиме то еще извращение.

RoseKavalier, I am delighted, and I never cease to be amazed at your knowledge. Your help is invaluable!


game bug fixes extended.dll || My Plugins || My GitHub
24.07.2020 10:19
Visit this user's website Find all posts by this user Quote this message in a reply
Zur13 Offline

Posts: 223
Post: #30

(24.07.2020 10:19)igrik Wrote:  Zur13, у тебя (в третьем варианте) достаточно хорошее решение. Ты же восстанавливаешь параметр, после того как сделал необходимые тебе действия. Я думаю это наиболее правильных ход, применимый для данной ситуации.
По началу оно все сумбурно выходит. Но это дело только практики)

Стараюсь вот по возможности. Хороший туториал мне с ним оказалось легко освоиться 132

А эти адреса не изменяются при применении разного рода бинарных патчей или еще чего-либо? Насколько это решение надежно?

И еще вопрос, то фактически на чем я застрял при подходе с помощью исходников, как ИДА подключить к героям в режиме дебага? У меня при попытке выполнить Attach to process к героям ИДА падает вместе с героями. Хотелось с помощью точки останова посмотреть то место кода которое я нашел с помощью исходников ВоГ.
(This post was last modified: 24.07.2020 11:32 by Zur13.)
24.07.2020 11:29
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-2024 MyBB Group