ゴジラ対メカゴジラ(Годзилла против Мехагодзиллы)
Это старая версия документа.
Сперва установил IDA Free. Скачал здесь https://www.hex-rays.com/products/ida/support/download_freeware.shtml
http://kotomatrix.ru/fotos/step2/42468/
http://kotomatrix.ru/images/lolz/2008/11/07/Gt.jpg Запустил и в IDA файл Heroes2.exe в который играю в Вosbox
При открытии файла IDA о чем то ругалась
Затем я попробовал сделать переход по адресу 00443861 как говорил AlexSpl IDA перешла, но там почемуто совсем другое. Никаких push 0C8h и push 2Fh а совсем другое.
Что делать?
Сейчас открыл Heroes2.exe в Debuger BosBox-а.И дал команду установивить BP по указанному AlexSpl адресу 0044:3861 чтобы проверить какая команда там будет в Debuger И Debuger сказал что поставил BP по адресу 0044:3861 но почему то в окошке команд видно что BP он установил не на 0044:3861 а на 03CD:2382
Второй заход
Поставил версию от Буки для Windows
Открыл в IDA, система адресов совсем другая
И действительно по адресу 00443861
Распологается push 0C8h и push 2Fh
Открывем исполняемый файл HMM2PL.exe в В HexEditor и переходим по адресу 43EDB. Заменяем машинную команду C7 45 DC 00 00 00 00 на C7 45 DC 27 00 00 00. Потом тут же в редакторе исправляем тескты Хижина крестьян на Загон кабанов в резульатете в игре получаем все как на скриншотах
Пробую сделать тоже самое в DOSBOX. Не могу установить BP чтобы срабатывал на входе в хижину.
Как поставить брейкпоинт на количество существ в DOSBox Debugger.
0. Сделайте сейв, в котором герой стоит в одном шаге от Хижины крестьян. Убедитесь, что у героя есть отряд крестьян в первом слоте.
1. Сделайте дамп памяти: memdumpbin ds:0 1000000
2. Откройте дамп и найдите в нём структуру данных, соответствующую Вашему герою. Искать быстрее всего по имени героя (например, «Maximus»). Прибавьте к адресу, по которому хранится имя героя (т.е. первый байт имени), число 0x60 (60h). Так Вы получите адрес, по которому хранится численность самого первого (левого) отряда в армии героя. Обозначим этот адрес как Addr
3. Установите брейкпоинт по этому адресу: bplm Addr
4. Теперь посетите героем Хижину крестьян.
Осталось только проанализировать код и изменить команду.
Открыл вчерашний сайв с Амброзом опять сделал дамп. Отрыл в Нех и опять слово Ambrose нашел в дампе в Блоке 1433A0-1433A6 :smile5:
Сделал переход на 96 (dec) к текущему смещению и опять оказался в 143400 Addr = 143400, Установил BP на Addr: bplm 143400
Зашел в хижинку. Игра остановилась переключился в Debuger на командах
Код:
0180:22B110 8B45C4 mov eax,[ebp-003C] 0180:22B113 6683600407 and dword [eax+0004],0007
Сделал дамр: memdumpbin cs:220000 20000
Стал икать строчку
8B 45 C4 66 83 60 04 07
Оказался в строчке
Код: Выделить всё
seg000:0000B110 mov eax, [ebp-3Ch] seg000:0000B113 and word ptr [eax+4], 7
Проматал наверх
Так у меня вот так
Код:
seg000:0000B093 ; --------------------------------------------------------------------------- seg000:0000B093 seg000:0000B093 loc_B093: ; CODE XREF: seg000:0000B07Cj seg000:0000B093 mov ecx, 0Ah seg000:0000B098 lea edi, [ebp-30h] seg000:0000B09B mov esi, 2CC208h seg000:0000B0A0 rep movsd seg000:0000B0A2 push 0FFFFFFFFh seg000:0000B0A4 push 0 seg000:0000B0A6 push 0FFFFFFFFh seg000:0000B0A8 push 0 seg000:0000B0AA push 0FFFFFFFFh seg000:0000B0AC lea edx, [eax+17h] seg000:0000B0AF mov ecx, 2AC629h seg000:0000B0B4 mov ebx, 2 seg000:0000B0B9 mov eax, [ebp-34h] seg000:0000B0BC call sub_A72D seg000:0000B0C1 mov eax, ds:2DED70h seg000:0000B0C6 cmp dword ptr [eax+5Ah], 7805h seg000:0000B0CD jnz loc_9F95 seg000:0000B0D3 mov ebx, [ebp-8] seg000:0000B0D6 shl ebx, 2 seg000:0000B0D9 mov edx, [ebx+ebp-30h] seg000:0000B0DD mov esi, [ebp-38h] seg000:0000B0E0 add esi, 65h ; 'e' seg000:0000B0E3 mov eax, esi seg000:0000B0E5 call sub_1520E seg000:0000B0EA test eax, eax seg000:0000B0EC jz short loc_B11D seg000:0000B0EE mov eax, [ebp-3Ch] seg000:0000B0F1 mov ax, [eax+4] seg000:0000B0F5 shr ax, 3 seg000:0000B0F9 and eax, 0FFFFh seg000:0000B0FE mov edx, [ebx+ebp-30h] seg000:0000B102 mov ecx, 0FFFFFFFFh seg000:0000B107 mov ebx, eax seg000:0000B109 mov eax, esi seg000:0000B10B call sub_1526A seg000:0000B110 mov eax, [ebp-3Ch] seg000:0000B113 and word ptr [eax+4], 7 seg000:0000B118 jmp loc_9F95 seg000:0000B11D ; ---------------------------------------------------------------------------
В точности так как у AlexSpl не нашел
Код:
mov ecx, 0Ah ; кол-во элементов lea edi, [ebp+var_30] ; приёмник mov esi, 2C9308h ; источник rep movsd
Нашел похожее но с другими буквами
Код:
seg000:0000B093 mov ecx, 0Ah seg000:0000B098 lea edi, [ebp-30h] seg000:0000B09B mov esi, 2CC208h seg000:0000B0A0 rep movsd
На всякий случай написал в DosBox Debuger d ds:2CC208
И попал в ту самую последовательность :smile21:
01 00 00 00 0B 00 00 00 00 00 00 00 15 00 00 00 15 00 00 00 14 00 00 00 26 00 00 00 0C 00 00 00 1D 00 00 00 2F 00 00 00