Разработка и ромхакинг > Ромхакинг
Smd IDA Tools - Sega Mega Drive reversing helpers
<< < (9/15) > >>
DrMefistO:
Собственно, проект по написанию крутых специфичных плагинов в помощь ромхакерам 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
Turbo2000:
Ого, спасибо больше за информацию, буду все смотреть

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

--- Цитата: Turbo2000 от 17 Июль 2023, 00:29:03 ---А почему SDL?
--- Конец цитаты ---
Потому что у него значительно больше возможностей, он более популярен и распространён, и мне ближе Си. Его давно применяет Valve и разработчики игр.
Насчёт шейдеров - я пока не разбирался в тонкостях, но вряд ли они понадобятся в интерфейсе дизассемблера.
Turbo2000:

--- Цитата: perfect_genius от 17 Июль 2023, 14:41:15 ---Потому что у него значительно больше возможностей, он более популярен и распространён, и мне ближе Си. Его давно применяет Valve и разработчики игр.
Насчёт шейдеров - я пока не разбирался в тонкостях, но вряд ли они понадобятся в интерфейсе дизассемблера.

--- Конец цитаты ---

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

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

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

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

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

Добавлено позже:
Видимо, на кучу таких вещей и ушел год  0_0 :cool:
Turbo2000:
А можете, пожалуйста, объяснить вот такое поведение?
Постоянно меняется вид из кода на граф и наоборот, пробую открывать листинг, открывает граф, все галочки снял, ничего не трогал.  :-\
SeregaZ:
у меня тож читает только те кусочки, где я точно знаю что лежит код :) прыгать не умеет. но по идее, а я щас диванно икспердное мнение выскажу, предварительно должны быть какие-то команды что копировать в видеопамять, адрес откуда копировать, и длину сколько данных. и тогда делать вывод, что указатель, куда ссылается это безобразие это не очередной прыжок в коде, откуда дальше надо читать код... а именно что графика, и следовательно не разбираем, а просто выделяем этот кусман как графика. но честно говоря подловить такой момент ну не реально :) вот например музыка - GEMS - там тупо 4 указателя друг за другом. как вот понять что здесь идет прыжок на музыку и соответственно разбирать её надо по другому? да, ВаллейБелл сделал детектор GEMS (GEMSScan) и если натянуть сову на глобус, то можно как-то раздуплить раз в игре поймался драйвер GEMS, значит где-то надо искать 4 указателя на банки... но тут второй затык уже внутри семейства GEMS - есть кастомные версии, где банков больше чем стандартные 4. есть версии где 2 байтовые указатели на мелодии или сэмплы, а есть 3 байтовые. это как-то надо выяснить :) в смысле мне то пофиг - сую распаковщику 2 байта - если взбрыкнул, сую 3 байта и готово. но как это полностью автономной программе объяснить? :) без бутылки водки тут не разобраться.
Беларус учит русский:
IDAPython может быть поможет.
Turbo2000:

--- Цитата: perfect_genius от 19 Июль 2023, 23:32:33 ---IDAPython может быть поможет.

--- Конец цитаты ---
А в чем преимущество перед нативными плагинами?
Кроме того, что язык проще  :neznayu:
Беларус учит русский:
Не могу сказать, не пользовался. Видимо, преимущество в том, раз нет нужного плагина, то нужное пишешь сам прямо в Иде :)
Turbo2000:
В общем, благодаря perfect_genius, появилась идея сделать дополнительное окно визуализации для плагина.
Работает без нареканий (Запускаю sdl в отдельном потоке), по идее можно точно так же сделать встроенный эмулятор прям в процесс, чтобы отказаться от межпроцессного взаимодействия через protobuf.
Думаю, попробовать хотя бы визуалилировать опткоды во что-нибудь читаемое, или хотя бы подсказки добавить :)
И попробовать сделать дерево вызовов более читаемое.
Беларус учит русский:
Заинтриговал, но непонятно. Что показывается в этом дополнительном окошечке? И какая конечная цель?
Turbo2000:
В общем, идея следующая, сделать контекстную справку, улучшить псевдокод и рисовать удобный граф.
Так как можно запускать отдельный поток, и нам доступно все api ida, то есть c помощью функций можно найти весь код, из процессора достать и т.д., не нужна прям отдельная тузла, которая занимается диззасемблингом, уже все есть.

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

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

Добавлено позже:
Парсер markdown кривой, можно либо дописать, либо рассмотреть другие варианты, так как нужны контекстные примеры
Turbo2000:
А есть возможность посмотреть куда сейчас VDP пишет или читает, по какому смещению?
DrMefistO:
Если ты про мной плагин, то да:
1. Декодер команды VDP (нажать J)
2. DMA - DMA_DST "регистр".
Turbo2000:

--- Цитата: DrMefistO от 28 Ноябрь 2023, 12:54:43 ---Если ты про мной плагин, то да:
1. Декодер команды VDP (нажать J)
2. DMA - DMA_DST "регистр".

--- Конец цитаты ---
А, да это видел, в райнтайме тоже работает? :)

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

--- Цитата: DrMefistO от 28 Ноябрь 2023, 15:38:03 ---да

--- Конец цитаты ---
Отлично, спасибо, что-то я растерялся, посмотрю DMA_DST
Turbo2000:
Привет, а условные брейкпоинты работают?
Eсли да: то какой синтаксис на проверку значения регистров?
Если нет: то какие были сложности, чтобы это реализовать? Возможно, попробую
DrMefistO:
Реализация условных бряков сложна в иде, т.к. нет норм документации. Я начинал, но так и не осилил, т.к. не ясно, как исполняется скрипт для условного бряка, и где это хэндлить.
Беларус учит русский:
А в Гидре лучше?
DrMefistO:

--- Цитата: perfect_genius от 04 Декабрь 2023, 23:55:54 ---А в Гидре лучше?

--- Конец цитаты ---
Для гидры у меня нет отладочного плагина.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии