Автор Тема: [Дэнди/NES][SMD] ROM glitcher - сделай себе хак не зная ромхакинг  (Прочитано 26072 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Ром (игра) изменяется особым образом и пользователь проверяет в эмуляторе, есть ли нужное ему изменение. Если нет, то ром восстанавливается и изменяется в другом месте. Если есть, то начинается удаление лишних изменений.
Результат не гарантирован, но зато проверка не требует знаний и особых усилий.

Два инструмента для разных задач:

ИНВЕРТЕР логики
Мой вариант ищет только логику типа "есть/нет", "включилось/выключилось", "случилось/не случилось", "равно/не равно" (инструкции BEQ и BNE) и инвертирует её. Т.е. не ищет скорость, цвет, параметры, координаты и т.д.
Примеры того, что можно сделать таким способом (в скобках примерное количество требуемых шагов/нажатий):

Что не удалось:

Как видно, поиск простых вещей типа хака меню требует не так много времени - около 300 шагов, каждая занимает секунд 5 или меньше. С большим шансом можно получать неуязвимость, разблокировывать что-то в меню, включать встроенные читы. Большая выгода по времени, если искать по пути сразу несколько вещей.

pav13 встроил Инвертер в эмулятор Genesis Plus GX, что избавляет от всех лишних действий (надо лишь нажимать одну из двух кнопок/клавиш) и это сильно ускоряет поиск. Также у его варианта есть выбор из нескольких групп инструкций, если хочется поэкспериментировать.
Мой вариант потребует постоянного переключения между программой и эмулятором, перезагрузки рома и сохранения, и дополнительных действий в самой игре. Единственными плюсами вижу свободу выбора эмулятора и сохранение изменения в роме, а также код попроще из-за отсутствия привязки к эмулятору.

У версии для игр NES (Дэнди) от AnyZero тоже есть выбор из нескольких групп инструкций.




ПЕРЕСТАВЛЯТЕЛЬ ресурсов [только SMD]
Ищет массивы указателей, которые могут указывать на что угодно: изображения, звуки, состояния анимаций, уровни, порядок объектов, код поведения и т.д.
В отличие от предыдущего инструмента, при поиске надо искать не конечный желаемый результат, а изменение нужного элемента.
Например, в Cannon Fodder надо, чтобы при выстреле вылетали не пули, а ракеты. При поиске можно увидеть, как вместо пуль начали вылетать вертолёты - нужный элемент (пули) затронут и найдены указатели на пулю и вертолёты. Скорее всего, рядом с ними в массиве есть и указатели на другие объекты, среди которых могут быть ракеты. Далее Переставлятель начинает подставлять все эти соседние указатели вместо указателя пули, чтобы вы могли видеть что происходит в игре при вылете пули и дать этому название. В таком массиве именованных указателей будет легко ориентироваться и переставлять объекты местами.

Примеры того, что я нашёл не выискивая что-то конкретное, просто по пути:



   Уточнение выбора
1   глитчи     мешают увидеть, что нужное изменение есть/отсутствует
2   глитчи не мешают увидеть, что нужное изменение отсутствует
3   глитчи не мешают увидеть, что нужное изменение есть. Далее начинается удаление глитчей

   Как пользоваться моим Глитчером
—в настройках эмулятора [SMD] включите исправление контрольной суммы
—сохранитесь в нужном месте игры. В моём случае с меню UMK3 и опциями SoR я сохранился на предыдущем экране, чтобы далее игра рисовала нужный мне экран с будущими секретными пунктами. Если сохраниться прямо на нужном экране, то каждый раз будет загружаться экран в таком же виде, без нужных дополнительных пунктов. Ведь код игры, рисующий их, не был задействован.
Если же нужное вам может появляться в игре в любой момент при определённом условии, тогда можно и сохраняться в любой момент.
—закиньте ром на иконку программы и откройте его в эмуляторе, загрузите сохранение, смотрите результат и выберите подходящий пункт в программе. Переоткройте ром, перезагрузите сохранение, смотрите что вышло, выберите пункт меню и так повторяйте до конца.
При закрытии программы поиск сохраняется. Отличие у Переставлятеля - ром не восстанавливается при закрытии программы во время поиска, для этого надо или остановить поиск перед закрытием, или перезапустить программу.

   Как можно ускорить поиск

Цитата: Один великий человек
Я не боюсь того, кто выучил сотню приёмов хакинга. Я боюсь того, кто выучился сотне нажатий в Глитчере

Антивирус Win10/Win11 сразу удаляет некоторые исполнительные файлы, скачанные из интэрнэта, поэтому перед скачиванием придётся его выключить - он включится сам и пакостить передумает.
« Последнее редактирование: 24 Октябрь 2025, 01:00:14 от perfect_genius »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #1 : 20 Февраль 2024, 05:12:49 »
поэтому то я и говорю что нужен эмулятор в виде дллки, чтобы подключать его к своим проектам и чтобы он работал с образом памяти, дабы не гадить на жестком диске. гадить - это не вежливо (хотя кто-бы говорил - сам так гажу в редакторе Дюны при создании экспорта в тайловую карту и сет экранов :) надо бы когданить переделать чтоб в памяти это все делалось, без временных файлов на hdd).

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #2 : 20 Февраль 2024, 12:08:23 »
Сорсы будут?)

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4582
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #3 : 20 Февраль 2024, 12:44:49 »
Делал похожие проекты, в итоге все наработки отправились в Корзину. Если программа не анализирует инструкции (то есть работает поверх дизасма), то адекватный выхлоп очень низкий.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #4 : 20 Февраль 2024, 19:08:42 »
DrMefistO, зачем? Могу дать в личку, но пока нахожу мелкие баги, т.е. код постоянно дорабатывается.
Алгоритм прост: проходит по рому по чётным байтам (Сега же) и собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE. Далее по этому массиву адресов проходит двоичным поиском - делит пополам, первый сектор инвертирует BEQ <---> BNE, опрашивает пользователя, инвертирует обратно, потом повторяет это со вторым, потом делит первый пополам, и так до конца.
Пункты:
1 - просто пропускает текущий сектор. Раз баги в секторе мешают понять есть ли в этом секторе нужная инструкция, то лучше оставить на будущее, чтобы раздробить этот сектор.
2 - в этом секторе нет нужной инструкции, удаляем его из массива.
3 - в этом секторе есть нужная инструкция, удаляем все остальные секторы.


Yoti, да, я делаю дизасэмблер для этого. Но так как до его работоспособности далековато, не выдержал вот и сделал примитивный вариант, исследовательский проект  :)
Дизасэмблер будет отличаться тем, что можно вручную инвертировать блоки кода, их условия, чтобы сразу увидеть эффект на экране, отматывать назад, пробовать поменять другие. Т.е. явно быстрее.
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.


Тем временем, попробовал открыть секретное меню в Streets of Rage. Игра весит ~500 килобайт, инструкций в ней нашлось ~4000.
И оказалось, что она очень хрупкая - игра почти всегда неработоспособная после порчи, постоянно убивает BlastEm.
За час и 20 минут пробежал 800 проходов и надоело, очень демотивирует  :lol:
Т.е. найти-то мог далее, но не хотелось делать 4000 проходов, как если бы просто пройтись подряд по всем найденным инструкциям.
Сейчас решил попробовать перемешать инструкции в массиве перед поиском. Может чего даст.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #5 : 20 Февраль 2024, 20:32:03 »
DrMefistO, зачем? Могу дать в личку, но пока нахожу мелкие баги, т.е. код постоянно дорабатывается.
Алгоритм прост: проходит по рому по чётным байтам (Сега же) и собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE. Далее по этому массиву адресов проходит двоичным поиском - делит пополам, первый сектор инвертирует BEQ <---> BNE, опрашивает пользователя, инвертирует обратно, потом повторяет это со вторым, потом делит первый пополам, и так до конца.
Пункты:
1 - просто пропускает текущий сектор. Раз баги в секторе мешают понять есть ли в этом секторе нужная инструкция, то лучше оставить на будущее, чтобы раздробить этот сектор.
2 - в этом секторе нет нужной инструкции, удаляем его из массива.
3 - в этом секторе есть нужная инструкция, удаляем все остальные секторы.


Yoti, да, я делаю дизасэмблер для этого. Но так как до его работоспособности далековато, не выдержал вот и сделал примитивный вариант, исследовательский проект  :)
Дизасэмблер будет отличаться тем, что можно вручную инвертировать блоки кода, их условия, чтобы сразу увидеть эффект на экране, отматывать назад, пробовать поменять другие. Т.е. явно быстрее.
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.


Тем временем, попробовал открыть секретное меню в Streets of Rage. Игра весит ~500 килобайт, инструкций в ней нашлось ~4000.
И оказалось, что она очень хрупкая - игра почти всегда неработоспособная после порчи, постоянно убивает BlastEm.
За час и 20 минут пробежал 800 проходов и надоело, очень демотивирует  :lol:
Т.е. найти-то мог далее, но не хотелось делать 4000 проходов, как если бы просто пройтись подряд по всем найденным инструкциям.
Сейчас решил попробовать перемешать инструкции в массиве перед поиском. Может чего даст.
Можешь создать приватный (либо публичный) реп, попробую помогать в разработке:)

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #6 : 21 Февраль 2024, 01:18:55 »
Я пока ещё не дошёл до гитхабов.
Если ты про Глитчер, то кинул исходник в личку.
Если про дизасэмблер, то он пока на паузе, т.к. на паузе - создание языка программирования, на котором и делаю дизасэмблер. А язык на паузе, потому что вот отвлёкся на Глитчер. Всё сложно :lol:
Если у тебя есть идеи, как Ида находит блоки кода, недоступные через статический анализ, то можем и поработать.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4582
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
У тебя вообще не остались хоть какие-то записи или мысли по своим исследованиям? Было бы интересно и полезно.
Нет, это был примитивный хекс-корраптер. Там были какие-то шаблоны, но я их даже не проверил толком на работу. На их написание было потрачено менее 3 часов, так что повторяемость достаточно высокая. Ну и писалось для ФамиНЕС.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #8 : 21 Февраль 2024, 02:53:34 »
Рандомизация списка адресов оказалась действенной, игра "ожила" и радует такими смешными глюками, что чуть смехом не разбудил спящих в такое время :rofl:
Персонажей колбасит, музыка заиграла по другому, курсор в меню взбесился и надо успеть нажать нужный тебе пункт...



А ещё надпись "Yuzo Koshiro" на заставке один раз приехала из-за экрана на своё место! Проверил японку - там тоже такого нет. Или есть?

Продолжу мучить, а потом снова попробую мучить UMK3, чтобы узнать как будут дела там с такой обновой.
Смысл перемешивания адресов есть ведь, по идее. Ведь ряд сломанных if'ов подряд в начале рома точно будут постоянно мешать запуску. А нетронутая вторая половина рома не породит разнообразие глюков.


Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 207
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #9 : 21 Февраль 2024, 14:21:05 »
Цитата
собирает адреса байтов 0x67 и 0x66 в надежде, что это BEQ и BNE

Я бы еще добавил проверку на то, что эти условные переходы ссылаются на реальные команды. Для этого надо чекать список опкодов по адресам перехода. Это поможет отсеять рандомные байты.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #10 : 21 Февраль 2024, 23:21:11 »
Да тут много чего можно улучшить, добавить всякие эвристики и т.д. Но это пока лишь проверка идеи, поэтому максимально простая реализация.
Но ведь даже если прыгнуть по адресу, то любые данные там можно принять за код, т.к. у m68k занят почти весь диапазон байта?
Поэтому вижу вариант понадёжнее - посмотреть чётность адреса. Пересилил лень и проверил... и охренел 0_0

Ultimate Mortal Kombat 3 (U)
26066 -> 14919 (отсеялось 43%)

Streets of Rage (W) (REV00)
4763 -> 3838 (отсеялось 20%)

Streets of Rage 2 (U)
21432 -> 13680 (отсеялось 37%)

X-Men 2 - Clone Wars (UE)
9860 -> 8528 (отсеялось 14%)

Вообще не ожидал, что будет затронуто столько данных :ohmy:
Спасибо, что надоумил :drinks:

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 207
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #11 : 22 Февраль 2024, 01:33:36 »
Я в сеге не очень разбираюсь, но судя по этому гайду, там лишь пару сотен опкодов (первые 2 байта), а не весь диапазон из 65536 возможных опкодов.

http://info.sonicretro.org/SCHG:68000_ASM-to-Hex_Code_Reference

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #12 : 22 Февраль 2024, 02:35:00 »
Там во втором байте всякие адреса и константы же, а по ссылке только случайные числа стоят, для примера. Такое как-то можно надёжно определять как инструкцию?

Тем временем, уменьшение порчи данных из-за проверки возможного адреса возможной инструкции уменьшили веселье со всякими глюками. Теперь более суровое "работает/не работает".
Сейчас побаловался со Streets of Rage 2 и он постоянно выводит красный экран. Это встроенная проверка контрольной суммы рома?
Похоже, вот и нашлась принципиальная проблема для корраптеров, раз любое повреждение рома ничего не показывает. Но нет, через сотню попыток красный экран неожиданно был побеждён и я спасся от эпилепсии. Продолжил локализовать инструкцию, пропадали всякие баги, и в итоге в конце остались примерно 6 повреждённых байтов рома, дальнейший ремонт которых снова вызывает кровавый экран. Видимо, нет одной инструкции, тут комбинация. Надо будет придумать что-то на такой случай.

Далее идея попробовать инвертировать сам алгоритм: пользователь ведь локализует нужную инструкцию, а мешающие баги всё время складируются на потом и повторно случаются много раз, забирая много времени-попыток. А что, если алгоритм будет локализовывать ещё и все такие баги по пути, чтобы их исправлять, т.е. возвращать изначальные инструкции? По идее, поиск без таких тормозящих багов будет становиться всё быстрее. Проверим.

Если уж и это не поможет открыть секретное меню в SoR1 за сотню попыток, то есть идея сделать генетический алгоритм. Такая идея возникла, когда решил перемешать список перед поиском - что, если перемешивать не только перед ним, но и во время неё? Также вспомнилась статья на Хабре, если кто не видел: Методы модификации машинного кода: «селекция» vs. «генная инженерия»

Оффлайн Lance_Kalzas

  • Пользователь
  • Сообщений: 933
  • Пол: Мужской
  • Властелин Глупости
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #13 : 22 Февраль 2024, 04:51:41 »
Похоже, вот и нашлась принципиальная проблема для корраптеров, раз любое повреждение рома ничего не показывает
В Кеге есть Autofix Checksum же :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #14 : 22 Февраль 2024, 05:32:36 »
после внесения изменения в ром файл - можно запускать пересчет чек суммы. но все это фигня. я ж говорю - нужен эмулятор в виде длл, чтобы не пересоздавать ром файл на жестком диске. считал один раз образ в память, издеваешься в памяти, и шлешь этот издёванный образ памяти в эмулятор, без промежуточного создания рома на жестком диске.

                  ; если был фикс чек суммы
                  If fixchecksumflag ;{
                    ; получаем новый размер файла
                    newromfilesize = Lof(#File)
                    ; прыгаем в адрес указания размера
                    FileSeek(#File, $1A4)
                    ; пишем новое значение
                    WriteBE32(#File, newromfilesize)
                    ; прыгаем в $200
                    FileSeek(#File, $200)
                    ; считаем контрольную сумму
                    CheckSumNumber.w
                    CheckSumValue.w                   
                    CheckSumValue = 0
                    While Eof(#File) = 0
                      CheckSumNumber = ReadBE16W(#File);
                      CheckSumValue + CheckSumNumber
                    Wend 
                    ; прыгаем в адрес записи контрольной суммы
                    FileSeek(#File, $18E)
                    ; пишем новое значение
                    WriteBE16(#File, CheckSumValue)
                    ;}
                  EndIf
                 
                  CloseFile(#File)
                 
                  Delay(100)
                 
                  ; запуск в эмуляторе

хотя, я опять сделал коряво :) в памяти надо было. я оказывается сначала пишу в ром, после гоняю файл и пересчитываю сумму.

Оффлайн Lance_Kalzas

  • Пользователь
  • Сообщений: 933
  • Пол: Мужской
  • Властелин Глупости
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #15 : 22 Февраль 2024, 05:47:11 »
Вариант для тех, кому нужен хак, но не хочет учить программирование или не может найти хакера. Взамен такой способ потребует много терпения и концентрации.
Программа редактирует код в роме и пользователь проверяет изменения в эмуляторе. Так повторяется сотни раз, пока не выявится нужная инструкция. Или не выявится, если логика кода оказалась другой :debile:
Это самописный? Помню, как баловался с VineSause ROM Corruptor

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: [SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #16 : 22 Февраль 2024, 12:11:48 »
В Кеге есть Autofix Checksum же
Действительно помогло, но в нём нет перезапуска рома, только сброс консоли. Приходилось перетаскивать ром в окно эмулятора. Поищу другой.
Также похоже, что исправление контрольной суммы - не универсальное решение:
Вы проверяли ромы с красным экраном? Возможно исправление автоматически происходит. (нашёл кривой ром, автоматически не работает)

Это самописный?
Да, проверка идеи. Но что-то затянуло и выпал из жизни уже на вторую неделю ^_^ Идеи пока не кончаются, так что может что-то из этого и выйдет.



SeregaZ, спасибо, но для решения проблемы не придётся добавлять автоисправление в Глитчер, раз много эмуляторов поддерживает эту возможность.
А в чём у тебя проблема создания рома на накопителе? Всё не получается понять. Почему ты не исправляешь ром прямо в памяти эмулятора или не заливаешь его туда?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #17 : 22 Февраль 2024, 12:51:52 »
чужая память - всегда потемки. лучше когда своя.

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4582
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #18 : 22 Февраль 2024, 13:11:32 »
А в чём у тебя проблема создания рома на накопителе?
Износ целевого накопителя и потери времени на операциях ввода-вывода. Да и в целом плохая практика.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: [SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #19 : 22 Февраль 2024, 20:25:05 »
Yoti, тоже были мысли про износ моего SSD, но почитал, что это всё мизер в отличие от постоянных записей ОС и браузера (которая сама теперь по сложности как ОС). Иначе бы среды программирования сокращали его срок и разработчики мира заметили бы и что-то предприняли.
Если уж так страшно за износ и за скорость создания рома, то можно ведь создать рамдиск. Но SeregaZ уклоняется говорить причину, спросил его уже несколько раз. Видимо, и сам не знает зачем делает :neznayu:
Так что лучше не оффтопте тут, пожалуйста.

Оффлайн Lance_Kalzas

  • Пользователь
  • Сообщений: 933
  • Пол: Мужской
  • Властелин Глупости
    • ВКонтакте
    • Steam
    • Просмотр профиля
[SMD] ROM glitcher - сделай себе хак не зная ромхакинг
« Ответ #20 : 23 Февраль 2024, 17:44:21 »
Да, проверка идеи. Но что-то затянуло и выпал из жизни уже на вторую неделю ^_^ Идеи пока не кончаются, так что может что-то из этого и выйдет.
Наверняка будет хорошая утилита, капитан Айдзен :)

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Оказывается, такой способ хакать игру действительно работает (не во всех случаях, смотрите примеры в обновлөнной шапке) и теперь даже не требует часы поиска :wow:
Сделал новую версию, которая ищет в 2-3 раза быстрее первой версии и имеет всякие дополнительные удобства.

Сейчас буду пробовать учить программу искать константы и указатели, чтобы была альтернатива поиску в памяти и всяким гейм-гений кодам.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
там лишь пару сотен опкодов (первые 2 байта), а не весь диапазон из 65536 возможных опкодов.
Я неправильно смотрел, во втором байте всө же всякие параметры инструкции типа регистров, направлений и режимов. Так что действительно по двум байтам можно определять, что это инструкция, хоть и придөтся проверять все возможные комбинации. Но пока острой необходимости в этом нет.

Оффлайн Razuka

  • Пользователь
  • Сообщений: 99
    • Просмотр профиля
Программа создана в Win11, VS2022 и запакована в zip без сторонних програм самой же ОС. Но при попытке скачивания архива из интэрнэта, ОС ругается на вирусы и удаляет файл. Как назвать такое позорище приличными словами - у меня не хватает фантазии
Если кто не доверяет, то исходный код могу дать в личку.

Подтверждаю, что perfect_genius - добросовестный ром-хакер  :)
Да, Антивирус может ругаться, но, вероятно, это из той же серии, что и алармы при распознавании кряков к играм.
Я уже 3 версии Глитчера скачивал с момента релиза, так что могу подтвердить безопасность архива :cool:

Оффлайн Cyneprepou4uk

  • Пользователь
  • Сообщений: 207
  • Пол: Мужской
  • Самый лысый ромхакер
    • ВКонтакте
    • Просмотр профиля
perfect_genius, почему бы не включить в поиск остальные команды условного перехода, а не только BEQ/BNE?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
jmp еще надо :) чтоб все как у меня в декомпилере получилось.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Cyneprepou4uk, может и добавлю со временем, но пока не нашёл причины.
Идея была как можно меньше ломать работоспособность игры. Sharpnull предлагал трогать ещё BRA и NOP'ы, но старый алгоритм ломал инструкции блоками, подряд, поэтому это не подходило. Новый же перемешивает, поэтому можно попробовать добавить и их.
Пока буду ждать игру, к которому нельзя сделать хак трогая только BEQ/BNE.
Сейчас есть RoboCop Versus The Terminator и Battletoads, в которых не удалось отключить счөтчик очков отдельно от остального интэрфэйса, поэтому буду пробовать искать их координаты, чтобы установить его за экран.
Для инструкций "больше/меньше" не получается придумать хак.

SeregaZ, jmp сейчас тоже ковыряю. Вернее, только его адрес.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2651
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
а jsr? а bgt? а dbf?

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
Все абсолютные адреса в роме, независимо от инструкции.
В итоге очередной провал, нужного не добился. Хотел сделать, чтобы в UMK3 при старте игры начинался не выбор режима боя, а Галага. Когда-то ковырял ром в отладчике и запомнилось, что легко перенаправлял экраны в друг друга меняя адреса прыжков.
Алгоритм поиска кандидатов в адреса был такой - проходим по чётным байтам рома и если этот байт - ноль, то смотрим следующие 3 байта.
Если это трёхбайтное число больше размера рома или меньше 512 (первые байты рома - векторы прерываний, прыжки на них не интересуют) - то пропускаем.
Сначала хотел собирать и перекрывающиеся кандидаты, но в итоге решил, что в любом случае повредим оба варианта и увидим результат на экране, поэтому оставил алгоритм простым.
Сначала искал момент прыжка в экран выбора режима боя. Заменял все кандидаты адресом самой первой инструкции игры. Ожидалось, что однажды нажму Start и игра покажет не экран выбора режима, а логотип Сеги. Это случилось уже примерно через 50 попыток, адрес прыжка найден? Но оказалось, что в логотип уходит и при выходе из настроек, и ещё где-то. Как так то? Я ж менял адрес только в одном месте... Выходит, что все эти экраны прыгают не на начало игры, а на код до места, где я изменил адрес.
Ок, всё равно проверим-ка изначальную идею. Теперь решил искать адрес прыжка на Галагу, нашёл быстро. Вставил этот адрес вместо прыжка на логотип Сеги и в итоге при старте происходит синий экран смерти :D
Тут пришла идея, что кандидатов лучше портить сразу адресом прыжка на Галагу, а не на логотип. Начал новый поиск и... ничего.
Видимо, перед прыжком на Галагу происходят всякие инициализации, которые пропускаются в случае старта из меню основной игры.
Впервые с начала разработки Глитчера заглянул в отладчик - а возможно ли вообще легко сделать то, что я хочу? Увидел спагетти кода UMK3 в этом месте, приуныл и решил оставить эту идею.

Далее решил искать числа в роме. Например, в Streets of Rage в начале даются 3 жизни - найти это число. Альтернатива поиску в памяти, т.е.
Не нашёл, зато нашёл континиусы, их тоже оказалось 3.
Решил снова глянуть в отладчик. Оказалось, что игра зачем-то формирует это число на ходу - вносит 1 в регистр, потом прибавляет это число на себя, добавляет ещё один 1 и раздаёт эту тройку обоим игрокам. Кто знает - что это? Защита от Game Genie? :neznayu:
В настройках можно выбрать уровень сложности, но это не влияет на количество жизней.
В итоге на эту идею тоже пока забил.

Добавлено позже:
Пока писал это, вдруг дошло, что я забыл проверять кандидаты на адреса - на чётность :facepalm:
100308 -> 65787 (отсеялось 35% кандидатов)
Вряд ли это изменит ситуацию, конечно.

Оффлайн Беларус учит русский

  • Модератор
  • Сообщений: 1367
    • ВКонтакте
    • Steam
    • Просмотр профиля
SeregaZ, есть некоторые успехи с указателями. Алгоритм ищет группы байтов, похожие на указатели или смещения, и сдвигает их на одну позицию. В итоге в игре то спрайты персонажей меняются местами, то звуки, то ещё что. Т.е., как и писал ранее, можно будет объект/звук поменять на другой или размножить. Можешь поиграться с UMK3, может и обнаружишь нужные тебе адреса.
Примеры того, что получил (число - это номер группы указателей/смещений):

   UMK3
1 - поменялось управление - подножка теперь апперкот, например. Файребол Сони тормозит, ракета Сектора тянет противника будто сетка Сайракса...
4 - У Сони не работает захват ногами. У Страйкера пистолет наносит урон только вблизи

   Streets of Rage 2
1 - спрайты героев
2 - звуки в меню и падения
3 - координаты активных предметов
4 - ? (выпрыгивающие из люка сбивают других)
5 - ? (у минибосса неуязвимость на летящие ножи?)
7 - сила перекидывания?

   Contra Hard Corps
7 - указатели уровней
11 - кадры анимации смены портретов
14 - спрайты состояний персонажей

Ром надо переименовать в rom.gen, он будет повреждаться и восстанавливаться при каждом нажатии. При этом серьёзных багов такой способ хака не вызывает :ohmy:
Это только проба идеи, так что текущий неудобный интэрфэйс - временный.