Автор Тема: Smd IDA Tools - Sega Mega Drive reversing helpers  (Прочитано 24922 раз)

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« : 08 Февраль 2015, 21:16:43 »
Собственно, проект по написанию крутых специфичных плагинов в помощь ромхакерам SMD.

Включает:
 - ROM loader - загрузчик, позволяющий грузить ромы сеги в IDA Pro. Благодарности HardwareMan'у за основу;
 - Z80 sound drivers loader - позволяет загружать звуковые драйвера для Sega в IDA Pro. Автоматически именуются порты и создаются сегменты;
 - Z80 sound drivers debugger - позволяет отлаживать звуковые драйвера в IDA Pro;
 - Gensida debugger - дебагер-плагин который позволяет дебажить ромы Sega Genesis / Mega Drive);
 - Smd Constants identifier - при нажатии на J на константе, отправляемой в какой-либо командный регистр, в комментарий выведется инфа о том, что данное число значит, какие флаги устанавливает;
 - ASM Fixer - помогает при экспортировании листинга из IDA, и приведении его к ассемблируемому виду.
 - Генерация компилируемого ассемблерного листинга для AS/VASM/ASM68K прямо из коробки.

Проект развивающийся, поэтому каждый может предлагать свои идеи, изменения.

Исходники проекта и скомпиленые плагины здесь: https://github.com/lab313ru/smd_ida_tools2/releases
« Последнее редактирование: 26 Январь 2023, 03:03:14 от DrMefistO »

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #240 : 11 Февраль 2025, 22:19:16 »
Придётся при загрузке сейва делать паузу эмуляции и перекидывать в иду?
Я ещё не программировал для Иды и не знаю, как она общается с отладчиками, что может и не может.
Если эмулятор не может сообщить Иде, что она загрузила сейв и сейчас его будет отправлять, то может можно из Иды отправить сообщение эмулятору, чтобы тот завис и чтобы пользователь нажал F5, после чего в Иде нажал скачивание сейва?

Так что сейчас делают нажатия в эмуляторе F5 и F8 для Иды? Разве не портит весь процесс в нём? Или может можешь кратко описать что они друг другу пересылают?

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8131
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #241 : 11 Февраль 2025, 22:33:06 »
Может, я чего не понимаю, но чем не устраивает встроенный в эмулятор отладчик? Зачем мучиться с этой "Идой"?

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #242 : 11 Февраль 2025, 22:48:04 »
Нет графа, нет комментариев, нет имён функций. И вообще, отладчик тупо дизасмит по пути, а не проходит по всему рому, не изучает его. Т.е. отладчик подходит только для хаков, а не для полного реверса.
Что-то из этого есть в MESEN, в FCEUX, но это NES.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8131
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #243 : 12 Февраль 2025, 08:56:52 »
Нет графа, нет комментариев, нет имён функций. И вообще, отладчик тупо дизасмит по пути, а не проходит по всему рому, не изучает его. Т.е. отладчик подходит только для хаков, а не для полного реверса.
Что-то из этого есть в MESEN, в FCEUX, но это NES.
А зачем, собственно, понадобился аж полный реверс? Какие-то глобальные цели?

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #244 : 12 Февраль 2025, 12:46:53 »
Да, полный, чтобы можно было собирать ром из воссозданного кода. Для больших изменений, чтобы не мучиться "удалением гланд через заднее место", легко двигать код.

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #245 : 12 Февраль 2025, 12:56:37 »
Ну а так, полезная штука в итоге - экспорт листинга?)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #246 : 12 Февраль 2025, 20:44:49 »
Если спрашиваешь меня, то я ещё не пользовался этим. Сейчас я начинаю полный реверс UMK3 для воссоздания его кода на С++, и одновременно делаю свой аналог Иды. Буду сверяться с ней, и при несоответствиях как раз может понадобиться экспорт листинга.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #247 : 12 Февраль 2025, 20:48:15 »
Лол)
Был один, назвал проект: Gnida (GNU IDA), но проект успешно заброшен. Плюс есть гидра

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #248 : 12 Февраль 2025, 21:03:53 »
Ну и название :lol: Явно делал русскоязычный.
Я всё же надеюсь, что мне не придётся делать буквально полный аналог Иды и Гидры, а только лишь разбирать их выхлоп.
Я тебя когда-то спрашивал про возможность перестраивать блоки в графе Иды, и в сети про это ничего не нашёл. В итоге придётся реверсить формат базы Иды, искать в ней координаты этих блоков :)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #249 : 12 Февраль 2025, 21:06:02 »
Ну и название :lol: Явно делал русскоязычный.
Я всё же надеюсь, что мне не придётся делать буквально полный аналог Иды и Гидры, а только лишь разбирать их выхлоп.
Я тебя когда-то спрашивал про возможность перестраивать блоки в графе Иды, и в сети про это ничего не нашёл. В итоге придётся реверсить формат базы Иды, искать где там координаты этих блоков :)
Название у неё Ghidra, она от АНБ, с рф её ничего не связывает)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #250 : 13 Февраль 2025, 00:14:27 »
То ли это ты непонятливый, то ли я непонятно пишу :)
Был один, назвал проект: Gnida (GNU IDA), но проект успешно заброшен. Плюс есть гидра
Ну и название  Явно делал русскоязычный.
Обычно такое бывает при таком прерывистом диалоге, когда теряется нить разговора, контекст.
« Последнее редактирование: 13 Февраль 2025, 12:44:45 от perfect_genius »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #251 : 13 Февраль 2025, 07:35:52 »
А, я потерял, да:) я забыл, что про Гниду уже разговор)

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1095
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #252 : 13 Февраль 2025, 12:44:16 »
Сейчас я начинаю полный реверс UMK3 для воссоздания его кода на С++
Подожди, так в сети же оригинальные исходники на С есть o_0 причём в нескольких вариациях:
3DO - первая утечка UMK3 (неполная), с официальными .psd файлами
N64 - полусырая трилогия. Та, что с бета-ромом с двумя sub-zero.
PC - исходники MK3 с готовым билдом.
Ну и (просто к слову), аркадный MK2, который написан на ассемблере.

Если ты хорошо в C/C++ разбираешься, не проще ли сорс порт сделать? Взять сам движок боя, а всё остальное (меню и т.д.) написать самому.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #253 : 13 Февраль 2025, 12:57:42 »
Хочу именно UMK3, поэтому эти исходники дадут не всё для этого. Также хочется поправить баги версии для Сеги.
Но после создания своего кода обязательно посмотрю эти исходники, я их сохранял себе по мере сливов и всё надеялся на слив полных сырцов UMK3.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1095
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #254 : 13 Февраль 2025, 13:10:31 »
perfect_genius, в таком случае, предлагаю объединить усилия. Я как раз уже начал разбирать оригинальный UMK3 для сеги (хочу чтобы у нас, фанатов мк, собираемый дизасм просто был), какой-то прогресс уже есть. Сейчас, правда, из-за работы всё замедлилось значительно (банально не успеваю даже отдохнуть :lol:), но все равно, совместными усилиями, дело пойдёт быстрее. Что скажешь?

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #255 : 13 Февраль 2025, 20:04:02 »
Используешь инструменты этой темы для этого? Допустим, делим игру пополам (кто какие части изучает), а потом нам надо как-то синхронизироваться. У Иды есть функция объединения баз? Если нет, каждому из нас придётся вручную вносить изменения другого? Наверно, можно бы редактировать совместно листинг на ГитХабе, но я им пока не пользовался и не умею.
Если же используешь не Иду, то давай в личку.

DrMefistO, в Иде есть возможность:
-отсортировать функции по популярности?
-давать имена функциям на русском языке? Пусть даже хак-мод какой-нибудь.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #256 : 13 Февраль 2025, 20:22:01 »
А, я потерял, да:) я забыл, что про Гниду уже разговор)
Используешь инструменты этой темы для этого? Допустим, делим игру пополам (кто какие части изучает), а потом нам надо как-то синхронизироваться. У Иды есть функция объединения баз? Если нет, каждому из нас придётся вручную вносить изменения другого? Наверно, можно бы редактировать совместно листинг на ГитХабе, но я им пока не пользовался и не умею.
Если же используешь не Иду, то давай в личку.

DrMefistO, в Иде есть возможность:
-отсортировать функции по популярности?
-давать имена функциям на русском языке? Пусть даже хак-мод какой-нибудь.
Совет от программиста: не давай функциям названий ни на каком языке, кроме английского.
Сортировки функций нет. Только если плагины искать специальные.

Оффлайн Takamura-kun

  • Пользователь
  • Сообщений: 1095
  • Пол: Мужской
  • Закалён и плечист.
    • ВКонтакте
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #257 : 13 Февраль 2025, 22:02:28 »
потом нам надо как-то синхронизироваться. У Иды есть функция объединения баз? Если нет, каждому из нас придётся вручную вносить изменения другого?
Да банально базу в облако закинуть и держать друг друга в курсе, что "я сейчас буду реверсить, пока не открывай базу" :lol:

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #258 : 17 Февраль 2025, 12:57:19 »
Для патча игрового процесса нужно патчить в хекс редакторе в генсе
При этом надо, чтобы изменяемая инструкция не была сейчас следующей, иначе не изменится.

Сохранение и загрузка работают, но нельзя их делать, когда Ида стоит на паузе, иначе будет рассинхрон - МК3 сразу показала синий экран смерти.

Подтвердилось моё подозрение - по ходу игры, в Иде появляются всё новые функции! :ohmy: Из начальных десяток можно набрать потом тысячи. Т.е. это как трейслоггинг в эмуляторах, когда нужно попробовать в игре как можно больше и дальше, чтобы так пройтись по как можно больше коду и данных.
Ида может ловить событие создания новой функции, чтобы потом добавлять в их имена метку, или она сильно ограничена?
Идея вот в чём:
-загрузил ром в Иду, она определила несколько функций.
-запускаю игру в Генсе, первые экраны - это заставки игры. Останавливаю процесс на каждой, и каждый раз появляются новые функции, пачками.
И вот тут было бы хорошо, если бы Ида при создании каждой функции ставила ему метку в имени от реверсера. Реверсер ждёт следующую заставку и снова ставит на паузу, меняет метку. Таким образом были бы помечены все функции, впервые появившиеся в определённых местах игры, чтобы сразу знать что они могут делать, за что отвечают.
Что думаешь?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #259 : 17 Февраль 2025, 13:05:29 »
Про тейсинг я уже говорил - что набираются новые исполненные инструкции. И это могут быть даже не функции, а просто куски кода где-то посреди данных (обычно так с виртуальными машинами видел).

Новые функции проще всего ловить не так, как ты описал, а вот так:
1. Выделяешь табличку с именами функций, либо из вкладки Names, отсортировав по типу данных, копируешь содержимое
2. Сохраняешь список в файлик
3. Дожидаешься следующего обновления, копируешь список снова
4. Сравниваешь в каком-нибудь Total Commander по содержимому, ну или скриптом - находишь различия.

Ещё нужно понимать, что некоторые функции выполняются всегда, типа того же VSync, в котором может выполняться что угодно с обновлением графики, палитр и т.п. Так что лучше таки вручную помечать всё, что нужно.

И нет, данные через трейсинг не помечаются - только код.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #260 : 17 Февраль 2025, 13:31:52 »
это могут быть даже не функции, а просто куски кода где-то посреди данных
Потому что Генс посылает указатель текущей инструкции только в паузе, а не постоянно, да? Тогда, если он оказался посередине функции, то Ида не сможет его создать. Зато сможет найти все последующие.

Новые функции проще всего ловить не так, как ты описал, а вот так:
Ага, кучей действий и в сторонних программах вместо того, чтобы просто иногда ставить Иду на паузу и набрать несколько букв, чтобы потом видеть все эти новые функции в списке и легко сортировать по имени-метке :lol:

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #261 : 17 Февраль 2025, 13:39:02 »
> Генс посылает указатель текущей инструкции только в паузе, а не постоянно, да?
Во время работы эмулятора набирается карта выполненных инструкций. Когда происходит пауза, карта передаётся, да. Всё время пересылать карту было бы слишком накладно.

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

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #262 : 17 Февраль 2025, 14:33:27 »
Так это Генс составляет карту, а не Ида? :ohmy:
Что происходит с картой при сохранении и загрузке?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #263 : 17 Февраль 2025, 14:40:43 »
Так это Генс составляет карту, а не Ида? :ohmy:
Что происходит с картой при сохранении и загрузке?
Ты не забывай, что в Генс встроена часть плагина, это не обычный генс. Карта применяется к дизазму не только в паузе, но и при завершении эмуляции.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #264 : 18 Февраль 2025, 00:15:33 »
Не думал брать вместо Генса эмулятор, умеющий отматывать процесс назад? Вот это была бы просто пушка для отладки :)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #265 : 18 Февраль 2025, 06:29:31 »
Нет. Перенос отладочных окон и так жопная боль.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #266 : 20 Февраль 2025, 15:11:38 »
Декомпиляцию в код на Си надо как-то отдельно устанавливать или это недоступно для Сеги?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #267 : 20 Февраль 2025, 15:13:37 »
Здрасте захотел))
это тебе тогда к Ghidra.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1237
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #268 : 20 Февраль 2025, 15:24:11 »
Т.е. недоступно именно для Сеги? Ведь у Иды точно есть декомпиляция. Неужели, она только для x86-64 и ARM?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1319
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #269 : 20 Февраль 2025, 15:25:21 »
Ну почему-же: там есть декомпиляция MIPS ещё, PowerPC, ещё чего-то там. Но да, m68k декомпиляции в ней нет.