Current time: 24.11.2024, 14:55 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
igrik Offline

Posts: 2819
Post: #31

Продолжим...
Нам необходимо решить вторую часть вопроса: убрать доп.урон у баллисты шансами 50%,75%,100%

Итак, поехали.
Мы остановились на адресе 0043FF79. С него и начнем.
Если вы куда-то переместились в другое место, то кликаем ЛКМ в закладку IDA-View, жмем горячую клавишу G, вставляем в окно с вводом адреса 0043FF79 и жмем OK. В итоге мы перепрыгнули на первый вызов функции стрельбы стеком "BattleStack_Shoot". Дважды кликаем по этой надписи "BattleStack_Shoot" и декомпилируем код (F5)

Смотрим на заголовок функции:
void - тип возвращаемого результата функции: нас пока что не интересует
__thiscall - соглашение о вызове: нас пока не интересует
BattleStack_Shoot - название функции: и так понятно

(_BattleStack_ *shooter, _BattleStack_ *target): аргументы функции
Это структуры стеков в битве (BM:Z) стрелка и цели. Просто запомним это

Дальше включаем логику: мы ищем увеличение урона, значит нам необходимо найти участок кода с расчетом урона, либо функцию которая расчитывает наносимый урон, и которая вызывается в нашей функции стрельбы.

Исследуем код функции стрельбы:
1. Сначала видим расчет удачи, и ее шансы. Нас не интересует - идем дальше.
2. Дальше видим вызов функции отрисовки полёта снаряда "Battle_Stack_DrawShot_Bullet". Проходим мимо
3. Видим код декремента (вычитания единицы) боеприпасов у стрелка, и проверку на наличие артефакта №5 (повода боеприпасов). Интересно, но всё равно идем дальше
4. Далее пошёл первый if(Magog). Теперь вы знаете где сделана проверка на стрельбу по площади. Тут нужно быть осторожным в правках. ВОГ мог модифицировать код в данном участке. Вспоминаем есть ли приколы в воге, связанные с магогами? Вроде нет. Можно загрузить Ольку (Olly Debager) по данному адресу 0043F729 и помотреть на чужие хаки
Вроде всё чисто. Это было чисто для интереса, поэтому идем дальше. Ах нет! Тут мог вклиниться Тифон, если он включён! И я даже более чем уверен, что Тифон ставит сюда свою проверку. Но проверять уже не будем)

5. Листаем дальше, тут мы видим у Магов загрузку звука фаербола, загрузку дефа анимации и т.п. Листаем до следующего интересного места (хотя тут всё интересно, если честно).
6. Итак, находим проверку на Личей (стр.206)!
else if ( monType == LICH || monType == POWER_LICH )// Lich, Power Lich
Вспоминаем: в воге облаком Личей стреляет еще Драколич. Ради интереса проверяем в отладчике Ольке
И что мы тут видим? А код то разный: в Иде (exe SoD 3.2) и Олли (exe ERA аля TE)
Забегая далеко вперед скажу вам сразу, что если вы увидите адреса в пределах 0x701000-0x785000 при вызове функций - это установил хук наш родной Вог. Вот так выглядит эта нетривиальная проверка:
Так что при попытке подмене стрелка с облаком смерти по адресу 0043FA1F !!UN:C4454945/1/x; вы получите неожиданный вылет из игры. Вот здорово! Поэтому если не проверять изменяемые вами данные в отладчике, можно долго биться головой об стену.
Надеюсь я вас предупредил о такого рода неожиданностях.

7. Поехали дальше - пролистываем (и конечно же изучаем код действия стрельбы Лича) до следующего "else"
8. Нажмите TAB и обратите внимание, что в ASM коде мы переместились от проверки на Лича всего на несколько строк, а декомпилированном коде TAB (F5) мы пролистали порядка 20-30 строк. Такое бывает)) Привыкайте.
Если сбились с адреса, то это 0043FA38
Переходим опять в декомпилированный код и что мы видим:
Видим такую логику: если цель есть, считаем базовый урон, считаем урон по цели, наносим урон цели.
9. Нам нужно найти бонус Баллисты. Заходим сначала в первую функцию - расчет базового урона. Двойно клик по "Battle_Stack_CalcDamage". Изучаем её, и понимаем простую логику:
    - если на стрелке висит забывчивость, режем кол-во стрелков вдвое
    - если баллиста - урон умножаем на силу атаки героя. Это не наш случай. Идем дальше
    - проверки на заклинания Благословления и Проклятия (увеличиваем или режем величину урона)
    - генерирем силу урона в пределах от Min...Max
    - возвращаем силу урона
Итог: решения нашей задачи мы не нашли.

Нам нужно проверять следующую функцию. Жмем G и вводим адрес 0043FA3C (прыгаем туда, где были в начале п.8)
10. Делаем двойной клик по BattleStack_CalculateDamageToMonster и внутри этой функции стразу же видим функцию BattleStack_Calc_Damage_BonusesplyDoubleDamage. Название уже говорит о бонусах. Здорово. Нам сюда
11. Делаем двойной клик по функции насчета бонусов BattleStack_Calc_Damage_BonusesplyDoubleDamage. В ней есть проверка на дабблурон Черных рыцарей. Листаем дальше и находим проверку на баллисту (146) 004435B2
Изучаем детально код. Тут и кроется решение нашей задачи. Решений можно придумать 3-4 вида. Все они отличаются: можно подменить номер монстра, можно вырезать этот код вообще, поставив безусловный переход. Можно обнулить шансы бонусов балисты "BallistaDamageBonus 0063B810", можно изменить номер вторичного навыка, и сделать скажем зависимость от Магии Земли (да, давайте её еще сильнее усилимSm )
В общем достаточно большое поле для манёвров.

Итак, задачу мы решили.

В следующий раз возьмёмся на нахождение адресов элементов диалогов, что на порядок сложнее нашей текущей задачи.

(24.07.2020 11:29)Zur13 Wrote:  А эти адреса не изменяются при применении разного рода бинарных патчей или еще чего-либо? Насколько это решение надежно?

И еще вопрос, то фактически на чем я застрял при подходе с помощью исходников, как ИДА подключить к героям в режиме дебага? У меня при попытке выполнить Attach to process к героям ИДА падает вместе с героями. Хотелось с помощью точки останова посмотреть то место кода которое я нашел с помощью исходников ВоГ.
Конечно адреса могут меняться, если кто-то это намеренно сделает. Во второй части я показал один из таких примеров.

Я Иду ни разу не подключал к героям. Тут не подскажу. Только Олли.


game bug fixes extended.dll || My Plugins || My GitHub
(This post was last modified: 24.07.2020 12:09 by igrik.)
24.07.2020 12:08
Visit this user's website 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