Current time: 24.11.2024, 14:49 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
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #32

(24.07.2020 03:26)Zur13 Wrote:  Вопрос знатокам, насколько плохо то что я сделал в третьей части и можно ли такое проворачивать?

Увы, с точки зрения программного кода это называется костылями. Так делать не надо (и учить плохому других наверное тоже).

Давайте будем разбираться.

Как найти более-менее правильно причину ошибки?

1. Смотрим содержимое EIP в логе ошибки. По примеру - 4B4BAA.
2. Открываем базу IDA и переходим по этому адресу. Видим это:

mov ecx, [eax+1Ch]

3. Смотрим лог дальше. Он нам говорит следующее:

read of address: 0x0000001C

4. Анализируем. Игра что-то пытается прочитать по адресу 1С, чего не должно быть (т.к. данные ниже адреса 400000 к коду игры никакого отношения не имеют). Смотрим причину - в eax почему-то записан ноль. Хорошо, смотрим строчку выше:

mov eax, [esi+170h]

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

5. Анализируем далее. По идее тут надо бы идти к источнику esi, но это очень долго (т.к. адрес, который в него записан, может передаваться через сотню функций, без опыта пока что туда лучше не лезть). Попробуем побыстрее. Смотрим функции, для которых что-то считывается из esi. Так, это различные операции с отрядами на поле боя. Может тогда комбатменеджер? Нет, он в нашей функции получается отдельно. Может структура стека??? Хорошо, открываем структуру и сравниваем адресацию.

Выше в функции можно найти следующие строчки:

mov eax, [esi+38h]
mov dword ptr [esi+3Ch], 2
mov dword ptr [esi+40h], 0
mov eax, [esi+44h]

В структуре это:

Позиция dd ?; 38
def_group_ix dd ?; 3C - animation
def_frame_ix dd ?; 40 - animationFrame
Mon2SqDirectionForDWCr dd ?; 44 - secondHexOrientation

Смотрим названия функций, для которых эти данные используются. Думаю логично. Скорее всего esi - и есть структура стека.

Так мы разобрали небольшой участок кода, приступим к исправлению ошибки.

6. Смотрим опять то, с чего начали, но уже с комментариями:

mov eax, [esi+170h] - по структуре - получение Загруженный_звук_перемещения
mov ecx, [eax+1Ch] - тут нужна структура загруженного звука (или что-то вроде того), но у нас её нет, ну и ладно, не страшно.

7. Собственно, чтобы игра не падала, можно:
а) записать в структуру какую-нибудь загруженную озвучку, например скопировать туда адрес звука выстрела/урона/защиты/смерти, что короче подойдёт (если не будет резать слух) - выполнимо и ERM-ом в триггере перед экраном битвы (когда все звуки загружены).
б) ставить перехват кода на это место, проверять 0 в eax, если там ноль, то записывать в ecx ноль (т.е. чтобы функция остановки звука не останавливала звук, которого нет, т.к. там простая проверка на 0 по аргументу, который идёт на функцию) - бинарным патчем или уже dll.
в) грузить всю озвучку для боевой машины - так же искать место в коде, отвечающую за это дело, конкретно в месте проверки на боевые машины (там либо флаг боевой машины, либо номера монстров, в ощем тут опять применить навыки поиска адресов от Игрика). Ну и не забыть добавить саму озвучку в архивы с игрой (если её там нет).

(24.07.2020 10:19)igrik Wrote:  напомни - в чем проблема у тебя поставить Win 7? В слабом ПК?

Все виндовозы, начиная с финальной версии Win 6, попросту виснут при первом запуске их установщика. Первая бета-версия Вислы устанавливалась и даже работала (но на ней невозможно работать).

(24.07.2020 10:19)igrik Wrote:  А XP не потащит?

На XP IDA 7 так же не работает (у меня не вышло заставить её работать).

(24.07.2020 10:19)igrik Wrote:  Просто использование вогобазы в текстовом режиме то еще извращение.

У меня вог-база сохранена в IDA 6.1 (пересохранял с версии 5.5).
24.07.2020 12:45
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
Реверс игры для новичков - igrik - 22.07.2020, 12:55
RE: Как найти нужные адреса и данные для UN:C - wessonsm - 22.07.2020, 21:40
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 22.07.2020, 21:55
RE: Как найти нужные адреса и данные для UN:C - Raistlin - 23.07.2020, 00:37
RE: Как найти нужные адреса и данные для UN:C - igrik - 23.07.2020, 01:59
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 02:54
RE: Как найти нужные адреса и данные для UN:C - RoseKavalier - 23.07.2020, 04:26
RE: Как найти нужные адреса и данные для UN:C - V_Maiko - 23.07.2020, 07:04
RE: Как найти нужные адреса и данные для UN:C - PerryR - 23.07.2020, 09:51
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 23.07.2020, 10:55
RE: Как найти нужные адреса и данные для UN:C - wessonsm - 23.07.2020, 11:54
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 12:18
RE: Как найти нужные адреса и данные для UN:C - daemon_n - 23.07.2020, 12:55
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 13:29
RE: Как найти нужные адреса и данные для UN:C - Berserker - 23.07.2020, 15:52
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 23.07.2020, 16:04
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 23.07.2020, 16:32
RE: Как найти нужные адреса и данные для UN:C - RoseKavalier - 23.07.2020, 18:47
RE: Как найти нужные адреса и данные для UN:C - Berserker - 23.07.2020, 20:39
RE: Как найти нужные адреса и данные для UN:C - V_Maiko - 24.07.2020, 03:15
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 03:26
RE: Как найти нужные адреса и данные для UN:C - igrik - 24.07.2020, 10:19
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 11:29
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 24.07.2020 12:45
RE: Как найти нужные адреса и данные для UN:C - Zur13 - 24.07.2020, 13:32
RE: Как найти нужные адреса и данные для UN:C - XEPOMAHT - 24.07.2020, 15:08
RE: Как найти нужные адреса и данные для UN:C - igrik - 24.07.2020, 15:38
RE: Реверс игры для чайников - igrik - 24.07.2020, 12:08
RE: Реверс игры для новичков - Berserker - 24.07.2020, 17:35
RE: Реверс игры для новичков - igrik - 24.07.2020, 17:50
RE: Реверс игры для новичков - daemon_n - 24.07.2020, 19:39
RE: Реверс игры для новичков - RoseKavalier - 25.07.2020, 04:10
RE: Реверс игры для новичков - daemon_n - 25.07.2020, 11:09
RE: Реверс игры для новичков - RoseKavalier - 25.07.2020, 17:45
RE: Реверс игры для новичков - daemon_n - 25.07.2020, 19:30
RE: Реверс игры для новичков - wessonsm - 26.07.2020, 00:10
RE: Реверс игры для новичков - daemon_n - 26.07.2020, 01:43
RE: Реверс игры для новичков - wessonsm - 11.02.2022, 06:09
RE: Реверс игры для новичков - XEPOMAHT - 11.02.2022, 06:57
RE: Реверс игры для новичков - wessonsm - 11.02.2022, 07:03
RE: Реверс игры для новичков - daemon_n - 01.06.2022, 05:45
RE: Реверс игры для новичков - wessonsm - 03.09.2022, 06:26
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 09:17
RE: Реверс игры для новичков - wessonsm - 03.09.2022, 11:01
RE: Реверс игры для новичков - Berserker - 03.09.2022, 11:35
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 11:45
RE: Реверс игры для новичков - XEPOMAHT - 03.09.2022, 15:04
RE: Реверс игры для новичков - Berserker - 03.09.2022, 12:47
RE: Реверс игры для новичков - Berserker - 03.09.2022, 19:24
RE: Реверс игры для новичков - daemon_n - 03.09.2022, 23:20
RE: Реверс игры для новичков - XEPOMAHT - 04.09.2022, 04:47
RE: Реверс игры для новичков - Berserker - 04.09.2022, 07:10
RE: Реверс игры для новичков - Berserker - 04.09.2022, 08:07
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 08:56
RE: Реверс игры для новичков - Berserker - 04.09.2022, 08:59
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 09:02
RE: Реверс игры для новичков - daemon_n - 04.09.2022, 09:07
RE: Реверс игры для новичков - Berserker - 04.09.2022, 09:10
RE: Реверс игры для новичков - wessonsm - 04.09.2022, 09:15
RE: Исследование героев - Zur13 - 22.07.2020, 13:17
RE: Исследование героев - XEPOMAHT - 22.07.2020, 13:41
RE: Исследование героев - PerryR - 22.07.2020, 13:43
RE: Исследование героев - XEPOMAHT - 22.07.2020, 14:14
RE: Исследование героев - Berserker - 22.07.2020, 16:41
RE: Исследование героев - daemon_n - 22.07.2020, 18:30
RE: Исследование героев - RoseKavalier - 22.07.2020, 18:36
RE: ERA III - daemon_n - 18.05.2022, 20:25
RE: ERA III - wessonsm - 18.05.2022, 21:17
RE: ERA III - daemon_n - 18.05.2022, 21:19
RE: ERA III - wessonsm - 18.05.2022, 22:02
RE: ERA III - Berserker - 18.05.2022, 22:29
RE: ERA III - igrik - 19.05.2022, 19:29

Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group