PDA

Просмотр полной версии : Дизассемблирование спектрумовских игр



CityAceE
11.04.2016, 15:04
Решил попробовать получить исходный код одной из ZX-игр. При всей простоте, оказалось, что это довольно трудоёмкий процесс. Я опробовал:

1. IDA Pro
2. SPEDIZ
3. ZX Spin

Понятное дело, что ни один из этих инструментов не даст вот так сходу получить готовый исходный код. Нужно сидеть и тщательно анализировать строку за строкой, выделяя таблицы, переменные и графику. Безусловно IDA Pro - самый мощный инструмент. Однако очень странно, что нет ни одного эмулятора, который может выдавать более или менее готовый ассемблерный код (или я его не нашёл?), ведь именно эмулятор точно знает, где исполняемый код, который проходит через процессор, а где другие данные, достаточно только один раз прогнать через него исследуемую программу.

Знаю, что я далеко не первый кто пытается дизассемблировать готовую программу. И вот тех людей, которые успешно получали исходный код я прошу поделиться советами и рекомендациями. Как и с помощью каких инструментов вы это делали, какова была последовательность ваших действий и т.д.?

krt17
11.04.2016, 19:35
В связи с тем что последнее время периодически занимаюсь переделкой игр под эльфа сложился, небольшой алгоритм по дизасму. Мне не нужно всю игру, а только как правило меню, обработчик клавиатуры, иногда немного механику управления и музыку, поэтому все я не разбираю. Использую IDA Pro, ничего другого в качестве альтернативы не вижу. Немного по шагам.
1. Разбираю в ZX-Blockeditor оригинальный образ, снимаю защиту, если есть, разбираю на блоки, записываю алгоритм загрузки и запуска.
2. Делаю отладочный сборщик на асме, собираю в sna, в нем в последующем вношу изменения. При компиляции выгружаю и sna и bin файл только с необходимым кодом
3. Загружаю bin в иду, разбираю, проставляю метки. Для моих целей на все уходит 3-4 часа, иногда если интересно втыкаю как все там устроено.
4. Все необходимые исправления компилю поверх бинарников. Патченая игра готова. Далее сборка карика, но это уже совсем не по теме.
Сейчас делаю nightshade (https://www.dropbox.com/s/cm9d02s2lpvkerk/Nightshade%20%281985%29.zip?dl=0), еще не готово, но в общих чертах понятно как это выглядит.

Titus
11.04.2016, 21:44
ведь именно эмулятор точно знает, где исполняемый код, который проходит через процессор, а где другие данные, достаточно только один раз прогнать через него исследуемую программу.

Не достаточно. Только очень простые программы исполняют весь свой код в течение короткого время после запуска. 99% программ этого не делают, и часть кода может быть вообще не исполнена за время использования вами никогда.
Однако, какую-то помощь в поиске заведомо исполняемых фрагментов кода эмулятор может все же оказать.

CityAceE
13.04.2016, 05:03
Все необходимые исправления компилю поверх бинарников.
Чем производится компиляция?


Сейчас делаю nightshade, еще не готово, но в общих чертах понятно как это выглядит.
Увы, посмотреть не смог:
http://storage9.static.itmages.ru/i/16/0413/h_1460512978_4252737_fbcfd78e18.png


Однако, какую-то помощь в поиске заведомо исполняемых фрагментов кода эмулятор может все же оказать.
Вот именно такие случая я и имею ввиду.

krt17
13.04.2016, 09:44
Чем производится компиляция?
Компилить sjasmplus. Я делаю incbin оригинального кода, а поверх org'ами с кодовыми вставками вношу изменения. Это позволяет, если что где напутал, видеть полный список изменений и не искать по бинарнику.

Увы, посмотреть не смог:
Ничего не знаю, честно скачал с сайта проверенного хакером Димой.