Декомпиляция игры DOS 16-bit

Тема в разделе "WASM.BEGINNERS", создана пользователем xor2003, 22 июн 2011.

  1. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    Здравствуйте, я олдскульный ассемблерщик, и у меня всегда была мечта декомпилировать игру F-19 и что-то там поменять, доделать, прикрутить OpenGL, портировать на Linux.
    [​IMG]
    http://www.old-games.ru/game/screenshots/972.html
    http://www.old-games.ru/game/972.html
    Подскажите, пожалуйста, как проще это сделать.
    DOS 16-bit, сегменты, прерывания...

    1) У меня есть IDA.
    2) Главный файл я нашел, распаковал VGAME.exe
    3) Допустим я получил нормальный asm исходник в IDA.
    Как мне его теперь скомпилировать? синтаксис у выхода IDA TASM и не могу подобрать ассемблер с таким синтаксисом
    TASM и TASMX 4.0 пишет "недостаточно памяти", т.к. файл большой. (Может TASM пропатчить надо?)
    Нашел траслятор TASM -> NASM, но там руками много надо доправлять.


    4) Будет перекомпилированный файл уже половина дела :)

    Вижу еще один способ:
    нужно взять DOSBOX и модифицировать, чтобы он каждую исполненную инструкцию записывал в БД

    Также пробовал доводить до ума вот этот декомпилятор http://itee.uq.edu.au/~cristina/dcc.html
    (какая-то неподъемная задача)

    Как потом сделать исходник на asm портабельным? Написать макрос языка С эмулирующий каждую инструкцию?

    Да кстати нашел в сети C++ исходники Battle Of Britain 1 (Down Patrol, Air Power)




    Новый план:

    1) Декомпиляция в IDA
    приведение в нормальный вид
    2) Компиляция используя родной TASM возможно с разбиением исходника на части.
    Отладка, доведение до рабочего состояния DOS exe файла.
    3) Портирование используя tasmrecover
    и SDL
     
  2. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Попробуй через BORG дизасмить...Он вроде тож не плох(правда на любителя)
     
  3. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    А оно может DOS 16-bit?

    Borg 2.27: 148Kb, The latest version of my interactive disassembler, Borg. It is a disassembler for Win32 PE files, although other files will load up the support for other file types is not complete yet (most notably NE/LE/LX files are not properly supported). Suggestions and requests and ideas are welcome for future Borg development.

    IDA насколько я знаю лучший для этого дела. Ну есть еще Sourcer.

    Основной вопрос: чем скомпилировать вывод IDA или как его настроить?
     
  4. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    А вот ИДА у меня не было поэтому не знаю, т.к досовские проги я не декомпилил, а виндовозные через онлидбг он меня устраивает и мне больше не надо...
    Ну если игра не очень большая то вручную...(по крайней мере я так и делаю. хоть и дольше но зато надёжно)
     
  5. disasm

    disasm New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2011
    Сообщения:
    35
    xor2003, а не пробовал воспользоваться тулзой Hex-Rays после иды которая из её листинга генерит рабочий С код? Его потом можно вылизать, скомпилировать и будет тебе щассье
     
  6. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    disasm
    HexRays не декомпилирует 16битный код.
     
  7. Tronix

    Tronix Member

    Публикаций:
    0
    Регистрация:
    10 сен 2010
    Сообщения:
    122
    Sourcer. Может синтаксис и TASM и MASM, причем разных версий.
     
  8. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    А выложи саму игру поколдую на досуге...) Может что и получится
     
  9. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    В 90-х годах делал нечто подобное для Prince of Persia. Использовал SOURCER и MASM/LINK. Исходник компилировал по частям, причем сначала очень сурово чистил - вплоть до того, что писал на Yacc перекодировщик исходника.
     
  10. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    точно.
     
  11. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    И как оно в итоге? Заработало? Что-нибудь осталось?

    Мои результаты
    TASMX v4.1 компилирует успешно исходники только меньше 70КБ
    MASM v6.0 тоже большие не может
     
  12. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    http://www.old-games.ru/game/download/972.html
     
  13. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Оно даже запустилось и выдало заставку. :) Потом подвисло.

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

    А по частям? Разбить на блоки, содержащие законченные процедуры и не зыбыть вписать для линковки директивы extrn/public и всякие прочие group. У меня была хорошая книжка про MASM, в зеленой обложке, кажется вот эта: http://biblus.ru/Default.aspx?book=79p07b4e6.

    З.Ы. Мелкие утилтки от Димы Гуртяка, а еще Волков Командир, а еще всякие эмуляторы саундбластера и пр. декомпилились и повторно компилились на ура.
     
  14. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    Да - точно, горы удовольствия. Оно всегда уползает - это надо лечить отладкой и исправить все "волшебные числа" на смещения/метки, и вообще разобраться в смысле цифр.

    На части разбирать что-то не охота ))) но возможно придется

    Точно, у меня был набор декомпилированных и переделанных программ, кусков кода (проигрыватель MOD файлов), классные шрифты, парковщик...) и я потом сделал из всего этого игру питон )))
     
  15. SilentSnowfall

    SilentSnowfall New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2011
    Сообщения:
    27
    Принципиально невозможно. Игра же все-таки под DOS со всеми вытекающими последствиями: 16-битный код, обращение к железу напрямую и т.д. Этот код не заработает под современными ОС.

    Собственно, остается следующий вариант. Игра - это что? Данные + игровой движок (логика работы с этими данными). Путь такой:
    1. Reverse engineering формата данных. Вполне возможно, что это уже проделано кем-то до тебя и можно использовать существующие наработки.
    2. Написание движка с нуля. Игра у тебя есть, в общих чертах логика тебе известна, а какие-то специфичные вещи вроде мат. формул и сложных алгоритмов получаешь из анализа дизассемблированного игрового кода.
     
  16. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Конвертер из асма в С: https://github.com/scummvm/scummvm/tree/master/devtools/tasmrecover
    Результат: https://github.com/scummvm/scummvm/blob/master/engines/dreamweb/dreamgen.cpp
     
  17. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    Да это все понятно. Видео, ввод, звук заменить, а логику оставить и как-то сделать портабельной
     
  18. xor2003

    xor2003 New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2011
    Сообщения:
    8
    похоже - то что нужно ))

    Т.е. план теперь такой:
    1) Декомпиляция в IDA
    приведение в нормальный вид
    2) Компиляция используя родной TASM возможно с разбиением исходника на части.
    Отладка, доведение до рабочего состояния DOS exe файла.
    3) Портирование используя tasmrecover
    и SDL
     
  19. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    121
    Реализация:
    https://github.com/xor2003/masm2c
    https://github.com/xor2003/libdosbox

    https://www.linux.org.ru/news/development/16888444

    P.S. Интересно, а чего нибудь более автоматизированного с меньшим числом телодвижений нет?
     
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    После этого можно дальше не читать.
    Есть. Поскольку вся эта порнография - написанный на цэ интерпретатор х86 инструкций, прямой его конкурент dosbox, который сам не делает ненужных телодвижений и от пользователя этого не требует.