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

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • 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 »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #150 : 06 Июль 2023, 17:09:52 »
Еще немного оффтопа:
Прекрасно, как разберусь, может смогу что предложить по улучшению, сам только недавно начал, хотя бы ребята помогли с прерываниями.
Постоянно ищу какую-то сербрянную пулю, которая поможет все свои любимые игры изучить, но такого нет  :lol:
Конечно, предлагай.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #151 : 06 Июль 2023, 22:41:00 »
Постоянно ищу какую-то сербрянную пулю, которая поможет все свои любимые игры изучить, но такого нет
А самому не хочется такую "пулю" сделать? Я вот не выдержал и делаю :)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #152 : 06 Июль 2023, 22:42:06 »
А самому не хочется такую "пулю" сделать? Я вот не выдержал и делаю :)
И что это?)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #153 : 06 Июль 2023, 23:45:38 »
Просто альтернатива Иде, x64dbg и Cheat Engine, только с интерфейсом для людей. Хочу не только изучать внутренности игр, но и делать моды, а для этого нужны всякие удобства.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #154 : 07 Июль 2023, 00:17:11 »
Просто альтернатива Иде, x64dbg и Cheat Engine, только с интерфейсом для людей. Хочу не только изучать внутренности игр, но и делать моды, а для этого нужны всякие удобства.
Звучит солидно) и как успехи?)

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #155 : 07 Июль 2023, 02:04:32 »
Медленно, но движется. Ушёл год, чтобы Capstone стабильно дизассемблировал весь доступный для прохода ему код - пока только m68k и x86. Потом понадобилось визуализировать в граф всё это, тоже ушёл примерно год.
Проблема в том, что я по жизни радикал, и когда мне окончательно что-то надоедает, то я принимаю радикальное решение. В данном случае мне надоели всякие возникающие баги при разработке, да и унизительная "printf-отладка", и я взялся за свой язык программирования в прошлом году :lol:
В идеале, чтобы можно было программировать только мышкой.
И вот только недавно, пару месяцев назад мой этот "язык" смог нарисовать линии на экране. Главной, самой важной вещью среды разработки я считаю возможность пошагового хода не только вперёд как обычно, но и назад. Мало какая среда такое имеет, что крайне странно.
Т.е. возникает баг и тебе надо становиться детективом, чтобы выяснить "убийцу". Прыгать туда-сюда по коду в надежде приблизиться в разгадке и всё понять.
А в случае перемотки назад ты ловишь значение в ячейке, которого не должно быть, и не перезапускаешь всё заново, чтобы мотать вперёд до этого момента и с определёнными условиями, а просто делаешь шаг или два назад и сразу видишь виновника.
Этого очень не хватало при разработке дизассемблера в Visual Studio и при реверсе игр Сеги в Иде, когда что-то меняешь в роме и надо проследить всё ли идёт как надо. Да много чего там не хватало.
В итоге вот этими линиями начну теперь рисовать граф.
А для дизассемблера появились свои побочные идеи. Немного дописал, чтобы при проходе по рому находил драйвер геймпада. Зачем? Например, чтобы переназначать кнопки. Или чтобы вставляла в ром запись прохождения. Зачем? Например, для верификации на реальном железе :) (я фанат TAS-прохождений)
А ещё такой проход даёт возможность сделать более умный корраптор, который меняет инструкции переходов на противоположные - такого ведь ещё не было?
Короче, работы и идей море, лишь бы хватило жизни всё это реализовать ^_^
Стараюсь посматривать за развитием Иды, и кажется, что он уже давно особо сильно не развивается интерфейсно. Т.е. порог входа всё такой же сложный. Сколько лет у него не было Ctrl+Z... Гидра недалеко от него ушла.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #156 : 13 Июль 2023, 14:17:56 »
А самому не хочется такую "пулю" сделать? Я вот не выдержал и делаю :)
Мне пока что все нравится, пока что научился графику извлекать из Дюны, но вот геймплейные фичи еще не научился находить, файл очень большой, не смотря, на то что мегабайт

Добавлено позже:
В идеале бы все это получать в удобоваримый псевдо код, но сколько раз пробовал, несмотря на избыточность, ассемблер читать проще.

Добавлено позже:
Мне больше всего интересно попробовать перенести игры на современные платформы

Добавлено позже:
Медленно, но движется. Ушёл год, чтобы Capstone стабильно дизассемблировал весь доступный для прохода ему код - пока только m68k и x86. Потом понадобилось визуализировать в граф всё это, тоже ушёл примерно год.
А есть что показать?  :)
« Последнее редактирование: 13 Июль 2023, 14:31:33 от Turbo2000 »

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #157 : 13 Июль 2023, 20:31:52 »
файл очень большой, не смотря, на то что мегабайт
Мегабайт кода для реверса - это довольно много. Но в случае ромов там внутри больше всяких данных типа графики и звука.

интересно попробовать перенести игры на современные платформы
Я тоже вот хочу перенести UMK3, чтобы без лагов играть по сети.

А есть что показать? 
Есть, но не могу. Всё суперсекретно пока, потому что планирую на своём инструменте зарабатывать. Если не выйдет, то выложу в сеть.
Можно представить себе граф из Иды, где все блоки не раскиданы как попало, а логично и аккуратно расположены.
А язык получается чем-то средним между ассемблером и Си с примесью С++, но стараюсь привести к уровню С++, и это всё без текстового кода - только ячейки со значениями, структуры из них и всякие стрелки :)

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Re: Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #158 : 16 Июль 2023, 16:59:09 »
Мегабайт кода для реверса - это довольно много. Но в случае ромов там внутри больше всяких данных типа графики и звука.
Я тоже вот хочу перенести UMK3, чтобы без лагов играть по сети.
Есть, но не могу. Всё суперсекретно пока, потому что планирую на своём инструменте зарабатывать. Если не выйдет, то выложу в сеть.
Можно представить себе граф из Иды, где все блоки не раскиданы как попало, а логично и аккуратно расположены.
А язык получается чем-то средним между ассемблером и Си с примесью С++, но стараюсь привести к уровню С++, и это всё без текстового кода - только ячейки со значениями, структуры из них и всякие стрелки :)
Да, нахрапом так сразу не взять.
На счет МК очень крутая идея, сам тоже много играл в детстве.

То есть собственный анализатор (на ризине хотя бы  :D)? Интересно, почему тоже самое не может ида делать, это же иструментарий с большой историей, да интерфейс устарел, но иструмент мощный

Добавлено позже:
А есть возможность где-нибудь найти примеры диззасемиблированного кода (проект под иду .idb), с анализом, чтобы посмотреть примеры?

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #159 : 16 Июль 2023, 21:46:51 »
То есть собственный анализатор (на ризине хотя бы  )?
Capstone Engine, разбирает кучу архитектур и при этом его легко подключить. Графика - SFML, но в будущем планирую перейти на SDL2.

почему тоже самое не может ида делать
Потому что Ида предназначена для реверса всяких вирусов и зловредов, т.е. небольших программ. Для разбора больших программ она и ему подобные не предназначены и неудобны. Для неё граф - это лишь дополнительная опция, а не основа. Но в плане выискивания как можно больше кода в бинарнике она имеет большой опыт, да (при статическом анализе доступен не весь код). Надо будет его догонять в этом. Скорее всего, придётся реверсить саму Иду :lol:

примеры диззасемиблированного кода (проект под иду .idb)
Автор темы разобрал Дональд Дака сеговского. Также у Ti_ что-то есть на Яндекс Диске: disk.yandex.ru/d/vX90gsyR3ML6rk/disasm

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #160 : 17 Июль 2023, 00:29:03 »
Ого, спасибо больше за информацию, буду все смотреть

А почему SDL? Он пользовательские шейдера не поддерживает из коробки

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #161 : 17 Июль 2023, 14:41:15 »
А почему SDL?
Потому что у него значительно больше возможностей, он более популярен и распространён, и мне ближе Си. Его давно применяет Valve и разработчики игр.
Насчёт шейдеров - я пока не разбирался в тонкостях, но вряд ли они понадобятся в интерфейсе дизассемблера.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #162 : 17 Июль 2023, 19:44:23 »
Потому что у него значительно больше возможностей, он более популярен и распространён, и мне ближе Си. Его давно применяет Valve и разработчики игр.
Насчёт шейдеров - я пока не разбирался в тонкостях, но вряд ли они понадобятся в интерфейсе дизассемблера.

Могут понадобиться эффекты, мне понадобилось для эмуляции сеговской палитры.

А благодаря чему игра выстраивается в понятный и аккуратный граф, все равно же неизвестно ничего о внутренней структуре, то есть нужен какой-то эврестический анализ, как там дата используется, как структуры строятся, а еще динамические джампы  :neznayu:
Посмотрел немного capstone, круто, очень быстрый, понятный API, дает детальную информацию по мнемоникам, но больше ничего

Добавлено позже:
Имею ввиду, что все равно надо дописывать свой статический анализатор и добавлять возможность вручную размечать данные, например, как это сделано в иде

Добавлено позже:
И получается все зависит от конкретной игры, как они там решили сделать

Добавлено позже:
Вот у него есть ложные срабатывания на данные, это видимо, надо вручную

Добавлено позже:
Видимо, на кучу таких вещей и ушел год  0_0 :cool:
« Последнее редактирование: 17 Июль 2023, 21:25:36 от Turbo2000 »

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #163 : 18 Июль 2023, 00:00:45 »
А можете, пожалуйста, объяснить вот такое поведение?
Постоянно меняется вид из кода на граф и наоборот, пробую открывать листинг, открывает граф, все галочки снял, ничего не трогал.  :-\

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2479
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #164 : 18 Июль 2023, 17:36:53 »
у меня тож читает только те кусочки, где я точно знаю что лежит код :) прыгать не умеет. но по идее, а я щас диванно икспердное мнение выскажу, предварительно должны быть какие-то команды что копировать в видеопамять, адрес откуда копировать, и длину сколько данных. и тогда делать вывод, что указатель, куда ссылается это безобразие это не очередной прыжок в коде, откуда дальше надо читать код... а именно что графика, и следовательно не разбираем, а просто выделяем этот кусман как графика. но честно говоря подловить такой момент ну не реально :) вот например музыка - GEMS - там тупо 4 указателя друг за другом. как вот понять что здесь идет прыжок на музыку и соответственно разбирать её надо по другому? да, ВаллейБелл сделал детектор GEMS (GEMSScan) и если натянуть сову на глобус, то можно как-то раздуплить раз в игре поймался драйвер GEMS, значит где-то надо искать 4 указателя на банки... но тут второй затык уже внутри семейства GEMS - есть кастомные версии, где банков больше чем стандартные 4. есть версии где 2 байтовые указатели на мелодии или сэмплы, а есть 3 байтовые. это как-то надо выяснить :) в смысле мне то пофиг - сую распаковщику 2 байта - если взбрыкнул, сую 3 байта и готово. но как это полностью автономной программе объяснить? :) без бутылки водки тут не разобраться.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #165 : 19 Июль 2023, 23:32:33 »
IDAPython может быть поможет.

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #166 : 23 Июль 2023, 00:07:36 »
IDAPython может быть поможет.
А в чем преимущество перед нативными плагинами?
Кроме того, что язык проще  :neznayu:

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #167 : 23 Июль 2023, 15:46:43 »
Не могу сказать, не пользовался. Видимо, преимущество в том, раз нет нужного плагина, то нужное пишешь сам прямо в Иде :)

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #168 : 16 Октябрь 2023, 00:09:51 »
В общем, благодаря perfect_genius, появилась идея сделать дополнительное окно визуализации для плагина.
Работает без нареканий (Запускаю sdl в отдельном потоке), по идее можно точно так же сделать встроенный эмулятор прям в процесс, чтобы отказаться от межпроцессного взаимодействия через protobuf.
Думаю, попробовать хотя бы визуалилировать опткоды во что-нибудь читаемое, или хотя бы подсказки добавить :)
И попробовать сделать дерево вызовов более читаемое.
« Последнее редактирование: 16 Октябрь 2023, 11:29:35 от Turbo2000 »

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #169 : 17 Октябрь 2023, 19:54:07 »
Заинтриговал, но непонятно. Что показывается в этом дополнительном окошечке? И какая конечная цель?

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #170 : 02 Ноябрь 2023, 22:12:09 »
В общем, идея следующая, сделать контекстную справку, улучшить псевдокод и рисовать удобный граф.
Так как можно запускать отдельный поток, и нам доступно все api ida, то есть c помощью функций можно найти весь код, из процессора достать и т.д., не нужна прям отдельная тузла, которая занимается диззасемблингом, уже все есть.

Добавлено позже:
На видео выше, пока что proof of concept, могу читать код из ida, отправлять его, например в capstone и т.д. (декпомпиляция capstone здесь, конечно излишняя, но просто проверял возможности).
Так как графика на sdl, можно что угодно нарисовать

Добавлено позже:

Добавлено позже:
Парсер markdown кривой, можно либо дописать, либо рассмотреть другие варианты, так как нужны контекстные примеры
« Последнее редактирование: 03 Ноябрь 2023, 16:57:50 от Turbo2000 »

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #171 : 28 Ноябрь 2023, 12:52:56 »
А есть возможность посмотреть куда сейчас VDP пишет или читает, по какому смещению?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #172 : 28 Ноябрь 2023, 12:54:43 »
Если ты про мной плагин, то да:
1. Декодер команды VDP (нажать J)
2. DMA - DMA_DST "регистр".

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #173 : 28 Ноябрь 2023, 15:37:09 »
Если ты про мной плагин, то да:
1. Декодер команды VDP (нажать J)
2. DMA - DMA_DST "регистр".
А, да это видел, в райнтайме тоже работает? :)

Если нет, может добавить минитул контекстный?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #174 : 28 Ноябрь 2023, 15:38:03 »
да

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #175 : 28 Ноябрь 2023, 15:38:57 »
да
Отлично, спасибо, что-то я растерялся, посмотрю DMA_DST

Оффлайн Turbo2000

  • Пользователь
  • Сообщений: 101
  • Пол: Мужской
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #176 : 02 Декабрь 2023, 16:37:00 »
Привет, а условные брейкпоинты работают?
Eсли да: то какой синтаксис на проверку значения регистров?
Если нет: то какие были сложности, чтобы это реализовать? Возможно, попробую

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #177 : 02 Декабрь 2023, 17:22:52 »
Реализация условных бряков сложна в иде, т.к. нет норм документации. Я начинал, но так и не осилил, т.к. не ясно, как исполняется скрипт для условного бряка, и где это хэндлить.

Оффлайн perfect_genius

  • Пользователь
  • Сообщений: 1134
    • ВКонтакте
    • Steam
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #178 : 04 Декабрь 2023, 23:55:54 »
А в Гидре лучше?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Smd IDA Tools - Sega Mega Drive reversing helpers
« Ответ #179 : 04 Декабрь 2023, 23:57:17 »
А в Гидре лучше?
Для гидры у меня нет отладочного плагина.