Примеры работы с программой Happy Finder

Оглавление.

1. Введение.
2. Пример с игрой Operation Europe - Path to Victory 1939-1945 (U) [!].gen.
3. Пример с игрой Front Mission (J) (V1.0) [T+Eng1.0b_FH].smc.
4. Поиск непоследовательных значений.
5. Вместо заключения.
Введение.

Программа Happy Finder предназначена для простого поиска данных в файле и нахождения адреса найденных данных с возможностью cдвига реального адреса на заданный интервал. Найденные адреса, к примеру, можно подключить в Kruptar в качестве поинтеров. В этом документе на примерах будет рассмотрена работа самой программы, и даны некоторые пояснения для работы с программой Kruptar.

Пример с игрой Operation Europe - Path to Victory 1939-1945 (U) [!].gen


Игра: Operation Europe - Path to Victory 1939-1945 (U) [!].gen
Задача: найти и подключить пойнтеры в программе Kruptar.

В этой игре используются абсолютные четырёхбайтные пойнтеры. Для примера рассмотрим текст из игры:

адрес фразы: 00047830: Soviet advance on
адрес фразы: 00047842: drive east and stop the
адрес фразы: 0004785A: Hitler then planned to
адрес фразы: 00047872: Antwerp in Belgium.

Так вот, пойнтеры в самом роме имеют вид, абсолютно идентичный адресу фразы, т.е.

Пойнтер на 1 фразу будет: 00047830
Пойнтер на 2 фразу будет: 00047842
Пойнтер на 3 фразу будет: 0004785A
Пойнтер на 4 фразу будет: 00047872

Сами адреса на фразы очень легко получить в виде списка в программе Kruptar, используя нулевые пойнтеры. Просто ставим размер пойнтеров PtPointerSize: «0», сдвиг PtReference: «0» и вынимаем адреса текста командой «Add Pointers», где указываем адрес первой и последней фраз вместо адресов пойнтеров. Таким образом можно получить адреса всего текста в совершенно любой игре. А потом сохранить их в текстовой файл командой «Save To File».

Примеры работы с программой Happy Finder


Мы получили адреса фраз. Теперь найдём сами пойнтеры с помощью программы Happy Finder. Открываем программу, задаём начальный адрес «00», задаём конечный адрес «FFFF0» (размер самого рома 1048576 байт, в шестнадцатиричном виде это 100000, поэтому нужно ввести значение чуть меньше размера самого рома), задаём значения для поиска и нажимаем кнопку «Начать поиск».

Примеры работы с программой Happy Finder


Поиск завершён, найдено 4 адреса, это и есть адреса самих пойнтеров! Сохраняем их в текстовой файл. Теперь пойнтеры можно легко подключить в программе Kruptar командой «Add From File».

Пример с игрой Front Mission (J) (V1.0) [T+Eng1.0b_FH].smc


Игра: Front Mission (J) (V1.0) [T+Eng1.0b_FH].smc
Задача: найти и подключить пойнтеры в программе Kruptar.

В этой игре используются абсолютные двухбайтные пойнтеры. С разным значением PtReference. Но у некоторых из них есть одна особенность. Перед каждым пойнтером стоит определённое значение. К примеру, A9. Для примера рассмотрим текст из игры:

адрес фразы: 00318826: Not enough money.
адрес фразы: 00318838: Is this OK?
адрес фразы: 00318844: Data loaded.
адрес фразы: 00318851: Data saved

Пойнтеры в самом роме имеют следующий вид (выделенные цифры):

… A9 26 88 A2 F1 …
… A9 38 88 A2 F1 …
… A9 44 88 A2 F1 …
… A9 51 88 A2 F1 …

Как можно заметить, пойнтеры легко определить по одинаковым символам, которые стоят перед/за ними. Эти символы – разная служебная информация. Сами пойнтеры разбросаны по всему рому. Поэтому проще их найти автоматически, а не вручную. Список адресов можно получить из Kruptar с помощью нулевых пойнтеров. Но сам список нужно модифицировать перед тем, как вставлять его в программу поиска. 0031 нужно заменить на A9, а последние цифры в адресе поменять местами. Теперь найдём сами пойнтеры с помощью программы Happy Finder. Открываем программу, задаём начальный адрес «00», задаём конечный адрес «347FF0» (размер самого рома 3440640 байт, в шестнадцатиричном виде это 348000, поэтому нужно ввести значение чуть меньше размера самого рома), задаём значения для поиска, задаём сдвиг и нажимаем кнопку «Начать поиск». Сам поиск можно провести несколькими способами. Результат будет довольно неоднозначным:

1 Способ:
Примеры работы с программой Happy Finder

2 Способ:
Примеры работы с программой Happy Finder

3 Способ:
Примеры работы с программой Happy Finder

4 Способ:
Примеры работы с программой Happy Finder

Как видно из скриншотов, во втором способе нашёлся лишний адрес. Если у вас будет много значений для поиска, и если они к тому же будут короткими по длине, есть вероятность найти вместо нужных адресов мусор. Но его можно отсеять уже в процессе тестирования игры. А если вообще искать пойнтеры без учёта спецсимволов, как в четвёртом способе, то среди адресов будет просто куча ненужного мусора. Первый и третий способы – самые верные, но третий более долгий.

Всё, адреса пойнтеров найдены. Сохраняем их в текстовой файл. Теперь пойнтеры можно легко подключить в программе Kruptar командой «Add From File».

Поиск непоследовательных значений: (используйте «QQ» для такого поиска)


Игра: Front Mission (J) (V1.0) [T+Eng1.0b_FH].smc
Задача: найти и подключить пойнтеры в программе Kruptar, если известны только сами признаки, по которым можно идентифицировать пойнтеры. Т.е. когда у нас нет адресов фраз текста.

Как рассмотрено выше, пойнтеры для интересующего нас текста имеют вид:

… A9 26 88 A2 F1 …
… A9 38 88 A2 F1 …
… A9 44 88 A2 F1 …
… A9 51 88 A2 F1 …

Чтобы не вбивать в программу все эти адреса для поиска, можно вбить одно универсальное значение, по которому будет происходить поиск адресов.

A9 QQ QQ A2 F1 – где вместо QQ программа будет искать любые байты:

Примеры работы с программой Happy Finder


Среди всех найденных будут и наши 4 адреса, как и все остальные, которые удовлетворяют заданному нами условию: первый символ должен быть A9, а четвёртый и пятый – A2 F1. Все остальные символы (второй и третий) могут быть произвольными.

Вместо заключения

На этих простых примерах была рассмотрена работа программы. Ей можно искать не только адреса пойнтеров, но и просто адреса текста, если это позволяет алгоритм игры. Например, в игре на консоль Sony PlayStation «Eternal Eyes» можно найти адреса диалогов, так как перед каждой фразой из диалога стоят определённые символы. Всё зависит от каждого конкретного случая. Сама программа ещё несовершенна и очень медленно работает с длинными значениями для поиска. Чем длиннее значение – тем медленнее идёт поиск. Но при поиске необязательно задавать в диапазоне поиска весь ром. Иногда достаточно указать определённый небольшой диапазон, если вы знаете, где находятся пойнтеры. К примеру, если это блок пойнтеров. Надеюсь, в будущем у меня получится сделать программу немного быстрее.



Просмотров: 1576
22.07.2015, 12:14 -

Категория: Статьи