| Разработка и ромхакинг > Ромхакинг и программирование |
| [Видеоуроки] 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: Я так понял, реверсить тебе интереснее, чем переводить) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |