Редактирование кода игры |
Здравствуйте, гость ( Вход | Регистрация )
Редактирование кода игры |
18 Mar 2016, 12:25
(Сообщение отредактировал t800 - 18 Mar 2016, 17:51)
Сообщение
#1
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Предлагаю писать сюда инструкции по редактированию кода игры 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 -------------------- |
|
|
20 Mar 2016, 00:37
Сообщение
#2
|
|
пират с чёрной меткой Сообщений: 23 630 Спасибо сказали: 12911 раз |
Ну, nop'ами позабивать - это, конечно, супер!
Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций. -------------------- Давший быка на убой не выпросил и печень на жаркое.
|
|
|
20 Mar 2016, 08:25
(Сообщение отредактировал t800 - 20 Mar 2016, 09:52)
Сообщение
#3
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Ну, nop'ами позабивать - это, конечно, супер! Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций. Можно и адреса! Если знаешь какие можешь сюда написать! От себя могу добавить следующее: Вербовка кабанов на карте приключенний вместо крестьян (Для Версии HMM2 от Буки) Код По адресу 43EDB замените машинную команду C7 45 DC 00 00 00 00 на C7 45 DC 27 00 00 00 И тогда вместо крестьян будут присоединяться кабаны Разумеется, придётся исправить все тексты, чтобы они соответствовали тому факту, что к армии героя присоединяются не крестьяне, а кабаны! -------------------- |
|
|
21 Mar 2016, 16:30
(Сообщение отредактировал t800 - 21 Mar 2016, 16:44)
Сообщение
#4
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Уж лучше тогда открыть тему вроде "Инженерного анализа", как в 3-ке - и там просто писать адреса функций. Кстати вот скопировал сейчас из IDA список всех функциий с адресами Думаете это много кому поможет? Я думаю так что людям нужна понятная инструкция! Открыть там то и сделать так то! Вот! Думаете людям нужные адреса функций с их описаниями? Ну вот у человека положим есть адреса с именами функций! Потому что их кто-нибудь выложил (см. выше) ни и как ему поменять хижину гоблинов на башенку фениксов на карте приключений? -------------------- |
|
|
21 Mar 2016, 17:25
(Сообщение отредактировал feanor - 21 Mar 2016, 17:31)
Сообщение
#5
|
|
laughed as one fey Сообщений: 12 166 Спасибо сказали: 20585 раз |
Эхехе, проблема с двойкой в том, что у людей разные сильно разные экзешники же. У кого-то голд, у кого-то бука, кто-то вообще на досовской версии играе.
Цитата Думаете это много кому поможет? Это - нет, потому что нужны как минимум адреса. Имена сами по себе любопытны, но практически бесполезны. Впрочем, https://dl.dropbox.com/u/61759222/HoMM/Heroes2W.c - увы, это 2.0, для 2.1 надо делать что-то типа поиска по сигнатурам Цитата Я думаю так что людям нужна понятная инструкция! Открыть там то и сделать так то! Вот! Да-да, а "сделать так-то" берется из воздуха.
Думаете людям нужные адреса функций с их описаниями? |
|
|
21 Mar 2016, 18:06
Сообщение
#6
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата Думаете это много кому поможет? Это - нет, потому что нужны как минимум адреса. Ну вобще то я список с адресами выложил Цитата 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? -------------------- |
|
|
21 Mar 2016, 21:03
(Сообщение отредактировал t800 - 21 Mar 2016, 21:18)
Сообщение
#7
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Но ни адреса ни имена фукций не дают ответа ни как изменить хижину гоблинов на хижинку фениксов и понятной инструкции как это сделать. Вот! ЗЫ вобще я знаю как это сделать (чтоб были фениксы вместо гоблинов) и уже сделал Но если бы мне не показали как это делать я бы ничего не сделал! Вот! ЗЗЫ А когда покажут оно всегда просто поэтому для того и тема чтобы если кто что знает мог показать. Например я знаю что-нибудь. Например как редактировать вербовку на карте приключений или про чтоб IDA при запуске не ругалась надо клавитуру переключить на английский язык, а кто-то знает про что то другое и пусть тоже пишет здесь в теме. Для этого и тема. Вот! -------------------- |
|
|
21 Mar 2016, 22:09
Сообщение
#8
|
|
Immortal Сообщений: 9 628 Спасибо сказали: 12593 раза |
Но ни адреса ни имена фукций не дают ответа ни как изменить хижину гоблинов на хижинку фениксов и понятной инструкции как это сделать, например. ЗЫ Вообще, я знаю как это сделать (чтобы были фениксы вместо гоблинов) и уже сделал. Но если бы мне не показали, как это делать я бы ничего не сделал, например! ЗЗЫ А когда покажут, оно всегда просто, поэтому для того и тема чтобы, если кто что знает, мог показать. Например, я знаю что-нибудь. Например, как редактировать вербовку на карте приключений или про чтоб IDA при запуске не ругалась, надо клавитуру переключить на английский язык, а кто-то знает про что-то другое и пусть тоже пишет здесь в теме. Для этого и тема, например. Так куда забавнее. А вообще, молодец, что пытаешься в этом разобраться. -------------------- Космические мана-корабли бороздят просторы мана-вселенной,
Начиная с сегодня "мана" - это офигенно. |
|
|
21 Mar 2016, 23:02
(Сообщение отредактировал AlexSpl - 21 Mar 2016, 23:21)
Сообщение
#9
|
|
Immortal Сообщений: 691 Спасибо сказали: 502 раза |
Цитата Кстати вот скопировал сейчас из IDA список всех функциий с адресами Думаете это много кому поможет? Поможет, конечно. Экзешник с сигнатурами оригинальных функций и переменных - это как манна небесная для реверсера. Уже давно таким владею и перенёс все сигнатуры в базу для русской версии игры (2.1). Если бы у команды HotA такой был, всё бы делалось на порядок быстрее. А может он есть, но если есть, то я не в курсе. Кстати, если скачать скрипты для IDA от Atli Gudmundsson'а (pe_sections.idc и pe_write.idc) и прописать DISPLAY_PATCH_SUBMENU = YES в конфиге idagui.cfg, то можно патчить прямо в IDA (можно сразу на ассемблере писать код) и на выходе получать работающий экзешник. |
|
|
23 Mar 2016, 09:30
(Сообщение отредактировал t800 - 23 Mar 2016, 09:30)
Сообщение
#10
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата Кстати вот скопировал сейчас из 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 но сделать так чтоб она продолжилась у меня почему то не получилось. Я нажал продолжить, а игра как стояла так и стоит, пришлось убить. См. на видео Это у меня глюк или я что-то не так делаю? -------------------- |
|
|
23 Mar 2016, 20:55
(Сообщение отредактировал AlexSpl - 23 Mar 2016, 20:56)
Сообщение
#11
|
|
Immortal Сообщений: 691 Спасибо сказали: 502 раза |
1. Переключитесь в оконный режим (наверняка Вы не видите сообщение об исключении)
2. Взаимодействуйте с игрой (возможно Вам требуется пропустить заставку и т.п.) 3. Если нет острой необходимости выбирайте Attach to process... вместо Start Process 4. Options -> Demangled names... -> Names Цитата Ну, nop'ами позабивать - это, конечно, супер! А чем ещё забивать? 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 |
|
|
24 Mar 2016, 08:18
(Сообщение отредактировал t800 - 24 Mar 2016, 08:21)
Сообщение
#12
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
1. Переключитесь в оконный режим (наверняка Вы не видите сообщение об исключении) 2. Взаимодействуйте с игрой (возможно Вам требуется пропустить заставку и т.п.) Точно! Это был глюк связанный запуском Heroes2.exe с полноэкранным режимом и XP в Virtualbox! и если запускать Heroe2.exe с ключом /F4 в оконном режиме такого глюка нет. Но все равно у меня никак не получается победить IDA-вский дебагер У дебагера есть кнопки Pause Process и Continue я в нужном мне месте игры нажал "Pause Process" игра остановилась но когда захотел глянуть в каком мест кода она остановилась IDA меня выкинула в непонятное окошко с надписью IDA-view EIP А строчку где я остановился в окошке где код так и не подчеркнула Так как мне попасть в нужную мне функицю в коде при выполнении которой я сделал онстановку программы когда нажимаю Pause Process ? Или так просто мне туда не попасть? -------------------- |
|
|
24 Mar 2016, 11:52
(Сообщение отредактировал t800 - 24 Mar 2016, 11:57)
Сообщение
#13
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Кстати, если скачать скрипты для 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 -------------------- |
|
|
24 Mar 2016, 17:07
Сообщение
#14
|
|
Immortal Сообщений: 691 Спасибо сказали: 502 раза |
Цитата Кстати что-то не патчит у меня IDA. Вроде и скрипты поставил и меню Patch показывает и байты меняются, но почему то только в базе! а когда запускаю дебагер говорит что мол файл мол отличается от пропатченной базы и просто запускает оригинальный экзешник. Естественно, только в базе. Пока вы не запустите pe_write.idc. Цитата ЗЫ А когда кликаю меню Edit ->Patch program->Assеmble пишет: Command "Assemble" failed А какую команду Вы пишете и куда? |
|
|
24 Mar 2016, 18:21
(Сообщение отредактировал t800 - 24 Mar 2016, 18:24)
Сообщение
#15
|
|
Разработчик Сообщений: 534 Спасибо сказали: 221 раз |
Цитата Кстати что-то не патчит у меня 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-ами забил, и даже случайно штуп десять лишних написал, наверное потому игра и не смогла запустится. -------------------- |
|
|
Текстовая версия | Сейчас: 19 April 2024 - 06:05 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |