(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-34171800-1429174285.png)
Программа для поиска пойнтеров
SMDPointers (http://pscd.ru/forum/index.php?/topic/352-programma-dlia-poiska-pointerov-smdpointers/#entry3511)
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-03172800-1429177490.png)
В строке «Адрес в файле:» нужно ввести адрес, на который нужно найти пойнтер. (
Число должно указываться в шестнадцатеричной системе.)
Например:
1419B2 (http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-26216400-1429177490.png)
Выбрать нужный файл можно при помощи кнопки «
Выбор файла».
Снизу по центру имеется прогрессбар, который будет заполняться по мере выполнения поиска.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-79786800-1429177489.png)
Так же имеется кнопка «
Сохранить». Данная кнопка сохраняет результат поиска в текстовый файл под названием «
Point». Данный текстовый файл появится там же, где хранится файл, в котором мы ищем указатели. Данный текстовый файл
Point.txt будет содержать в себе все данные о пойнтерах, включая те, которые не поместятся в окне программы
SMDPointers.
Ниже читайте о принципе работы каждой из кнопок расположенных в правой части программы.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-69367700-1429180794.png)
Для начала рассмотрим самый простой вариант. Это кнопка «
0x6100FFFF». Если данным способом будет найден указатель, то почти со 100 процентной уверенностью можно заявить, что это именно тот пойнтер, который нам нужен.
Данный способ ищет одну из вариаций относительного
2-х байтного пойнтера.
Пример использования:
Для теста возьмём ром:
Disney's Aladdin (http://pscd.ru/games/smd/dsmd/273-disneys-aladdin.html) (U) [!].gen.
Будем искать указатель на
0x1B3064 ($
1B3064 / 1B3064h)
После нажатия на кнопку мы получим результат:
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-25717300-1429180794.png)
$ 001B2C64 (61 00 03 FE)Где
$
001B2C64 – адрес, по которому расположен наш указатель.
61 00
03 FE – пойнтер
Так же как и в большинстве случаев указателей может быть несколько.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-60621000-1429184779.png)
Переходим к рассмотрению второй кнопки в правом нижнем углу. Эта кнопка
0xFFFF.
Данная кнопка активирует функцию, которая ищет относительный
2-х байтный пойнтер. За точку отсчёта принимается местонахождение пойнтера.
Пример использования 1:
Для теста возьмём ром:
Disney's Aladdin (http://pscd.ru/games/smd/dsmd/273-disneys-aladdin.html) (U) [!].gen.
Будем искать указатель на
0x1B3064 После нажатия на кнопку мы получим результат:
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-87228000-1429184779.png)
$ 001B2C66 (03 FE)Где
$
001B2C66 – адрес, по которому расположен наш указатель.
03 FE – пойнтер
Вот мы и нашли указатель из предыдущего примера, только другим способом. Ниже будет приведён более наглядный пример использования данной функции (кнопки).
Пример использования 2:
Для теста возьмём игру
Heimdall (http://pscd.ru/games/scd/hscd/1463-heimdall.html) для
Sega CDНам понадобится файл из неё
SUBCPU.DATБудем искать указатель на
0x1315E Будем искать поинтер на фразу "
Do you wish to sail to this island?".
После нажатия на кнопку мы получим результат:
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-36678100-1429184779.png)
$ 00012E38 (03 26)Где
$
00012E38 – адрес, по которому расположен наш указатель.
03 26 – пойнтер
Если мы попробуем найти указатель на следующею фразу "
The journey to this island is too far or too treacherous." (
0x131A1) тем же способом, то у нас ничего не выйдет. Для его поиска нужно использовать другую кнопку. Но об этом чуть позже.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-41203900-1429186610.png)
Кнопка
0x00FFFFFF работает аналогично предыдущий (http://pscd.ru/forum/index.php?/topic/353-instruktciiu-po-primeneniiu-smdpointers/?p=3515). Ищет относительные
4-х байтные указатели. За точку отсчёта, как и в предыдущем случае, берётся местонахождение пойнтера.
К сожалению, в качестве примера мне нечего привести.
Дальше всё будет не так просто.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-68431100-1429192019.png)
Теперь рассмотрим кнопку
0xFFFF под надписью «
Относительный поиск (Вверх)».
Принцип работы данной функции заключается в том, что
мы не знаем первоначальную точку отсчёта и она находится автоматически.
Тут так же появляется новая строка «
Глубина просчёта вниз». Эта строка использует десятичную систему счисления. Данная переменная является своеобразным допуском. По сути это то, насколько байт (переменная*2) мы допускаем, что пойнтер будет отдалён от точки отсчёта.
Картинка для наглядности.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-50567600-1429192019.png)
Из картинки видно, что
пойнтер отдалён от точки отсчёта
на 24 байта. То есть, чтобы его найти, в строке «
Глубина просчёта вниз» нужно указать значение, как минимум,
13 (24/2+1).
Пример использования:
Для теста возьмём игру
Heimdall (http://pscd.ru/games/scd/hscd/1463-heimdall.html) для
Sega CDНам понадобится файл из неё
SUBCPU.DATБудем искать указатель на
0x131A1 Будем искать пойнтер на фразу "
The journey to this island is too far or too treacherous.".
Установим значение «
Глубина просчёта вниз» равное
20. То есть мы допускаем, что указатель отдалён от точки отсчёта
примерно на 40 байт.
После нажатия на кнопку мы получим результат:
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-85046700-1429192019.png)
$ 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 – пойнтер
Правильный пойнтер устанавливается
экспериментальным путём. Если нужно пойнтера нет, то вполне возможно, что нужно увеличить глубину просчёта. Но вмести с ним увеличится и количество найденных указателей, которые нужно будет проверять вручную.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-45520700-1429193549.png)
Кнопка
0x00FFFFFF под надписью «
Относительный поиск (Вверх)». Работает примерно по тому же принципу, что и предыдущая кнопка (http://pscd.ru/forum/index.php?/topic/353-instruktciiu-po-primeneniiu-smdpointers/?p=3518). Только эта функция ищет относительные
4-х байтные указатели.
К сожалению, в качестве примера мне нечего привести.
Дальше будет ещё сложнее ;)
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-70061500-1429205857.png)
Рассмотрим кнопку
0x00FFFFFF под надписью «
Относительный поиск (Вниз)».
Данная функция помогает искать (отрицательные) относительные
4-х байтные пойнтеры.
В отличие от функций просчёта вверх, здесь ведётся поиск пойнтеров ниже «
адреса в файле» на который мы и ищем указатель.
Здесь появляется новое значение «
Глубина просчёта вверх». Это то значение, до какого мы хотим сдвигать точку отсчёта. (Число должно указываться в шестнадцатеричной системе.)
Рисунок для большей наглядности.
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-53190600-1429205857.png)
Пример использования:
Для теста возьмём ром
Scooby Doo Mystery (http://pscd.ru/games/smd/ssmd/781-scooby-doo-mystery.html) (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 – пойнтер
(http://pscd.ru/forum/uploads/monthly_04_2015/post-1-0-60636700-1429206942.png)
Кнопка
0xFFFF работает аналогично предыдущей (http://pscd.ru/forum/index.php?/topic/353-instruktciiu-po-primeneniiu-smdpointers/?p=3520), только она ищет (отрицательные) относительные
2-х байтные пойнтеры.
К сожалению, в качестве примера мне нечего привести.