1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Soft Дизассемблирование и декомпиляция программ(игр)

Тема в разделе "Hard & Soft", создана пользователем Mysyk, 30 ноя 2012.

  1. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    Mysyk,

    Чтобы прикинуть трудоемкость Вашей идеи, попробуйте, для начала, дизассемблировать, скажем, Диггер 83-го, сделать количество вытсрелов два, вместо одного, и скомпилировать обратно под тот же DOS :).
     
    Mysyk и Dimouse нравится это.
  2. daemolisher

    daemolisher

    Регистрация:
    2 дек 2009
    Сообщения:
    1.704
    переписать с нуля будет проще
    и главное будет похоже на оригинал (в отличие от того способа, где берется другой движок - если взять кваковский движок - это менять шило на мыло)

    к тому же, если взять другой двиг - это значит переделывать под него весь контент - лишняя работа

    а в случае написания движка с нуля - можно написать загрузчик для оригинальных файлов.

    тем у кого уже есть установленная игра придётся всего лишь скачать переделанный .exe, от силы несколько мегабайт

    имхо, неплохой вариант

    Mysyk, займет это дело примерно неск. месяцев, может полгода.

    если же рассматривать вариант с осовремениванием игры, то как-то оно мне не нравится - повышенные системные требования только ограничат совместимость игры.

    да и работы с контентом ещё больше прибавится

    P.S.
    Mysyk, все что-то прицепились к ассемблеру - не слушай их
    просто задача дизассемблирования сбила всех с толку

    P.P.S.
    вообще не играл в эти игры
    вторая игра, так понимаю, стратегия?
    думаю с ней отчасти проще
    посмотрел ролики гемплэя - вполне можно и на Delphi сделать (хотя у такого варианта есть недостатки)
     
    Mysyk нравится это.
  3. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Ясновидение рулит ? По паре прохождений берёшься с нуля восстановить все формулы ИИ и прочего ? Без дизасама ? Или кто то где то инфу подбросит на блюдечке ? Нет ? Ну, тогда остаётся только обернуть в DosBox, сделав оригинал его частью и обозвать портом - тоже можно один файлик распространять под все системы.
     
  4. daemolisher

    daemolisher

    Регистрация:
    2 дек 2009
    Сообщения:
    1.704
    делаем на глазок

    потом выкладываем бета-версию

    преданные фанаты игры играют в неё, находят отличия и сообщают, что не так мол играется, как в оригинале

    а если никто ничего не скажет - то значит оно никому и не надо
     
  5. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    daemolisher, А сразу нормально сделать - религия не позволяет ? Здесь речь идёт не о поделках, а о получении полноценной копии, отличающейся от оригинала лишь поддержкой нового оборудования и ОС !

    А поделки в стиле ремейков Dangerous Dave на движке Doom2D и иже с ними - наглядно показывают результаты "наглазочного" метода. Получается нечто совсем другое, малосимпатичное и неиграбельное.

    Я не спорю, что комбинирование методов с выкусыванием из кода только нужных частей - наиболее перспективно ! Но зачем из одной крайности в другую то кидаться ?
     
    Mysyk нравится это.
  6. daemolisher

    daemolisher

    Регистрация:
    2 дек 2009
    Сообщения:
    1.704
    Разве?

    как иначе понять вот это:
    Bato-San, речь в этой теме идёт скорее том, какой метод выбрать

    такое ощущение что-то похожее и я упоминал в какой-то теме:
    http://www.old-games.ru/forum/showpost.php?p=913577&postcount=15

    не считаю, что клонирование игры это хорошо

    деятельность должна быть созидательной

    ничего плохого не вижу в том, что бы сделать лучше, чем оригинал

    тем более, если это упростит задачу
     
    Mysyk нравится это.
  7. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Главная проблема состоит в другом. Как только ты стал таким крутым, что можешь расковырять какую-то игру (и даже немного раньше), ты понимаешь, что надо делать нечто совершенно другое.
     
    daemolisher, Bato-San и Mysyk нравится это.
  8. Mysyk Sonic Boom

    Mysyk

    Регистрация:
    31 янв 2008
    Сообщения:
    2.652
    Grue13, насколько я знаю, Open TTD является примером RI. Вот только я не знаю, были ли доступны создателям исходники или они просто с нуля программировали.

    ---------- Сообщение добавлено 05.12.2012 в 00:03 ---------- Предыдущее сообщение размещено 04.12.2012 в 23:53 ----------

    daemolisher, да. Я разные методы предлагаю. Тут еще зависит от самой игры. Насколько я знаю, необязательно дизассемблировать весь код. Но и откушенные части все также потребуют значительных сил.
    Как я понял, вся сложность(соль) в дизассемблировании в том, что полученный код не будет иметь осмысленных названий переменных, процедур и функций и тут надо выяснять что к чему. Также не факт, что полученный код будет достаточно рабочим и можно будет скомпилировать и играть. Появятся новые баги и тому подобное и там и сям надо будет перекраивать его, перепрограммировать. Плюс еще то, о чем было сказано выше. И конечная сложность, сроки выполнения равны всему этому, умноженному на объем этого кода.
     
  9. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Соль в том, что одна строка кода на Си может развернуться в кучу неочевидных ассемблерных команд (и не забываем про оптимизирующий компилятор). Пример:
    Код:
    .text:00402943 loc_402943:                             ; CODE XREF: sub_4026C0+157j
    .text:00402943                 movzx   eax, word ptr [ebx+0Ch]
    .text:00402947                 cmp     ax, 2Eh
    .text:0040294B                 jz      short loc_40299D
    .text:0040294D
    .text:0040294D loc_40294D:                             ; CODE XREF: sub_4026C0+30Aj
    .text:0040294D                 cmp     ax, 45h
    .text:00402951                 jnz     loc_4026D8      ; jumptable 00402837 default case
    .text:00402957                 mov     dword ptr [esp], 11h ; nVirtKey
    .text:0040295E                 call    GetKeyState
    .text:00402963                 sub     esp, 4
    .text:00402966                 test    ax, ax
    .text:00402969                 jns     loc_4026D8      ; jumptable 00402837 default case
    .text:0040296F
    .text:0040296F loc_40296F:                             ; CODE XREF: sub_4026C0+39j
    .text:0040296F                 mov     ebx, ds:dword_4391B0
    .text:00402975                 xor     edx, edx
    .text:00402977                 mov     ecx, 5E0h
    .text:0040297C                 mov     [esp+0Ch], edx  ; lParam
    .text:00402980                 mov     esi, 111h
    .text:00402985                 mov     [esp+8], ecx    ; wParam
    .text:00402989                 mov     [esp+4], esi    ; Msg
    .text:0040298D                 mov     [esp], ebx      ; hWnd
    .text:00402990                 call    PostMessageA
    .text:00402995                 sub     esp, 10h
    .text:00402998                 jmp     loc_4026D8      ; jumptable 00402837 default case
    .text:0040299D ; ---------------------------------------------------------------------------
    .text:0040299D
    .text:0040299D loc_40299D:                             ; CODE XREF: sub_4026C0+28Bj
    .text:0040299D                 mov     esi, ds:dword_4391B0
    .text:004029A3                 xor     eax, eax
    .text:004029A5                 mov     edx, 5DFh
    .text:004029AA                 mov     [esp+0Ch], eax  ; lParam
    .text:004029AE                 mov     ecx, 111h
    .text:004029B3                 mov     [esp+8], edx    ; wParam
    .text:004029B7                 mov     [esp+4], ecx    ; Msg
    .text:004029BB                 mov     [esp], esi      ; hWnd
    .text:004029BE                 call    PostMessageA
    .text:004029C3                 movzx   eax, word ptr [ebx+0Ch]
    .text:004029C7                 sub     esp, 10h
    .text:004029CA                 jmp     short loc_40294D
    Есть желающие восстановить оригинал?
     
  10. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    MisterGrim, при чем тут C и компилятор? Вызовы Win-API выглядят одинаково на всех языках. Другое дело, что большая их часть (как и в ООП, например, QT) - пустые фантики.
     
  11. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    gudleifr, а при чём тут WinAPI? Я предлагаю логику кода восстановить, а что там из WinAPI вызывается — дело десятое.
     
    Bato-San нравится это.
  12. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Вы научитесь вырезать куски? Какая, на фиг, логика? Тупой перебор таблицы сообщений. Это даже IDA заметила.
     
  13. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Да нет. Это не перебор таблицы сообщений.
    Код:
    case LVN_KEYDOWN:   // этого в ассемблерном листинге нет, осталось на пару страниц выше...
    	if(pnkd->wVKey == VK_DELETE)                                
    		PostMessage(hMainDlg, WM_COMMAND, IDM_DELETE, 0);   
    	if(pnkd->wVKey == 'E' && (GetKeyState(VK_CONTROL) & 0x8000))
    		PostMessage(hMainDlg, WM_COMMAND, IDM_MODIFY, 0);   
    	break;
    Правда ведь, всё очевидно? А это всего лишь пара строк одной из функций маленькой программки.

    ---------- Сообщение добавлено в 02:29 ---------- Предыдущее сообщение размещено в 02:27 ----------

    Пример с WinAPI-функциями я привёл специально, так как его разобрать куда проще. А если бы там был исключительно свой код?
     
  14. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    MisterGrim, блин, нафига ты исходник выложил. Я только хотел написать, что это switch/case. =) Выпендриться не дал. =(
     
  15. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Он родимый.
    И, кончайте, наконец, передергивать!
    Это лажа. Язык C программисты любят исключительно за перевод в asm один в один. Исторически сложилось так, что каждый C-программист с детства дизассемблер. Когда ему становится скучно, он запускает компилятор с ключом s (получение asm-файла) и правит свою программу там (затем компилятор дособерет).
    Так и приводите "однострочный" пример. В Вашем на asm-е все проще, чем в C.
    В данном примере, как видим, имена сохранились. IDA знает парадигмы работы с Win-API.
    Да, в примере мы видим простенькую оптимизацию, но никаких сложностей она не вызывает, скорее упрощает разбор.

    ---------- Сообщение добавлено в 10:59 ---------- Предыдущее сообщение размещено в 10:38 ----------

    Разбор Win-программ - вещь, вообще, очень специфичная.

    Частный взлом обычно очень прост (если нет слишком запутанной цепочки виртуальных драйверов) - как видим на примере, asm-текст вполне читабелен: номера контролов и сообщений, даже, имена функций... Все на виду.

    А, вот, с полным разбором - беда. Дело в том, что 90% контролов для функционала и логики программы не важны. Однако их обмен сообщениями в программе присутствует. Понятно, в количестве факториала от числа контролов. Разбирать все это очень муторно.

    ---------- Сообщение добавлено в 11:08 ---------- Предыдущее сообщение размещено в 10:59 ----------

    P.S. Достала меня эта пенисометрия. Конечно, забавно наблюдать за программистами "новой формации", для которых структура оконной функции - откровение, но какое это все имеет отношение к теме?
     
    Последнее редактирование: 5 дек 2012
    daemolisher нравится это.
  16. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Забавно наблюдать за программистом "старой формации", который вместо помощи уже две страницы увлечённо рассказывает, какой он весь из себя классный.
     
    Steel Rat, Bato-San и AxXxB нравится это.
  17. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    A.P.$lasH, каюсь, с первого поста неправильный тон взял. Но любая моя попытка объяснить теперь будет выглядеть как очередная похвальба. Поэтому и предлагаю замять.
    С другой стороны, помощь предложил еще на одной из первых страниц.
    С третьей - помощь как-то никому особенно здесь и не требуется.
     
    Bato-San, AxXxB и A.P.$lasH нравится это.
  18. R4kk00n Benched arcade playa

    R4kk00n

    Модератор

    Регистрация:
    28 мар 2005
    Сообщения:
    9.260
    A.P.$lasH, здесь, всё-таки, наблюдается огромной ширины пропасть между тем, где сейчас находится автор темы, и тем, где уже можно помогать с дизассемблером. Я, в этом смысле, понимаю gudleifr
     
    A.P.$lasH нравится это.
  19. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    И я понимаю. Так давайте поможем. Я вообще мимо проходил, на мудреца не претендую, но могу для начала посоветовать то, что мне пригодилось. Кто-нибудь поправит, покритикует, я и сам с удовольствием почитаю :)

    [​IMG]

    1. Освоить программирование

    Разобраться с языком С:
    Брайан Керниган, Деннис Ритчи - Язык программирования С
    http://rutracker.org/forum/viewtopic.php?t=686909

    Освоить объекты:
    Бьёрн Страуструп - Язык программирования С++
    http://rutracker.org/forum/viewtopic.php?t=307148

    Понять ассемблер:
    Тим Сван - Освоение Turbo Assembler
    (возможны варианты, мне просто нравится, как он пишет)


    2. Разобраться в том, как устроена операционная система

    Руководство:
    Марк Руссинович, Давид Соломон - Внутреннее устройство Microsoft Windows
    http://rutracker.org/forum/viewtopic.php?t=13923

    Справочник:
    Р.Саймон - Microsoft Windows API
    http://rutracker.org/forum/viewtopic.php?t=2939462


    3. Освоить работу с мультимедия

    Звук:
    Тим Кинтцель - Руководство программиста по работе со звуком
    http://rutracker.org/forum/viewtopic.php?t=1079055

    О. Гордеев - Программирование звука в Windows
    (возможны варианты, мне этой книги на первых порах было достаточно)

    Графика:
    Джеймс Д. Мюррей и Уильям ван Райпер - Энциклопедия форматов графических файлов

    К сожалению, в издательстве мне сказали, что переиздавать не будут, а в сети есть лишь неполная копия, но тут, опять же, возможны вариант, поскольку в книге большое внимание уделяется совсем уж древним форматам. Так уж получилось, что мне это как раз на руку :)


    4. Подружиться с отладчиком, дизассемблером и хекс-редактором:

    Ваши основные инструменты:

    OllyDbg
    http://ru.wikipedia.org/wiki/OllyDbg

    Hiew
    http://ru.wikipedia.org/wiki/Hiew

    IDA
    http://ru.wikipedia.org/wiki/IDA

    Книжки:

    Chris Eagle - The IDA Pro Book
    http://rutracker.org/forum/viewtopic.php?t=3958307

    Крис Касперски
    Образ мышления - дизассемблер IDA
    http://rutracker.org/forum/viewtopic.php?t=730889

    (читать Касперски перед английским изданием не рекомендую - очень сумбурно пишет, да и не знакомство это, а разбор полётов для уже знакомых с предметом обсуждения)

    Керниган / Ритчи, Страуструп и Руссинович / Соломон обязательны к прочтению в первую очередь. Остальное - по желанию.

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

    Я до 17 лет был уверен, что стану музыкантом. К компу и близко не подходил. На первом курсе во время информатики сплавлялся на Крещатик в нотный магазин. А потом мне не разрешили "помочь кафедре" и заставили сдавать лабу о командных файлах :) Через несколько дней один хороший человек принёс мне прямо домой тройку с VGA-монитором (Юра, спасибища! :), объяснил командники на примере "echo Olia dura" с циклом по метке и я кое-как сдал. Через пару недель у меня заговорил отборным матом Якубович из Поля чудес от Димы Башурова, а ещё через два месяца была полностью разобрана одна очень хорошая игра, написан редактор карт и шрифтов. Последние восемь лет весь этот набор спокойно позволяет кормить жену и двоих детей (я, разумеется, не про Якубовича).

    Попробуйте.
     
    Последнее редактирование: 5 дек 2012
    Butz, Mysyk, Bato-San и 2 другим нравится это.
  20. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    A.P.$lasH, так Вы еще более усугубите проблему. Тут речь не о "самом правильном пособии", а о "не разрешили "помочь кафедре" и заставили сдавать лабу о командных файлах". Т.е. сначала человек должен выяснить, зачем и что ему надо, и только потом начать думать о том, как этого достичь.
    Классики и мурзилки здесь не помогут.
    Здесь нужно что-то более философское, например http://mirknig.com/knigi/programming/1471-kompjuternye_igry_kak_jeto_delaetsja.html.
     
    Mysyk нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление