ゴジラ対メカゴジラ(Годзилла против Мехагодзиллы)
Сперва установил IDA Free. Скачал здесь https://www.hex-rays.com/products/ida/support/download_freeware.shtml
Запустил и в IDA файл Heroes2.exe в который играю в Dosbox
При открытии файла 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
И попал в ту самую последовательность
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