Bench!T
https://www.benchit.kz/forum/

Дизассемблирование и декомпиляция программ(игр)
https://www.benchit.kz/forum/viewtopic.php?f=66&t=2488
Страница 1 из 1

Автор:  Mysyk [ 27 мар 2013, 22:07 ]
Заголовок сообщения:  Дизассемблирование и декомпиляция программ(игр)

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

Автор:  admin [ 27 мар 2013, 22:21 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Без знаний ассемблера как такового этот процесс является невозможным. :-)

Автор:  Ubi [ 27 мар 2013, 22:24 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Да и со знанием думаю желания возиться с этим быстро отпадёт. Потратишь уйму времени не понятно на что.

Автор:  nornad [ 27 мар 2013, 22:47 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Собственно, в теории все просто:
а) взял интересную старую игру
б) взял дизассемблер (в редких случаях, наверное, получится использовать декомпилятор)
в) получил код на ассемблере (или на С, паскале и т.п.)
г) просмотрел код, где надо поправил под новую винду
д) добавил новые тестуры и прочие объекты вместо старых, где нужно
е) скомпилировал

На практике же:
*в) получил код на типа-ассемблере (или на типа-С, типа-паскале и т.п.). Дело в том, что читабельность такого кода очень низкая. Немалую часть читабельности предоставляют коду правильно названные переменные и комментарии. Вы этого будете лишены напрочь. Плюс будет много левого кода, который прилепил компилятор в процессе оптимизации.
*г) дело это долгое и непростое. Программа всего лишь в 10кб экзешника в исходном коде будет занимать сотни/тысячи строк кода. что уж говорить о паре сотен килобайт? Добавим сюда нетривиальные решения, которые нередко встречались в старом коде. Добавим загрязненность кода из-за компилятора и декомпилятора.
*д) а вот фиг. Многие игры делаются на основе движков. Пусть не общедоступных, а самопальных, но все же. Да, это позволяет повысить читабельность кода. Только вот изменить движок, у которого в конструкции даже и близко не предполагается работа с определенными типа, зато есть хитрые оптимизации для работы с имевшимися - задача не тривиальная. С играми, где движков вовсе не было, дело еще хуже - там извращения на каждом шагу.

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

Автор:  Mysyk [ 27 мар 2013, 22:48 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

admin писал(а):
Без знаний ассемблера как такового этот процесс является невозможным. :-)

Это знание можно приобрести :)

Автор:  Mysyk [ 27 мар 2013, 22:49 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Уби писал(а):
Да и со знанием думаю желания возиться с этим быстро отпадёт. Потратишь уйму времени не понятно на что.

Тут зависит от того, как делать. Можно начать с простых игр такие как Диггер, Пакмэн и змейка. Понятное дело что дело в объеме кода.

Автор:  Mysyk [ 27 мар 2013, 23:01 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Однако игру Open TTD сделали на C++ и при помощи Reverse Engineering. Тоже самое и с Gobliiins 1. Для обратной инженерии нужно знать архитектуру старого и нового железа, а также особенности ОС. Я то не просто на Windows и новое железо собрался переделывать игру, но и на Unix.
Да. Код будет в непонятном виде(для человека, но не машины) без комментариев и неосмысленных переменных.
Объем будет велик. Понятное дело, что может дажет человеческой жизни не хватить. :)
Для упрощения задачи можно из старой игры взять только часть кода. ИИ, скрипты, особенности геймплея и некоторые ресурсы. Все остальное можно программировать на C или Delphi 7 + некоторые вставки для ассемблера там, где требуется критическая производительность. По такому принципу выходят патчи для игр.
Текстуры, музыка и видео это уже дело дизайнеров, музыкантов и художников. :) Программист лишь все это привязывает к железу.
PS. На самом деле я все это знаю, просто тему подал в другом виде. Я не предлагаю конечный проект. Когда начну этим заниматься, я всех уведомлю. Но мне надо знать весь инструментарий, который потребуется и книжки, которые надо будет прочитать.

Автор:  nornad [ 28 мар 2013, 02:01 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

Mysyk писал(а):
Однако игру Open TTD сделали на C++ и при помощи Reverse Engineering. Тоже самое и с Gobliiins 1.

Я и не говорил, что это сделать нельзя. Вопрос в том, насколько это имеет смысл. Если нескольким умным людям больше заняться нечем - почему бы и нет? ;)

Mysyk писал(а):
Я то не просто на Windows и новое железо собрался переделывать игру, но и на Unix.

На Unix вряд ли имеет смысл. На Linux лучше обратите внимание. :trollface:
На всякий случай, если вы не в курсе, Linux - не Unix. Юникс можно считать эдаким двоюродным дядей линукса, но отличий тоже немало, да и среди линуксов дистрибутивов разных полно. Которые нередко не дружат с софтом для другого дистрибутива. Можно писать под ядро и использовать только абсолютно стандартные вещи, но я сразу говорю - муторное это дело. Зато хорошо с кишками линукса разберетесь, так что польза будет.

Mysyk писал(а):
Для упрощения задачи можно из старой игры взять только часть кода. ИИ, скрипты, особенности геймплея и некоторые ресурсы.

Угу, только сначала надо весь этот код выделить в той куче, что вы получите от дизассемблера, да еще и на ассемблере. Кстати, вы в курсе, что нередко дизассемблер/декомпилятор дают код, которые не компилируется? Да-да. Приходится реально копать код и разбираться, что, где и как, чтобы понять, почему же оно не компилится и как это исправить. :)

Mysyk писал(а):
PS. На самом деле я все это знаю, просто тему подал в другом виде. Я не предлагаю конечный проект. Когда начну этим заниматься, я всех уведомлю. Но мне надо знать весь инструментарий, который потребуется и книжки, которые надо будет прочитать.

С инструментарием все просто. Спрашиваем гугл "декомпилятор delphi" (это если вы знаете, что программа на дельфи написана; можно, конечно, попробовать скормить экзешник всем декомпиляторам и понадеяться, что какой-то выдаст код). Но чаще декомпилятор не будет помогать и надо будет дизассемблер. Также у гугла спрашиваем про него и качаем.
Ну а книжки читайте по архитектуре и ассемблеру i286, i386, i486 и остальных процессоров. Это чтобы можно было понимать код. Чтобы написать новый надо будет искать отдельные статьи в инете про те моменты, которые вы в данный момент не знаете как реализовать. Книги тут не лучший выбор, т.к. часто в них слишком общая информация или вообще никак не затрагиваются нужные темы. Мне понравился сайт stackoverflow. Даже с моим никаким знанием инглиша там находятся ответы на 90% вопросов, особенно по работе с макосью и айосью.

Автор:  Mysyk [ 28 мар 2013, 03:08 ]
Заголовок сообщения:  Re: Дизассемблирование и декомпиляция программ(игр)

В любом случае надо будет начать с простеньких игр. :) Чтобы понять как это делается.

Страница 1 из 1 Часовой пояс: UTC + 6 часов
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/