StarCraft дизассемблировали и запустили на ARM



    Один из участников проекта OpenPandora провёл реверс-инжиниринг игры StarCraft и портировал её на ARM-платформу. Ему удалось сделать это, несмотря на отсутствие исходного кода в открытом доступе.

    В репозитории выложен перекомпилированный бинарник, для установки которого на игровую приставку «Пандора» нужно еще скопировать несколько файлов с ПК-версии игры.

    Автор порта говорит, что он дизассемблировал игру в IDA, затем конвертировал код на C с помощью инструментов собственной разработки (их пришлось написать в процессе работы специально для этой задачи), потом скомпилировал в нормальную программу и связал с библиотекой winelib, которая работает с Win32 API из-под ARM-версии wine. Задача поначалу казалась простой, но в реальности проект занял почти полгода: вылезло очень много неожиданных проблем. Так или иначе, но автор довёл дело до конца.

    Теоретически, он мог бы выложить код C в открытый доступ, чтобы кто-нибудь скомпилировал версию под Android. Сейчас StarCraft запускается на Android-планшетах и смартфонах с помощью Winulator.

    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 63
    • +4
      Без мышки, наверно, не очень удобно будет
      • –6
        Наоборот, вся игра на кликах, что делать пальцами будет очень комфортно. Понятно что вариант не для чемпионатов, а вот поиграть в поездке будет прекрасно.
        Я тут Дюна2 под андроидом поиграл, гораздо удобнее управление чем на ПК была.
        • 0
          www.youtube.com/watch?v=aoNMWORzPys
          Прогеймер играет на тачскрин-тв… иногда матерится.
          • +8
            Там половина секрета успеха в использовании горячих клавиш на клавиатуре :)
            • +4
              Там половина кликов правой кнопкой мышью, кайтить вообще будет адово.
              • +3
                Правого клика не будет, шоткатов не будет. Т.е сдвинуть юнитов — только через кнопки вправо внизу. Впрочем, если ее адаптировать к жестам — может получиться вполне ничего.
                • 0
                  Никакого микро же. Если только побаловаться…
              • +30
                Это мегакруто. А вот эти слова просто убили:
                дизассемблировал игру в IDA, затем конвертировал код на C с помощью инструментов собственной разработки (их пришлось написать в процессе работы специально для этой задачи), потом скомпилировал в нормальную программу и связал с библиотекой winelib, которая работает с Win32 API из-под ARM-версии wine. Задача поначалу казалась простой

                Задача поначалу казалась простой

                Нифигасебе простая задача! А что тогда сложная?

                • 0
                  чёкнуться.
                  потрясающе
                  • +7
                    На самом деле, современные версии HexRays (плагин для превращения кода в C-код для IDA Pro) восстанавливают код достаточно точно. Достаточно для того, чтобы какую-нибудь функцию скопировать и скомпилировать.
                    • 0
                      ага, спасибо.
                      не знал.
                      • +2
                        > восстанавливают код достаточно точно
                        К сожалению, это неправда. Во-первых, есть довольно много случаев где декомпиляция в статике by design не сработает (речь про нормальный не обфусцированный код). Во-вторых, лучи генерят на выходе черт знает что так же весьма часто, а отлавливать баги в декомпилированном коде — то еще удовольствие.
                  • +2
                    спасибо за Winulator. :)
                    • –6
                      А в чем профит от дизассемблирования и последующей компиляцией/линковкой с winelib и «просто взять запустить под wine»?
                      • +23
                        Подозреваю нельзя «просто взять запустить под wine» из за разницы в системе команд x86 и ARM
                        • 0
                          Виртуально эмулировать нужные команды никак? Игры Плейстейшен2 сейчас на х86 запускают (хоть и работает на костылях), неужели старика 386-нельзя заэмулировать (темболее что старкпафт старый и никаких расширений типа 3DNow не использует)
                          • +1
                            Ну это по сути и есть эмуляция. Разве что не в реальном времени.
                            • 0
                              Можно, только тормозить будет… Старик-386 — чрезвычайно паршивая с точки зрения эмуляции платформа, особенно если архитектура хоста — RISC.
                              • +1
                                И посмотрите, какая нужна машина, что бы сэмулировать PS2? Какие накладные расходы на эмуляцию? Там соотношение даже не 1 к 10.

                                Ну и условно говоря, DosBox например, существует и эмулирует, но на одноядерном ARM7 на 1 ГГц он эмулирует (в плане скорости) где-то 486й на 66/100 Мгц. Причем эмулирует он не всю обвязку, а только ту, что критично нужна. Здесь же придётся эмулировать всё, что необходимо для запуска Windows.
                                • –1
                                  >>>Какие накладные расходы на эмуляцию?
                                  Современные компы тоже не пальцем деланные — у меня бюджетный 4-ядерник за 150$ и парой 2 Гб оперативки достойно осилил GTA: VCS — правда звук паршивый, проблемы с разрешением (изменить нельзя), но то такое — жить можно.
                                  • +1
                                    Бюджетный 4-ядерник — это телефон?
                                    • –1
                                      Нет, я про эмуляцию PS2 на ПК.
                                      • +1
                                        А. А то тут народ собрался и обсуждает ARM'ы.
                          • –11
                            Лучше бы на Андроиде запустил.
                            • +15
                              Лучше бы ты молча взял на себя эту задачу и помог бы ему.
                              • –25
                                Лучше бы вы оба заткнулись и восхищались…
                                • +1
                                  Лучше бы для этого автор сначала исходники выложил. Или предлагает последовать его стопам и сконвертить бинарник с той приставки на Андроид?)
                                  • 0
                                    Подозреваю, что у автора нет прав выкладывать исходники.
                                    • 0
                                      Тоже верно. Но хотя бы инструкция по сборке была бы явно не лишней.
                                      • 0
                                        Обычно лицензия запрещает любые изменения в коде программы, не говоря уже о выкладывании исходников.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                          • 0
                                            Только для собственного использования и при наличии оригинальной лицензии.
                                • +2
                                  Еще бы под макось собрал бы кто, с 10.6 не играл в starcraft :(
                                  • 0
                                    Кстати, а ведь на коробочке с диском написано PC/Mac CD-ROM. По гуглю видно, что совместимость распростраяется на Mac OS X включительно. А дальше всё, обратной совместимости между ОС нет?
                                    • +3
                                      Он скомпилен под PowerPC, а Rosetta (бинарный транслятор на Intel) перестали включать начиная с 10.7.
                                  • 0
                                    Вообще говоря, странно, что по прошествию стольких лет Blizzard так и не открыли исходники (хотя желающих их скачать, уверен, много).
                                    • +5
                                      Думаю, что не сделали этого, т.к. считают, что им это не выгодно.
                                      • –3
                                        А может, им просто стыдно.
                                      • +1
                                        Они до сих пор её продают, и, более того, до сих пор находятся люди, которые её покупают (например, я). Поэтому не думаю, что в ближайшее время исходники появятся в открытом доступе.
                                        P.S. Они даже Warcraft II до сих пор продают, что уж там говорить.
                                        • 0
                                          А подскажите где WCII купить? На батлнете только третий есть.
                                          • 0
                                            Ох-ох, видимо, я дезинформировал вас. Последний раз заходил на сайт в 2013 году, вот тут был и WCII Battle:Net Edition. Сейчас нету.
                                            • 0
                                              Не видел ее там в прошлом году. По крайней мере варианта купить, даже на диске в их магазине нету.
                                              • 0
                                                Нашёл!
                                                Вот тут можно купить и даже скачать.
                                          • +1
                                            И что, открытие исходников помешает его продавать?
                                            • 0
                                              Конечно нет, однако открытие исходников чаще всего связано с одновременным релизом бесплатной версии, поэтому я так и считаю.
                                            • 0
                                              Игра состоит не только из программы, и открытие исходников не делает её бесплатной. Аналогично, например, с Doom — исходники открыты, существует множество портов на разные платформы, но для того, чтобы поиграть, всё равно нужны файлы купленной игры, в которых содержатся, графика, карты, музыка, звуки и прочее.
                                          • +2
                                            Хм… В StarCraft уже давным-давно можно было поиграть на ARM-девайсах, причем без монструозной зависимости от winelib/Winulator. Неужели автор порта не слышал о таком проекте, как Stargus?

                                            Я это к тому, что вместо полугодового ада дизассемблирования, можно было внести лепту в открытый проект, допилить его до ума. Хотя, надеюсь, что дизассемблированный код, в частности, логика, войдет и в проект Stargus.
                                            • +2
                                              Upd: Оказывается, автор порта — Notaz, человек весьма известный и уважаемый в узких кругах владельцев портативных консолей от GamePark (Caanoo, WIZ) и OpenPandora. Ему не привыкать тянуть на себе очень сложные проекты, например, эмулятор PS One с динамическим MIPS->ARM recompiler; или известный многим эмулятор Sega — PicoDrive, который был портирован на все что только можно. Так что дизассемблирование такой игры не представляет особой сложности для него.
                                              • +7
                                                По сути, Stargus (как и Wargus) — это не портирование, а создание игры с нуля с использованием оригинальных ресурсов. Т.е., механика делается частично по тому, что удалось раскопать в ресурсах, частично «на глазок». Если же портировать именно код — получаешь всю «логику» из коробки. Что проще — тот ещё вопрос…
                                              • +2
                                                Если это был не риторический вопрос, то автор определенно знаком с Stargus, поскольку его можно видеть в списке игр на первых секундах видео (или же изображение в заголовке этого поста). Так что вполне возможно, как вы и предположили, результат распиливания игры пойдет в код проекта.
                                                • +4
                                                  Stargus нереально допилить до ума как минимум потому, что движок Stratagus не поддерживает и половину нужных фич. Сейчас оно представляет собой очень сырое поделие, в котором не работает почти ничего, а то что работает — работает не так. А переписывать Стратагус… Не, уж проще и быстрее рекомпилировать.
                                                  • +1
                                                    Ну насчет «не работает ничего» вы загнули… В принципе, там достигнут уровень WarCraft 2 (ну может с частью фич из Battle.Net Edition). Но StarCraft использует изометрию (что накладывает специфику на расчет путей и прочего) и множество других фич, которых в движке пока нет.
                                                • +1
                                                  Я считаю, что решить эту задачу можно было бы намного меньшим количеством ресурсов с помощью статической бинарной трансляции. Примерно так: 1) Разбираем структуру исполняемого файла, отделяем код от данных 2) Прогоняем код через кодогенератор QEMU c arm в кач-ве target architecture 3) Линкуем получившийся arm код обратно.
                                                  Вероятно, человек пошел путем хардкорной ручной декомпиляции не столько из-за портирования, сколько для того что бы с внутренностями самой игры разобраться.
                                                  • +1
                                                    Или совсем крутой вариант — транслировать не в arm, а в байткод LLVM, тогда можно будет одним махом портировать код на все архитектуры, для которых есть LLVM backed (а LLVM target для QEMU, который позволяет транслировать машинный код многих архитектур в байт-код и запускать на виртуальной машине LLVM, был реализован в рамках проекта S2E).
                                                  • –3
                                                    Интересно а есть StarCraft под MAC OS?
                                                    • +1
                                                      Выше писали
                                                      Он скомпилен под PowerPC, а Rosetta (бинарный транслятор на Intel) перестали включать начиная с 10.7.

                                                    • +1
                                                      В тред призывается Мамаич.
                                                      Если вдруг кто не знает: гражданин подобным образом портировал Герои 1 и 2 для КПК
                                                      • 0
                                                        Вот бы Героев 3 в полном комплекте, да на АРМ.
                                                        • 0
                                                          Дак вроде ж есть, под WinMobile
                                                          • 0
                                                            Это порт под MIDP2, если я правильно понял.
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                          • 0
                                                            Титаническая работа :) Но скорее всего он кучу законов нарушил и на него еще в суд подадут.

                                                            > вылезло очень много неожиданных проблем
                                                            Вспомнилась эта статья, где рассказывается, что код батонов вывели в отдельную ветку и приходилось все изменения делать отдельно для обычных юнитов и для батонов. Разумеется возникнут проблемы…

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.