Инструкцию по применению SMDPointers

Автор admin, 16 апреля 2015, 12:48

« назад - далее »

admin

 
Программа для поиска пойнтеров SMDPointers
 

В строке «Адрес в файле:» нужно ввести адрес, на который нужно найти пойнтер. (Число должно указываться в шестнадцатеричной системе.)
Например: 1419B2
 

Выбрать нужный файл можно при помощи кнопки «Выбор файла».
 
Снизу по центру имеется прогрессбар, который будет заполняться по мере выполнения поиска.
 

Так же имеется кнопка «Сохранить». Данная кнопка сохраняет результат поиска в текстовый файл под названием «Point». Данный текстовый файл появится там же, где хранится файл, в котором мы ищем указатели. Данный текстовый файл Point.txt будет содержать в себе все данные о пойнтерах, включая те, которые не поместятся в окне программы SMDPointers.
 
Ниже читайте о принципе работы каждой из кнопок расположенных в правой части программы. 

admin

 
Для начала рассмотрим самый простой вариант. Это кнопка «0x6100FFFF». Если данным способом будет найден указатель, то почти со 100 процентной уверенностью можно заявить, что это именно тот пойнтер, который нам нужен.
Данный способ ищет одну из вариаций относительного 2-х байтного пойнтера.
 
Пример использования:
Для теста возьмём ром: Disney's Aladdin (U) [!].gen.
Будем искать указатель на 0x1B3064 ($1B3064 / 1B3064h)
 
После нажатия на кнопку мы получим результат:


$ 001B2C64  (61 00 03 FE)Где
$001B2C64 – адрес, по которому расположен наш указатель.
61 00 03 FE – пойнтер
 
Так же как и в большинстве случаев указателей может быть несколько.

admin

 
Переходим к рассмотрению второй кнопки в правом нижнем углу. Эта кнопка 0xFFFF.
Данная кнопка активирует функцию, которая ищет относительный 2-х байтный пойнтер. За точку отсчёта принимается местонахождение пойнтера.
 
 
Пример использования 1:
Для теста возьмём ром: Disney's Aladdin (U) [!].gen.
Будем искать указатель на 0x1B3064
 
После нажатия на кнопку мы получим результат:


$ 001B2C66  (03 FE)Где
$001B2C66 – адрес, по которому расположен наш указатель.
03 FE – пойнтер
 
Вот мы и нашли указатель из предыдущего примера, только другим способом. Ниже будет приведён более наглядный пример использования данной функции (кнопки).
 
 
Пример использования 2:
Для теста возьмём игру Heimdall для Sega CD
Нам понадобится файл из неё SUBCPU.DAT
Будем искать указатель на 0x1315E
 
Будем искать поинтер на фразу "Do you wish to sail to this island?".
 
После нажатия на кнопку мы получим результат:


$ 00012E38  (03 26)Где
$00012E38 – адрес, по которому расположен наш указатель.
03 26 – пойнтер
 
Если мы попробуем найти указатель на следующею фразу "The journey to this island is too far or too treacherous." (0x131A1)  тем же способом, то у нас ничего не выйдет. Для его поиска нужно использовать другую кнопку. Но об этом чуть позже.

admin

 
Кнопка 0x00FFFFFF работает аналогично предыдущий. Ищет относительные 4-х байтные указатели. За точку отсчёта, как и в предыдущем случае, берётся местонахождение пойнтера.
 
К сожалению, в качестве примера мне нечего привести.
 
Дальше всё будет не так просто. 

admin

 
Теперь рассмотрим кнопку 0xFFFF под надписью «Относительный поиск (Вверх)».
Принцип работы данной функции заключается в том, что мы не знаем первоначальную точку отсчёта и она находится автоматически.
Тут так же появляется новая строка «Глубина просчёта вниз». Эта строка использует десятичную систему счисления. Данная переменная является своеобразным допуском. По сути это то, насколько байт (переменная*2) мы допускаем, что пойнтер будет отдалён от точки отсчёта.
 
Картинка для наглядности.

 
Из картинки видно, что пойнтер отдалён от точки отсчёта на 24 байта. То есть, чтобы его найти, в строке «Глубина просчёта вниз» нужно указать значение, как минимум, 13 (24/2+1).
 
 
Пример использования:
Для теста возьмём игру Heimdall для Sega CD
Нам понадобится файл из неё SUBCPU.DAT
Будем искать указатель на 0x131A1
 
Будем искать пойнтер на фразу "The journey to this island is too far or too treacherous.".
 
Установим значение «Глубина просчёта вниз» равное 20. То есть мы допускаем, что указатель отдалён  от точки отсчёта примерно на 40 байт.
После нажатия на кнопку мы получим результат:


$ 00012E38  =>  $ 00012E3A  (03 69)
$ 0000EFA8  =>  $ 0000EFBC  (41 F9)
$ 0000EF74  =>  $ 0000EF7A  (42 2D)
$ 0000EF75  =>  $ 0000EF8C  (42 2D)
$ 0000BD88  =>  $ 0000BD90  (74 19)
$ 00006134  =>  $ 00006136  (D0 6D)
$ 00006135  =>  $ 00006148  (D0 6D)
$ 0000329C  =>  $ 000032C2  (FF 05)
Где
$00012E38 – точка отсчёта
$00012E3A – адрес, по которому расположен наш указатель.
03 69 – пойнтер
 
Правильный пойнтер устанавливается экспериментальным путём. Если нужно пойнтера нет, то вполне возможно, что нужно увеличить глубину просчёта. Но вмести с ним увеличится и количество найденных указателей, которые нужно будет проверять вручную.

admin

 
Кнопка 0x00FFFFFF под надписью «Относительный поиск (Вверх)». Работает примерно по тому же принципу, что и предыдущая кнопка. Только эта функция ищет относительные 4-х байтные указатели.
 
К сожалению, в качестве примера мне нечего привести.
 
Дальше будет ещё сложнее ;)
 
 

admin

 
Рассмотрим кнопку 0x00FFFFFF под надписью «Относительный поиск (Вниз)».
Данная функция помогает искать (отрицательные) относительные 4-х байтные пойнтеры.
В отличие от функций просчёта вверх, здесь ведётся поиск пойнтеров ниже «адреса в файле» на который мы и ищем указатель.
Здесь появляется новое значение «Глубина просчёта вверх». Это то значение, до какого мы хотим сдвигать точку отсчёта. (Число должно указываться в шестнадцатеричной системе.)
 
Рисунок для большей наглядности.
 
Пример использования:
Для теста возьмём ром Scooby Doo Mystery (U) [!].gen
Будем искать указатель на 0x1419B2
 
Будем искать пойнтер на фразу "I made you a sandwich, but you were gone, so I ate it.".
 
Предположим что мы не знаем первоначальную точку отсчёта. Поэтому в строке «Глубина просчёта вверх» введём значение 2A
 
Установим значение «Глубина просчёта вниз» равное 20000.
 
Нам выдаст сообщение «Найдено указателей: 681». И где-то среди этих результатов нужный нам пойнтер. Не лучший пример, и не лучший способ отыскать указатели подобного типа, но, тем не менее, он работает.

...
$ 0014199E  =>  $ 00150D56  (00 00 00 14)
$ 0014199E  =>  $ 00150D64  (00 00 00 14)
$ 0014199C  =>  $ 00146A78  (00 00 00 16)
$ 0014199C  =>  $ 0014A9E6  (00 00 00 16)
$ 0014199C  =>  $ 0014B578  (00 00 00 16)
$ 0014199C  =>  $ 0014C30A  (00 00 00 16)
$ 0014199C  =>  $ 0014CC36  (00 00 00 16)
$ 0014199C  =>  $ 00150716  (00 00 00 16)
$ 0014199C  =>  $ 00150CCA  (00 00 00 16)
$ 0014199C  =>  $ 00150CD8  (00 00 00 16)
$ 0014199C  =>  $ 00150DC6  (00 00 00 16)
$ 0014199A  =>  $ 00145EC0  (00 00 00 18)
$ 0014199A  =>  $ 00148116  (00 00 00 18)
...
Где
$0014199C – точка отсчёта
$00146A78 – адрес, по которому расположен наш указатель.
00 00 00 16 – пойнтер

admin

 
Кнопка 0xFFFF работает аналогично предыдущей, только она ищет  (отрицательные) относительные 2-х байтные пойнтеры.
 
К сожалению, в качестве примера мне нечего привести.