Разработка и ромхакинг > Ромхакинг и программирование
[Видеоуроки] Sega Mega Drive / Genesis games reverse engineering
(1/3) > >>
DrMefistO:
Собственно, я решил снять серию видео о том, как я ревершу игры на Sega. И первой игрой станет QuackShot. Уже добавились: Addams Family, Thunder Force 3, Zero Tolerance.

Это будут видео не просто о поиске сжатой графики, текста, или о создании мелких модов. Это будет, скорее, обучалка тому, как пользоваться IDA Pro при реверсе сеговских игр. И, в итоге, результатом станет полностью пересобираемый (ассемблируемый), модифицируемый (расширяемый) исходник игры. Его можно будет перевести на родной язык без проблем с переносами строк, поиском указателей и других тому подобных заморочек. Просто меняем текст, собираем ром, получаем рабочую игру с русской версией.
Ну, и, конечно, полноценные ромхаки так же можно будет делать.

Список видео:

* QuackShot Starring Donald Duck reverse engineering (part 1)

* QuackShot Starring Donald Duck reverse engineering (part 2)

* QuackShot Starring Donald Duck reverse engineering (part 3)

* QuackShot Starring Donald Duck reverse engineering (part 4)

* QuackShot Starring Donald Duck reverse engineering (part 5)

* Addams Family, The reverse engineering (part 1)

* Reassembly Sega ROM asm-listing from IDA Pro

* Thunder Force 3 reverse engineering (part 1)

* Thunder Force 3 reverse engineering (part 2)

* Zero Tolerance reverse engineering (part 1)

* Zero Tolerance reverse engineering (part 2)

* Thunder Force 3 reverse engineering (part1) GHIDRA

[li$i]Ghostbusters reverse engineering (part1)

[/list]
Mr2:
Нет ничего прекраснее чем смотреть как течёт вода, горит огонь, и ревёрсит DrMefistO. :drinks:
DrMefistO:
Вай вай, лесть такая лестная...)
worm:

--- Цитата: Mr2 от 17 Октябрь 2018, 11:53:47 ---Нет ничего прекраснее чем смотреть как течёт вода, горит огонь, и ревёрсит DrMefistO. :drinks:

--- Конец цитаты ---
Отлично сказано
DrMefistO:
Добавил вторую часть
DrMefistO:
Добавил третье видео. На этот раз - почти 4 часа...
DrMefistO:
Добавил 4-ю часть. Она покороче.
Griever:
Конечно, пошло это ещё от CaH4e3'a, но мне твои видео нравятся больше, спасибо!
Единственное, о чем я всегда говорил по этой теме - невозможно на 100% верифицировать насколько правильно дизассемблирован РОМ. Даже если он работает на первый взгляд и не виснет, где гарантия, что, к примеру, какой-нибудь цвет одной из палитр случайно не распознан как указатель на что-нибудь?
Соответственно, при перемещении кода указатель будет изменяться, а игра по-прежнему будет использовать этот блок как палитру. В итоге в одном из уровней палитра будет слегка изменена, и этого можно просто не заметить.
А ведь могут быть и другие ошибки, приводящие к зависанию. Получается для верификации, надо пересобирать, смещать код и потом проходить заново игру, заходя в абсолютно все места, внимательно наблюдая, не изменился ли текст, та ли музыка играет и в итоге так и не гарантировать, что игра осталась той же. Да и время такой тестинг практически займет больше, чем на сам дизасм игры.
DrMefistO:
В случае сеги отделить данные от кода куда проще. Но, да, тестировать нужно определённо.
Для этого могут подойти тас-видосы, которые обычно подогнаны по таймингу. Если где-то разбежка, то вероятность большая, что накосячил.

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

Кстати, спасибо за отзыв! Очень приятно:)
MetalliC:
DrMefistO, познавательно, молодца !

но, почему не использовать TAS с записью трейслога (или спец процедурки в эмуляторе, которая делает "карту" где выполнялся код), с последующим скармливанием этого скрипту IDA который по этой карте промаркирует как код все нужные адреса ?
время здорово экономится.
DrMefistO:
Раньше я так и делал. Но, мне почему-то так стало казаться не достаточно точным в результате. Да, получается практически весь использованный за игру код будет отмечен, но, не у всех игр есть тасы, а проходить вручную некоторые игры затруднительно. Быстрее - руками весь код забить.

Вообще, в smd_ida_tools есть такой функционал - по скармливанию записи прохождения и наложению на ром. Пользоваться можно.
Griever:

--- Цитата: DrMefistO от 20 Октябрь 2018, 22:00:19 ---В случае сеги отделить данные от кода куда проще. Но, да, тестировать нужно определённо.
Для этого могут подойти тас-видосы, которые обычно подогнаны по таймингу. Если где-то разбежка, то вероятность большая, что накосячил.

--- Конец цитаты ---
Попробуй пересобрать со смещенным в 1 байт кодом - должен появиться рассинхрон. Где-то здесь обсуждали причины этого.
DrMefistO:
А как же выравнивание по 2?
Griever:
Ну или на два  :)
Смысл в том, что поменяется тайминг выполнения некоторых блоков кода.
DrMefistO:
Он точно поменяется. Есть же разница - выполнять одну инструкцию, или две.

А вот сместив случайные функции на два байта, убрав align'ы, org'и - так стоит сделать, да.
Ti_:
Он говорит про смещение, а не добавление/удаление. Скажем оригинал был с адреса $200, а пересборка с $202. В итоге все адреса другие.
Тайминги не изменятся, кроме специфических ситуаций. Но если будет ошибка в коде, то конечно что-то пойдет не так.
DrMefistO:
А, ну вот и я про это
Griever:

--- Цитата: CaH4e3 от 05 Апрель 2018, 14:25:23 ---и на счет мувиков. после любого сдвига в игре в коде или даже иногда в данных, рассинхрон будет в любом случае. сдвиг опкодов ведет к изменению тактовки некоторых инструкций, которые зависят от перехода через страницу памяти. сдвинутый код в большинстве случаев даст рассинхрон и часто сразу... так что тестить надо руками, и двигать по частям а не все сразу. тогда зная, что лежит там где сдвинуто, можно выбрать специальный тест или знать куда пойти и во что ткнуть чтобы проверить..

--- Конец цитаты ---
Не уверен, что это справедливо для 68000, но, видимо, применимо к 6502 и z80
MetalliC:
нет, не справедливо, в M68000 и Z80 нету страниц памяти как в 6502.

но стоит помнить, что если звуковой движок этой игры использует маппинг данных картриджа в адресное пространство Z80 - блоки с этими данными должны остаться выровненными по 32Кбайт.
Mefistotel:
Спасибо за видеоуроки! :thumbup:
Я так понял, реверсить тебе интереснее, чем переводить)
Навигация
Главная страница сообщений
Следующая страница

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