Здесь показаны различия между двумя версиями данной страницы.
Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
вербовка-кабанов-в-heroes-2 [2015/08/08 18:06] danya |
вербовка-кабанов-в-heroes-2 [2018/09/16 15:24] (текущий) danya |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
Сперва установил IDA Free. Скачал здесь https://www.hex-rays.com/products/ida/support/download_freeware.shtml | Сперва установил IDA Free. Скачал здесь https://www.hex-rays.com/products/ida/support/download_freeware.shtml | ||
- | Запустил и в IDA файл Heroes2.exe в который играю в Вosbox | + | Запустил и в IDA файл Heroes2.exe в который играю в Dosbox |
При открытии файла IDA о чем то ругалась | При открытии файла IDA о чем то ругалась | ||
Строка 24: | Строка 24: | ||
Что делать? | Что делать? | ||
- | Сейчас открыл Heroes2.exe в Debuger BosBox-а.И дал команду установивить BP по указанному вами адресу 0044:3861 чтобы проверить какая команда там будет в Debuger И Debuger сказал что поставил BP по адресу 0044:3861 но почему то в окошке команд видно что BP он установил не на 0044:3861 а на 03CD:2382 | + | Сейчас открыл Heroes2.exe в Debuger BosBox-а.И дал команду установивить BP по указанному AlexSpl адресу 0044:3861 чтобы проверить какая команда там будет в Debuger И Debuger сказал что поставил BP по адресу 0044:3861 но почему то в окошке команд видно что BP он установил не на 0044:3861 а на 03CD:2382 |
{{:xp_dosbox.png|}} | {{:xp_dosbox.png|}} | ||
Строка 43: | Строка 43: | ||
{{:t-800:heroes_buka2.png|}} | {{:t-800:heroes_buka2.png|}} | ||
+ | Открывем исполняемый файл HMM2PL.exe в В HexEditor и переходим по адресу 43EDB. Заменяем машинную команду C7 45 DC 00 00 00 00 на C7 45 DC 27 00 00 00. Потом тут же в редакторе исправляем тескты | ||
+ | Хижина крестьян на Загон кабанов в резульатете в игре получаем все как на скриншотах | ||
+ | {{:t-800:xp_kaban3.png|}} | ||
+ | {{:t-800:xp_kaban4.png|}} | ||
+ | {{:t-800:xp_kaban5.png|}} | ||
+ | |||
+ | Пробую сделать тоже самое в DOSBOX. Не могу установить BP чтобы срабатывал на входе в хижину. | ||
+ | |||
+ | {{:t-800:bp_debug.png|}} | ||
+ | |||
+ | {{:t-800:bp_debug2.png|}} | ||
+ | |||
+ | Как поставить брейкпоинт на количество существ в DOSBox Debugger. | ||
+ | |||
+ | 0. Сделайте сейв, в котором герой стоит в одном шаге от Хижины крестьян. Убедитесь, что у героя есть отряд крестьян в первом слоте. | ||
+ | |||
+ | 1. Сделайте дамп памяти: memdumpbin ds:0 1000000 | ||
+ | |||
+ | 2. Откройте дамп и найдите в нём структуру данных, соответствующую Вашему герою. Искать быстрее всего по имени героя (например, "Maximus"). Прибавьте к адресу, по которому хранится имя героя (т.е. первый байт имени), число 0x60 (60h). Так Вы получите адрес, по которому хранится численность самого первого (левого) отряда в армии героя. Обозначим этот адрес как Addr | ||
+ | |||
+ | 3. Установите брейкпоинт по этому адресу: bplm Addr | ||
+ | |||
+ | 4. Теперь посетите героем Хижину крестьян. | ||
+ | |||
+ | |||
+ | {{:bp_krestiane.png|}} | ||
+ | |||
+ | Осталось только проанализировать код и изменить команду. | ||
+ | |||
+ | Открыл вчерашний сайв с Амброзом опять сделал дамп. | ||
+ | Отрыл в Нех и опять слово 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 | ||
+ | |||
+ | {{:bp_debug_tablica.png|}} | ||