LINUX.ORG.RU

Masm2c + libdosbox - тулкит для обратной разработки DOS-игр

 , ,

Masm2c + libdosbox - тулкит для обратной разработки DOS-игр

6

2

Вышла первая публичная версия (0.9.6) тулкита для обратной разработки 16 битных DOS-игр: Masm2c и libdosbox.

Допустим, вы решили переписать движок старой любимой игры под ДОС или специализированного DOS-софта. Кроме того что реверс-инжиниринг сложен, задачу усложняет еще и то, что используется сегментная модель памяти (адресация за раз только 64 КБайт памяти одним сегментным регистром), прямой доступ к старому железу.

Если у вас есть бинарник с движком игры, тулкит позволяет сконвертировать его в работающий переносимый код на C++. Каждая инструкция x86 заменяется аналогичной функцией на С++ (native code). Libdosbox используется для эмуляции видео, звуковых устройств и для проверки конвертации каждой инструкции x86. Получается что-то среднее между декомпиляцией и дизассемблированием.

Как результат, далее вы можете переписывать игру используя современные утилиты: gdb, и т.д. Декомпиляция — в отдалённых планах.

Исходники составных частей проекта:
https://github.com/xor2003/masm2c (GPLv3)
https://github.com/xor2003/libdosbox (GPLv2)

Аналогичный инструмент — Spice86. Такие инструменты как Ghidra и reko не выдают рабочий код.

Целью проекта является улучшение игровых движков, а не нарушение авторских прав.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 9)

Ответ на: комментарий от xor2003

Я сейчас планирую переделать транслятор чтобы он выдавал более высокоуровневый код. Например используя SMT. Можно странслированный код компилировать в 32/64 бита x86 либо .NET и потом декомпилировать, чтобы удалить лишний код (работу с флагами) и получить высокоуровневый код.

Да, чисто сама обратная развертка интересующего алгоритма в программе кажется неудобным через такой листинг, ведь там же не восстанавливаются время жизни переменных?

.NET кажется перспективным, так как оно может выступить чистилищем, в котором легко проявятся всякие косяки с указателями.

Tinker
()
Ответ на: комментарий от Crocodoom

Пермиссивные лицензии типа MIT дают больше свободы тем, кто этот код получил

Да, они дают свободу всем, а не избирательно.

GPL же даёт больше свободы автору кода

С чем же связаны тогда скандалы с перелицензированием GPL-кода в более ограничительные, AGPL или даже сепарация пользователей на коммерческих и home-user`ов? Видимо, GPL все таки не дает свободу автору?

Если смотреть с этой точки зрения, то MIT-лицензии отправляют код в свободное плавание, а значит они истинно свободные лицензии, а GPL - это все-таки грызня за звонкую монету, но облеченная в более скрытую форму.

Tinker
()
Ответ на: комментарий от Tinker

Это рабочий код - там нет косяков с указателями. Сама посебе конвертация получилась сложная, т.к. нужно например изобразить вызовы ассемблера используя С, структуру памяти используя переменные… Ясно что нужна декомпиляция

xor2003
() автор топика
Ответ на: комментарий от Tinker

P.S. Забыл еще дописать. Так как GPL все - таки про грызню за звонкую монету, то нередко случается, что авторов GPL-ПО перекупает какая-нить корпорация, и получается, что GPL начинает давать больше свободы корпорации? А корпорациям проще работать с винтиками, и создавать тренды - то есть это будет вести к упрощению?

Tinker
()
Ответ на: комментарий от xor2003

Это рабочий код - там нет косяков с указателями

Я не выказывал в этом аспекте сомнения. Я имею ввиду вообще изначальные баги программы, либо те , которые заносятся ненароком при реверсе.

Tinker
()

Ну, идея вобщем не новая. Но - глупвя, по сути своей. В том смысле, что эмулятор MS-DOS запилить горадо проще.

cadaber ★★
()
Ответ на: комментарий от RussianWarShip

Вызывающе неверное утверждение

У вас вообще комментарий с нулевой ценностью. Ничего кроме «ты не прав» он не содержит, а поэтому к рассмотрению не принимается

Crocodoom ★★★★★
()
Ответ на: комментарий от Tinker

Да, они дают свободу всем, а не избирательно.

Так и есть. Всем даётся одинаковая свобода делать с кодом что угодно, сохраняя только приписку об авторстве

GPL же даёт больше свободы автору кода

С чем же связаны тогда скандалы с перелицензированием GPL-кода в более ограничительные, AGPL или даже сепарация пользователей на коммерческих и home-user`ов? Видимо, GPL все таки не дает свободу автору?

Вопрос совершенно не по адресу, я за скандалами не слежу. GPL же даёт намного больше свободы автору, чем MIT. А остальным — да, меньше. Вот такая ассиметрия на автора.

а GPL - это все-таки грызня за звонкую монету, но облеченная в более скрытую форму.

Ничего себе! GPL, оказывается, помогает зарабатывать программистам свободного софта? Да что вы говорите?!

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Нужно рассказывать очевидные вещи? Автор изначально максимально свободен в своих действиях. Принятие условий лицензии налагает на него ограничения, то есть делает менее свободным. Все просто.

RussianWarShip
()
Ответ на: комментарий от hobbit

Вот именно, что жульничество. Спор GPL vs MIT может продолжаться и дальше, но я уверен на 99.99%, что сторонники MIT будут отстаивать нахлебническую позицию. Им нужна свобода брать чужой код и делать с ним то, что они хотят, вот и вся сказочка

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 1)
Ответ на: комментарий от RussianWarShip

Нужно рассказывать очевидные вещи?

Разумеется нужно, потому что для оппонентов очевидными могут являться противположные тезисы

Автор изначально максимально свободен в своих действиях

Допустим

Принятие условий лицензии налагает на него ограничения, то есть делает менее свободным

А вот тут стоп. Что делает автора менее свободным, принятие MIT или GPL? Ваш ответ, с аргументами?

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

GPL же даёт больше свободы автору кода

превращается в

Что делает автора менее свободным, принятие MIT или GPL?

Это хитрый такой прием ведения дискурсии?

RussianWarShip
()
Ответ на: комментарий от RussianWarShip

Понятно, в открытых вопросах вы слабы. Ожидаемо.

Crocodoom ★★★★★
()
Ответ на: комментарий от Xintrea

Есть IDA free 5.0 - ее рекомендовали SCUMMVM

Free - это же не значит что исходники открыты?

Это значит фриварь — бесплантный. ЕМНИП, в версиях выше 5 убрали поддержку каких-то 16-битных фич.

olegd ★★★
()
Ответ на: комментарий от tiinn

LH C:\DOS\MOUSE.EXE в AUTOEXEC.BAT?

А она хоть у кого-то работала? Говорят, что лишь QEMM умел переносить код в высокую память.

ЕМНИП, himem.sys хватало. Запускал Golden Axe на 608К нижней памяти и видел персонажей, недоступных с 580К.

olegd ★★★
()
Ответ на: комментарий от anonymous_incognito

Были универсальные распаковщики, например, cup386.

UUP (Universal EXE UnPacker) ещё.

olegd ★★★
()

Как с поддержкой LE со вклеенным DOS4GW? Опознаёт обращения к нему и подменяет, или тупо декомпилирует и его тоже?

Как с поддержкой объектов Watcom C++? Умеет декомпилятор собирать методы и переменные вместе, или они так и остаются россыпью?

Меня интересует игра, которая в процессе подгружала экзешники, содержавшие, насколько могу судить, экземпляры полиморфного класса. Видимо, чтобы влезть в 580К нижней пямяти. Хотя DOS4GW использовала. Это не были обычные досовские оверлеи, там что-то своё. С таким финтом декомпилятор справится?

question4 ★★★★★
()
Ответ на: комментарий от question4

LE - это 32 битный код.

IDA используется чтобы получить .lst файл

masm2c - транслятор из .lst в .cpp (транслировать 32битный код не проблема). Т.е. тулкит - что-то среднее между дизассемблером и декомпилятором.

libdosbox - эмулятор, пока не умеет проверять транслированный 32 битный код, если надо - присоединяйтесь и добавьте.

Зато под 32 бита много готовых декомпиляторов.

Классы и структуры - это мечта пока. Есть идеи как их связать? По идее поможет сбор run-time информации эмулятором…

xor2003
() автор топика
Последнее исправление: xor2003 (всего исправлений: 2)
Ответ на: комментарий от Tinker

а GPL - это все-таки грызня за звонкую монету

Это толстый троллинг или эталонный тупняк? Куча свободного ПО, опубликованного под GPL и невозбранно доступного всем желающим — это «грызня за звонкую монету»?

hobbit ★★★★★
()
Ответ на: комментарий от xor2003

Зато под 32 бита много готовых декомпиляторов.

Которые умеют работать с DOS-extender-ами и Linear EXE?

Классы и структуры - это мечта пока. Есть идеи как их связать?

Вполне очевидно, что при передаче класса или структуры передаётся ссылка на неё, и функция работает со смещениями относительно переданного значения. В случае вызова методов класса первым параметром идёт ссылка на класс, и активно используются смещения относительно него. Это легко ловится вручную. Дальше идёт кропотливая работа по поиску одинаковых смещений, когда фактически мысленно выполняешь декомпилированный код. Эту часть не осилил.

Насколько хорошо это умеет Hex-Rays?

question4 ★★★★★
()
Ответ на: комментарий от hobbit

Это толстый троллинг или эталонный тупняк?

Эталонно толстый троллинг. Все перечисленные аргументы тысячи раз повторялись.

Либо обиженный на весь свет скандалист ищет повод поскандалить. То есть тоже эталонно толстый троллинг.

olegd ★★★
()
Ответ на: комментарий от hobbit

Я ещё хотел бы выделить, что GPL в первую очередь освобождает сам код. Это база СПО. Это первично.

Про свободы же для авторов/юзеров можно полемизировать (я и хотел чуть выше 😁), но это по большому счёту философия для разминки ума...

Crocodoom ★★★★★
()
Ответ на: комментарий от xor2003

Ida может LE

Ну да, в ней всё и делал. Но как автоматизировать, не разбирался.

И один вопрос остался неотвеченным: как с оверлеями?

question4 ★★★★★
()
Ответ на: комментарий от question4

Приходится все вручную подгружать сначала в IDA. Потом только конвертировать

xor2003
() автор топика
Ответ на: комментарий от Magnum

Эта тула оживляет старый ДОС софт, которого очень много. Упрощает этот процесс. Процентов 10% осталось до полной готовности. Для фанатов.

xor2003
() автор топика
Последнее исправление: xor2003 (всего исправлений: 1)
Ответ на: комментарий от Tinker

.NET кажется перспективным, так как оно может выступить чистилищем, в котором легко проявятся всякие косяки с указателями.

Ах да. Во времена ДОСа некоторые баги с указателями вполне могли оказаться фичами, исправление которых сделает программу неработоспособной.

hobbit ★★★★★
()
Ответ на: комментарий от xor2003

Так это ваш личный проект. Уважуха!

anc ★★★★★
()
Ответ на: комментарий от Crocodoom

Вопрос совершенно не по адресу, я за скандалами не слежу.

Я тоже не особо слежу, но как-то само собой больше в новостях попадаются случаи о том, как программист, писавший GPL-код, вдруг начинает кидать предъявы компаниям, бесплатно использующим его код и пытается закрыть под более ограничительной лицензией.

GPL же даёт намного больше свободы автору, чем MIT. А остальным — да, меньше. Вот такая ассиметрия на автора.

То есть GPL-код не является свободным, он только открыт. Ну как, например, мышеловка.

Tinker
()
Ответ на: комментарий от hobbit

Куча свободного ПО, опубликованного под GPL и невозбранно доступного всем желающим — это «грызня за звонкую монету»?

Пожалуй, это мои личные ощущения, которые сложились подспудно при работе с GPL-кодом и шумом вокруг него. Ну и надо учитывать, что я не говорю за весь IT-области. Но в специфической, относящейся к теме TC, да. Вот допустим, был и есть Sandbox plus под GPL. Автор взял и ввел платные фичи, а открытый код просто так не перекомпилишь, там драйвер нужно подписывать под винду.

Tinker
()
Ответ на: комментарий от Magnum

Так и не понял что это такое

Полуручной инструментарий для превращения 16-битных игр под MS-DOS (практически все игры до 1991-го, значительная часть до 1995-го) во франкенштейнов более-менее работающих на современных платформах. Тема декомпиляции 16-битных программ технически сложная и не слишком популярная, поэтому альтернатив не видно, только самостоятельно что-то велосипедить.

Для работы требуется закрыто-несвободный ограниченно продаваемый дизассемблер IDA (на торрентах есть). В идеальном случае файл, выдаваемый IDA, преобразуется в исходник на C, который линкуется с прилагаемой библиотекой и SDL, и можно играть. (Реально возможно много проблем, начиная с того, что дизассемблер не заметит часть кода.)

Примерно таким образом в 2000-х годах сделали неофициальный порт UFO: Enemy Unknown под Windows CE.

question4 ★★★★★
()
Ответ на: комментарий от question4

В основном верно.

«Для работы требуется закрыто-несвободный ограниченно продаваемый дизассемблер IDA (на торрентах есть)»

  • можно использовать IDA Free 5.0 бесплатный. В общем можно переделать и под свободный дизассемблер. Или написать дизассемблер управляемый скриптами.

«Реально возможно много проблем, начиная с того, что дизассемблер не заметит часть кода» - такое бывает. Но т.к. я в эмуляторе, проверяю результаты каждой инструкции (оригинальной и сконвертированной) - ошибка найдется очень быстро. И в лучшем случае рабочий франкештейн-код получится за пару дней. Без такой проверки - уйдет пару месяцев на отладку.

Сейчас работаю над улучшением читабельности и в сторону декомпиляции

xor2003
() автор топика
Последнее исправление: xor2003 (всего исправлений: 1)
Ответ на: комментарий от xor2003

IDA Free 5.0

Не знал, что его снова сделали доступным.

question4 ★★★★★
()
17 июля 2022 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.