IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Редактирование кода игры
t800
сообщение 18 Mar 2016, 12:25 (Сообщение отредактировал t800 - 18 Mar 2016, 17:51)
Сообщение #1

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Предлагаю писать сюда инструкции по редактированию кода игры Heroes of Might and Magic II


Для почина!

Чтобы при посадке-высадке на(из) корабля, не обнулялся ход для Версии HMM2 от Буки
Надо заменить следующие байты по указанным адресам.

Код
Посадка героя игрока-человека:
3C9BD: 90 90 90 90 90 90 90
Высадка героя игрока-человека:
3C85E: 90 90 90 90 90 90 90

Посадка героя AI:
44F3D: 90 90 90 90 90 90 90
Высадка героя AI:
44E58: 90 90 90 90 90 90 90


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 20 Mar 2016, 00:37
Сообщение #2

Мяў, наверное...
Сообщений: 21 690
Спасибо сказали: 10206 раз




Ну, nop'ами позабивать - это, конечно, супер!
Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 20 Mar 2016, 08:25 (Сообщение отредактировал t800 - 20 Mar 2016, 09:52)
Сообщение #3

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(hippocamus @ 20 Mar 2016, 03:37) *
Ну, nop'ами позабивать - это, конечно, супер!
Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций.



Можно и адреса! Если знаешь какие можешь сюда написать!

От себя могу добавить следующее:

Вербовка кабанов на карте приключенний вместо крестьян (Для Версии HMM2 от Буки)


Код
По адресу 43EDB замените машинную команду C7 45 DC 00 00 00 00 на C7 45 DC 27 00 00 00


И тогда вместо крестьян будут присоединяться кабаны







Разумеется, придётся исправить все тексты, чтобы они соответствовали тому факту, что к армии героя присоединяются не крестьяне, а кабаны!


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 21 Mar 2016, 16:30 (Сообщение отредактировал t800 - 21 Mar 2016, 16:44)
Сообщение #4

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(hippocamus @ 20 Mar 2016, 03:37) *
Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций.


Кстати вот скопировал сейчас из IDA список всех функциий с адресами

Думаете это много кому поможет? Я думаю так что людям нужна понятная инструкция! Открыть там то и сделать так то! Вот!
Думаете людям нужные адреса функций с их описаниями? Ну вот у человека положим есть адреса с именами функций! Потому что их
кто-нибудь выложил (см. выше) ни и как ему поменять хижину гоблинов на башенку фениксов на карте приключений?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
feanor
сообщение 21 Mar 2016, 17:25 (Сообщение отредактировал feanor - 21 Mar 2016, 17:31)
Сообщение #5

laughed as one fey
Сообщений: 11 812
Спасибо сказали: 19677 раз




Эхехе, проблема с двойкой в том, что у людей разные сильно разные экзешники же. У кого-то голд, у кого-то бука, кто-то вообще на досовской версии играе.

Цитата
Думаете это много кому поможет?

Это - нет, потому что нужны как минимум адреса. Имена сами по себе любопытны, но практически бесполезны.
Впрочем, https://dl.dropbox.com/u/61759222/HoMM/Heroes2W.c - увы, это 2.0, для 2.1 надо делать что-то типа поиска по сигнатурам

Цитата
Я думаю так что людям нужна понятная инструкция! Открыть там то и сделать так то! Вот!
Думаете людям нужные адреса функций с их описаниями?
Да-да, а "сделать так-то" берется из воздуха.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 21 Mar 2016, 18:06
Сообщение #6

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(feanor @ 21 Mar 2016, 20:25) *
Цитата
Думаете это много кому поможет?

Это - нет, потому что нужны как минимум адреса.


Ну вобще то я список с адресами выложил

Цитата
hero::AddSpell(int,int) 0046CA8B
hero::ApplyBattleLossTemps(void) 0046D821
hero::ApplyBattleWinTemps(void) 0046D5CD
hero::CalcMobility(void) 0046C526
hero::CheckAnduranPieces(int) 00470779
hero::CheckLevel(void) 0046D83F
hero::CreatureTypeCount(int) 00470404
hero::Deallocate(int) 0046CEE8
hero::Dismiss(void) 0046CE8B
hero::DoSSLevelDialog(int,int) 00470685
hero::GetArmyStrengths(ulong * const) 0046C4B5
hero::GetExperience(int) 0046D46F
hero::GetLevel(int) 0046D50D
hero::GetNthSS(int) 004704CC
hero::GetNthSpell(int,int) 0046C86C
hero::GetNumSpells(int) 0046C931
hero::GetOccupiedTown(void) 0047052A
hero::GetSSLevel(int) 004705C2
hero::GiveSS(int,int) 00470345
hero::HasArtifact(int) 0046C4CD
hero::HasSpell(int) 0046C79D
hero::HeroScreenUpdate(void) 0046CB33
hero::NumArtifacts(void) 0046E067
hero::Read(int,signed char) 0046C40F
hero::SetSS(int,int) 004701E1
hero::Stats(int) 0047057B
hero::TakeSS(int,int) 0047024B
hero::UpdateArmies(void) 0046CBDB
hero::UpgradeCreatures(int,int) 0047046E
hero::UseSpell(int) 0046CA01
hero::ViewArtifact(int,int,int) 0046CDF0
hero::ViewStat(int,int) 0046CDAD
hero::Write(int,signed char) 0046C462
hero::hero(void) 0046C3A0

и т.д.


Но ни адреса ни имена фукций не дают ответа ни как изменить хижину гоблинов на хижинку фениксов
и понятной инструкции как это сделать. Вот!

Цитата
Имена сами по себе любопытны, но практически бесполезны.
Впрочем, https://dl.dropbox.com/u/61759222/HoMM/Heroes2W.c - увы, это 2.0, для 2.1 надо делать что-то типа поиска по сигнатурам


По сигнатурам это вы говорите сделать для 2.0 а потом искать такие же байты в 2.1?



--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 21 Mar 2016, 21:03 (Сообщение отредактировал t800 - 21 Mar 2016, 21:18)
Сообщение #7

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(t800 @ 21 Mar 2016, 21:06) *
Но ни адреса ни имена фукций не дают ответа ни как изменить хижину гоблинов на хижинку фениксов
и понятной инструкции как это сделать. Вот!


ЗЫ вобще я знаю как это сделать (чтоб были фениксы вместо гоблинов) и уже сделал



Но если бы мне не показали как это делать я бы ничего не сделал! Вот!

ЗЗЫ А когда покажут оно всегда просто поэтому для того и тема чтобы если кто что знает мог показать. Например я знаю что-нибудь. Например как редактировать вербовку на карте приключений или про чтоб IDA при запуске не ругалась надо клавитуру переключить на английский язык, а кто-то знает про что то другое и пусть тоже пишет здесь в теме. Для этого и тема. Вот!


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
nosferatu
сообщение 21 Mar 2016, 22:09
Сообщение #8

Immortal
Сообщений: 9 624
Спасибо сказали: 12488 раз




Цитата(t800 @ 21 Mar 2016, 21:03) *
Цитата(t800 @ 21 Mar 2016, 21:06) *
Но ни адреса ни имена фукций не дают ответа ни как изменить хижину гоблинов на хижинку фениксов
и понятной инструкции как это сделать, например.


ЗЫ Вообще, я знаю как это сделать (чтобы были фениксы вместо гоблинов) и уже сделал.

Но если бы мне не показали, как это делать я бы ничего не сделал, например!

ЗЗЫ А когда покажут, оно всегда просто, поэтому для того и тема чтобы, если кто что знает, мог показать. Например, я знаю что-нибудь. Например, как редактировать вербовку на карте приключений или про чтоб IDA при запуске не ругалась, надо клавитуру переключить на английский язык, а кто-то знает про что-то другое и пусть тоже пишет здесь в теме. Для этого и тема, например.

Так куда забавнее. spider.gif
А вообще, молодец, что пытаешься в этом разобраться.


--------------------
Космические мана-корабли бороздят просторы мана-вселенной,
Начиная с сегодня "мана" - это офигенно.
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 21 Mar 2016, 23:02 (Сообщение отредактировал AlexSpl - 21 Mar 2016, 23:21)
Сообщение #9

Immortal
Сообщений: 570
Спасибо сказали: 379 раз




Цитата
Кстати вот скопировал сейчас из IDA список всех функциий с адресами

Думаете это много кому поможет?

Поможет, конечно. Экзешник с сигнатурами оригинальных функций и переменных - это как манна небесная для реверсера. Уже давно таким владею и перенёс все сигнатуры в базу для русской версии игры (2.1). Если бы у команды HotA такой был, всё бы делалось на порядок быстрее. А может он есть, но если есть, то я не в курсе.

Кстати, если скачать скрипты для IDA от Atli Gudmundsson'а (pe_sections.idc и pe_write.idc) и прописать DISPLAY_PATCH_SUBMENU = YES в конфиге idagui.cfg, то можно патчить прямо в IDA (можно сразу на ассемблере писать код) и на выходе получать работающий экзешник.
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 23 Mar 2016, 09:30 (Сообщение отредактировал t800 - 23 Mar 2016, 09:30)
Сообщение #10

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(AlexSpl @ 22 Mar 2016, 02:02) *
Цитата
Кстати вот скопировал сейчас из IDA список всех функциий с адресами

Думаете это много кому поможет?

Поможет, конечно. Экзешник с сигнатурами оригинальных функций и переменных - это как манна небесная для реверсера. Уже давно таким владею и перенёс все сигнатуры в базу для русской версии игры (2.1). Если бы у команды HotA такой был, всё бы делалось на порядок быстрее. А может он есть, но если есть, то я не в курсе.

Кстати, если скачать скрипты для IDA от Atli Gudmundsson'а (pe_sections.idc и pe_write.idc) и прописать DISPLAY_PATCH_SUBMENU = YES в конфиге idagui.cfg, то можно патчить прямо в IDA (можно сразу на ассемблере писать код) и на выходе получать работающий экзешник.


Скрипты от Atli Gudmundsson'а я поставил, хотя у меня какой то глюк с IDA-вским дебагером никак не могу
совладать толи он глючит толи я что-то не понимаю (с dosbox-вским дебагером как то проще - поставил BP
игру выкинуло в дебагер - нажал продолжить игра пошла дальше) а тут толи глюк толи я что-то не понимаю

Я решил убрать рекламаную заставку, потому что она меня злит! И отнимает время при запуске игры.
Я сделал посик по слову intro нашел в коде функции где оно есть. Поставил там BP запустил игру чтобы проверить там ли я поставил BP или нет. Игра остановилась, выкинула в IDA на BP но сделать так чтоб она продолжилась у меня почему то не получилось. Я нажал продолжить, а игра как стояла так и стоит, пришлось убить. См. на видео



Это у меня глюк или я что-то не так делаю?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 23 Mar 2016, 20:55 (Сообщение отредактировал AlexSpl - 23 Mar 2016, 20:56)
Сообщение #11

Immortal
Сообщений: 570
Спасибо сказали: 379 раз




1. Переключитесь в оконный режим (наверняка Вы не видите сообщение об исключении)
2. Взаимодействуйте с игрой (возможно Вам требуется пропустить заставку и т.п.)
3. Если нет острой необходимости выбирайте Attach to process... вместо Start Process
4. Options -> Demangled names... -> Names

Цитата
Ну, nop'ами позабивать - это, конечно, супер!

А чем ещё забивать? smile.gif jmp $+2? jmp $+5? Мы ведь не гонимся за скоростью? А по-хорошему в таких случаях нужно делать так:
Код
Length Assembly Byte Sequence
2 bytes 66 NOP 66 90H
3 bytes NOP DWORD ptr [EAX] 0F 1F 00H
4 bytes NOP DWORD ptr [EAX + 00H] 0F 1F 40 00H
5 bytes NOP DWORD ptr [EAX + EAX*1 + 00H] 0F 1F 44 00 00H
6 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 66 0F 1F 44 00 00H
7 bytes NOP DWORD ptr [EAX + 00000000H] 0F 1F 80 00 00 00 00H
8 bytes NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0F 1F 84 00 00 00 00 00H
9 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 66 0F 1F 84 00 00 00 00 00H
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 24 Mar 2016, 08:18 (Сообщение отредактировал t800 - 24 Mar 2016, 08:21)
Сообщение #12

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(AlexSpl @ 23 Mar 2016, 23:55) *
1. Переключитесь в оконный режим (наверняка Вы не видите сообщение об исключении)
2. Взаимодействуйте с игрой (возможно Вам требуется пропустить заставку и т.п.)


Точно! Это был глюк связанный запуском Heroes2.exe с полноэкранным режимом и XP в Virtualbox!
и если запускать Heroe2.exe с ключом /F4 в оконном режиме такого глюка нет.

Но все равно у меня никак не получается победить IDA-вский дебагер
У дебагера есть кнопки Pause Process и Continue я в нужном мне месте игры нажал
"Pause Process" игра остановилась но когда захотел глянуть в каком мест кода
она остановилась IDA меня выкинула в непонятное окошко с надписью IDA-view EIP
А строчку где я остановился в окошке где код так и не подчеркнула



Так как мне попасть в нужную мне функицю в коде при выполнении которой
я сделал онстановку программы когда нажимаю Pause Process ? Или так просто мне туда не попасть?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 24 Mar 2016, 11:52 (Сообщение отредактировал t800 - 24 Mar 2016, 11:57)
Сообщение #13

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(AlexSpl @ 22 Mar 2016, 02:02) *
Кстати, если скачать скрипты для IDA от Atli Gudmundsson'а (pe_sections.idc и pe_write.idc) и прописать DISPLAY_PATCH_SUBMENU = YES в конфиге idagui.cfg, то можно патчить прямо в IDA (можно сразу на ассемблере писать код) и на выходе получать работающий экзешник.



Кстати что-то не патчит у меня IDA. Вроде и скрипты поставил и меню Patch показывает и байты меняются, но почему то только в базе! а когда запускаю дебагер говорит что мол файл мол отличается от пропатченной базы и просто запускает оригинальный экзешник.

ЗЫ А когда кликаю меню Edit ->Patch program->Assеmble пишет: Command "Assemble" failed


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
AlexSpl
сообщение 24 Mar 2016, 17:07
Сообщение #14

Immortal
Сообщений: 570
Спасибо сказали: 379 раз




Цитата
Кстати что-то не патчит у меня IDA. Вроде и скрипты поставил и меню Patch показывает и байты меняются, но почему то только в базе! а когда запускаю дебагер говорит что мол файл мол отличается от пропатченной базы и просто запускает оригинальный экзешник.

Естественно, только в базе. Пока вы не запустите pe_write.idc.

Цитата
ЗЫ А когда кликаю меню Edit ->Patch program->Assеmble пишет: Command "Assemble" failed

А какую команду Вы пишете и куда?
Go to the top of the pageAdd Nick
 
+Quote Post
t800
сообщение 24 Mar 2016, 18:21 (Сообщение отредактировал t800 - 24 Mar 2016, 18:24)
Сообщение #15

Разработчик
Сообщений: 518
Спасибо сказали: 200 раз




Цитата(AlexSpl @ 24 Mar 2016, 20:07) *
Цитата
Кстати что-то не патчит у меня IDA. Вроде и скрипты поставил и меню Patch показывает и байты меняются, но почему то только в базе! а когда запускаю дебагер говорит что мол файл мол отличается от пропатченной базы и просто запускает оригинальный экзешник.

Естественно, только в базе. Пока вы не запустите pe_write.idc.


Наверное он у меня плохо работал потому что почему то не патчил и кроме Assemble других пунктов в меню не показывал, поэтому я разозлислся на эту IDA 5.0 (у ней еще справка не работала) и сейчас поставил IDA 6.8 и у ней под Assemble появился пункт меню "Apply patches to input file" и она вроде что-то стала патчить

Цитата
Цитата
ЗЫ А когда кликаю меню Edit ->Patch program->Assеmble пишет: Command "Assemble" failed

А какую команду Вы пишете и куда?


Я поставил курсор на функцию где нашел слово INTRO и решил вместо всех команд что там были поставить команду NOP (сначала я просто пытался функцию удалить но это не получалось) счас но изменить функию на NOP вроде бы получилось и даже EXE-ник перезаписался, но правда при запуске игры заругался что что-то там ему стало плохо,



Но хотя бы вроде команды поменяла! Осталось только разобратьс какие точно команды в функции NOP-ми надо забивать чтобы игра не рушилась а просто пропускала заставку. А то я ее полностью NOP-ами забил, и даже случайно штуп десять лишних написал, наверное потому игра и не смогла запустится.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18 September 2019 - 04:39
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика