Автор Тема: [Видеоуроки] Sega Mega Drive / Genesis games reverse engineering  (Прочитано 6794 раз)

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Собственно, я решил снять серию видео о том, как я ревершу игры на 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]
    « Последнее редактирование: 28 Апрель 2021, 18:02:18 от DrMefistO »

    Оффлайн Mr2

    • Пользователь
    • Сообщений: 1593
    • Пол: Мужской
    • Free roaming sorcerer
      • Facebook
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #1 : 17 Октябрь 2018, 11:53:47 »
    Нет ничего прекраснее чем смотреть как течёт вода, горит огонь, и ревёрсит DrMefistO. :drinks:

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #2 : 17 Октябрь 2018, 13:54:22 »
    Вай вай, лесть такая лестная...)

    Оффлайн worm

    • Пользователь
    • Сообщений: 1083
    • Пол: Мужской
    • Закалён и плечист.
      • ВКонтакте
      • Просмотр профиля
    Re: [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #3 : 17 Октябрь 2018, 14:54:13 »
    Нет ничего прекраснее чем смотреть как течёт вода, горит огонь, и ревёрсит DrMefistO. :drinks:
    Отлично сказано

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #4 : 17 Октябрь 2018, 22:18:33 »
    Добавил вторую часть

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #5 : 20 Октябрь 2018, 01:13:19 »
    Добавил третье видео. На этот раз - почти 4 часа...

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #6 : 20 Октябрь 2018, 20:23:18 »
    Добавил 4-ю часть. Она покороче.

    Оффлайн Griever

    • Пользователь
    • Сообщений: 77
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #7 : 20 Октябрь 2018, 21:39:22 »
    Конечно, пошло это ещё от CaH4e3'a, но мне твои видео нравятся больше, спасибо!
    Единственное, о чем я всегда говорил по этой теме - невозможно на 100% верифицировать насколько правильно дизассемблирован РОМ. Даже если он работает на первый взгляд и не виснет, где гарантия, что, к примеру, какой-нибудь цвет одной из палитр случайно не распознан как указатель на что-нибудь?
    Соответственно, при перемещении кода указатель будет изменяться, а игра по-прежнему будет использовать этот блок как палитру. В итоге в одном из уровней палитра будет слегка изменена, и этого можно просто не заметить.
    А ведь могут быть и другие ошибки, приводящие к зависанию. Получается для верификации, надо пересобирать, смещать код и потом проходить заново игру, заходя в абсолютно все места, внимательно наблюдая, не изменился ли текст, та ли музыка играет и в итоге так и не гарантировать, что игра осталась той же. Да и время такой тестинг практически займет больше, чем на сам дизасм игры.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #8 : 20 Октябрь 2018, 22:00:19 »
    В случае сеги отделить данные от кода куда проще. Но, да, тестировать нужно определённо.
    Для этого могут подойти тас-видосы, которые обычно подогнаны по таймингу. Если где-то разбежка, то вероятность большая, что накосячил.

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

    Кстати, спасибо за отзыв! Очень приятно:)

    Оффлайн MetalliC

    • Технический консультант
    • Сообщений: 9386
    • Пол: Мужской
    • Demul team / MAME developer
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #9 : 20 Октябрь 2018, 22:16:36 »
    DrMefistO, познавательно, молодца !

    но, почему не использовать TAS с записью трейслога (или спец процедурки в эмуляторе, которая делает "карту" где выполнялся код), с последующим скармливанием этого скрипту IDA который по этой карте промаркирует как код все нужные адреса ?
    время здорово экономится.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #10 : 20 Октябрь 2018, 22:39:10 »
    Раньше я так и делал. Но, мне почему-то так стало казаться не достаточно точным в результате. Да, получается практически весь использованный за игру код будет отмечен, но, не у всех игр есть тасы, а проходить вручную некоторые игры затруднительно. Быстрее - руками весь код забить.

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

    Оффлайн Griever

    • Пользователь
    • Сообщений: 77
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #11 : 20 Октябрь 2018, 23:10:52 »
    В случае сеги отделить данные от кода куда проще. Но, да, тестировать нужно определённо.
    Для этого могут подойти тас-видосы, которые обычно подогнаны по таймингу. Если где-то разбежка, то вероятность большая, что накосячил.
    Попробуй пересобрать со смещенным в 1 байт кодом - должен появиться рассинхрон. Где-то здесь обсуждали причины этого.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #12 : 20 Октябрь 2018, 23:18:49 »
    А как же выравнивание по 2?

    Оффлайн Griever

    • Пользователь
    • Сообщений: 77
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #13 : 20 Октябрь 2018, 23:29:08 »
    Ну или на два  :)
    Смысл в том, что поменяется тайминг выполнения некоторых блоков кода.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #14 : 21 Октябрь 2018, 14:33:33 »
    Он точно поменяется. Есть же разница - выполнять одну инструкцию, или две.

    А вот сместив случайные функции на два байта, убрав align'ы, org'и - так стоит сделать, да.

    Оффлайн Ti_

    • Пользователь
    • Сообщений: 3265
    • Пол: Мужской
      • ВКонтакте
      • Youtube
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #15 : 21 Октябрь 2018, 21:46:42 »
    Он говорит про смещение, а не добавление/удаление. Скажем оригинал был с адреса $200, а пересборка с $202. В итоге все адреса другие.
    Тайминги не изменятся, кроме специфических ситуаций. Но если будет ошибка в коде, то конечно что-то пойдет не так.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #16 : 21 Октябрь 2018, 21:50:32 »
    А, ну вот и я про это

    Оффлайн Griever

    • Пользователь
    • Сообщений: 77
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #17 : 22 Октябрь 2018, 19:41:24 »
    и на счет мувиков. после любого сдвига в игре в коде или даже иногда в данных, рассинхрон будет в любом случае. сдвиг опкодов ведет к изменению тактовки некоторых инструкций, которые зависят от перехода через страницу памяти. сдвинутый код в большинстве случаев даст рассинхрон и часто сразу... так что тестить надо руками, и двигать по частям а не все сразу. тогда зная, что лежит там где сдвинуто, можно выбрать специальный тест или знать куда пойти и во что ткнуть чтобы проверить..
    Не уверен, что это справедливо для 68000, но, видимо, применимо к 6502 и z80

    Оффлайн MetalliC

    • Технический консультант
    • Сообщений: 9386
    • Пол: Мужской
    • Demul team / MAME developer
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #18 : 22 Октябрь 2018, 20:10:32 »
    нет, не справедливо, в M68000 и Z80 нету страниц памяти как в 6502.

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

    Оффлайн Mefistotel

    • Emu-Land Team
    • Сообщений: 1509
    • Пол: Мужской
    • Генерал армии Хаоса
      • ВКонтакте
      • Youtube
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #19 : 27 Октябрь 2018, 15:06:57 »
    Спасибо за видеоуроки! :thumbup:
    Я так понял, реверсить тебе интереснее, чем переводить)

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #20 : 27 Октябрь 2018, 15:58:25 »
    Когда это перевод сделанный правильно, тогда тоже интересно. И я имею в виду правильный хакинг.:)

    Оффлайн worm

    • Пользователь
    • Сообщений: 1083
    • Пол: Мужской
    • Закалён и плечист.
      • ВКонтакте
      • Просмотр профиля
    Re: [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #21 : 29 Октябрь 2018, 21:11:52 »
    Док, как насчет напилить побольше коротких, но сосредоточенных на определенных моментах дизасма уроков? Например, пятиминутное видео, где ты рассказываешь подробно о том, как определить в точности указатель перед нами или простое значение, записываемое в регистр и т.д. ?  :)

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #22 : 04 Ноябрь 2018, 18:03:55 »
    Добавил новое видео по Addams Family. Там показал некоторые хитрости по наработке карты кода, и использованию записей прохождений, а также немного рассказал о RNC Propack.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #23 : 24 Ноябрь 2018, 00:29:10 »
    Добавил 5-ю частью видоса по QuackShot. Теперь ром собирается.
    В следующей части уже найду и исправлю багу, из-за которой ром плохо поддаётся модификации, и заодно покажу некоторые другие хитрости.

    Добавлено позже:
    Косяк с видосом: звук не воспроизводится:(
    « Последнее редактирование: 24 Ноябрь 2018, 01:33:48 от DrMefistO »

    Оффлайн Yoti

    • Пользователь
    • Сообщений: 4446
    • Пол: Мужской
    • Не тро-гай ме-ня
      • Steam
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #24 : 24 Ноябрь 2018, 02:06:15 »
    Косяк с видосом: звук не воспроизводится:(
    Локально или после заливки? Исходник или после монтажа?

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #25 : 24 Ноябрь 2018, 02:09:48 »
    Оказалось, что прям в исходнике. Программа записи решила сбросить настройки источника звука на другой девайс:(

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #26 : 29 Ноябрь 2018, 00:24:55 »
    Переделал пятое видео по квакшоту. Теперь всё стало ещё проще!

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #27 : 01 Декабрь 2018, 01:11:43 »
    Добавил видео "Reassembly Sega ROM asm-listing from IDA Pro".

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #28 : 02 Декабрь 2018, 15:07:17 »
    Реверс квакшота теперь идёт вне видео-цикла: параллельно модифицирую asm_fixer.py, создаю систему сборки на питоне (чтобы кроссплатформенно почти), добрался до редактирования пожатых параметров уровней, и наборов объектов, которые встречаются на уровне. Всё это с последующей перепаковкой. Тема реально крутая!

    Из разобранных сорсов есть ещё Thunder Force 3 Думаю, если будет время, покажу, как я её реверсил.

    Оффлайн DrMefistO

    • Пользователь
    • Сообщений: 1294
    • Пол: Мужской
    • Sega Mega Drive reversing
      • Просмотр профиля
    [Видеуроки] Sega Mega Drive / Genesis games reverse engineering
    « Ответ #29 : 10 Декабрь 2018, 06:16:21 »
    Опубликовал видео: "Thunder Force 3 reverse engineering (part 1)".