Исходный код почему нельзя достать из игры
Перейти к содержимому

Исходный код почему нельзя достать из игры

  • автор:

Как посмотреть исходный код программы?

Я хочу подправить исходный код, ничего серьезного, только вывод нескольких строк. Программа написана скорее всего на С++. Мне использовать отладчик? Или как-то открыть в IDE? Просто я не хочу запускать программу, хочу просто поковыряться в коде. И может посоветуете какой нибудь? P.S. Сам файл — .exe

Отслеживать
Anton Sorokin
задан 5 июл 2017 в 10:40
Anton Sorokin Anton Sorokin
7,008 6 6 золотых знаков 37 37 серебряных знаков 65 65 бронзовых знаков

Если подправить exe 32-битный и знаю ассемблер/ понимаю запись строк и других данных в двоичном коде — скачайте hiew.exe (можно как править надписи, так и код)

5 июл 2017 в 10:46
@nick_n_a А с notepad++ можно exeшники открывать? Или к .exe применять 2 комментарий?
5 июл 2017 в 10:52
А я думал у вас исходный код в наличии.
5 июл 2017 в 10:52
@nick_n_a Нет, есть только .exe файл и все.
5 июл 2017 в 11:10

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Исходный код раскрыть невозможно если для этого постарались обеспечить безопасность (особенно если это фирменная вещь).

Но есть способы полностью или частично раскрыть код.

  • IDA Pro — самый лучший из безплатных взломщиков, некоторые макросы возможно позволяют преобразовать код назад. Но не всегда. Особо хорошо раскрываются borland-продукты.
  • Hiew.Exe бесплатная утилита, очень маленькая, позволяет править код на языке ассемблера. Можно править текстовые и целые константы. Можно ею даже сделать «перевод» программы на другой язык, затереть имя фирмы и т.п.
  • Если есть PDB-файл, или подшита debug-info к файлу то код можно получить в среде разработки (если debug-info полная) редко можно использовать. Исходный код получить нельзя, но можно получить «номера строк и имена исходников», а так же имена/значения всех констант, локальных переменных, избежать «раздроблености функций» а так же получить классы с начинкой класса (почти все структуры кроме текста программы) что значительно упростит понимание работы программы. Для некоторых библиотек (dll) pdb-файлы можно скачать отдельно. Врядли уважающая себя фирма допустит утечку pdb своего стоящего продукта.
  • Debug info, существует DebugInfo-информация встроеная в exe. Если есть такая информация, и соответствующая утилита (Например на Borland Delphi собран, и он есть в наличии), то можно сделать аналогичное предыдущему пункту. Но врядли уважающая себя фирма допустит такую «глупую» ошибку (аналогично pdb).
  • Если файл написан на с# его можно почти полностью просмотреть в кодах с помощью disSharp (такие программы «подключают» в таблице импорта лишь mscorlib и всё). DisSharp плохо дизассемблирует некоторые части программы, но возможно его платная версия или платная версия подобных утилит раскрывает код лучше.
  • Если файл написан на FoхPro, clipper и других подобный байт-кодовых языках — он раскрывается спец-утилитами (Refox например).
  • Утилита exescope.exe ResourceHacker.exe и её-подобные утилиты позволяют смотреть шапку, подключенные библиотеки (по ним можно понять на чём писана программа) и редактировать ресурсы программы (ресурс-формы в.т.ч. delphi, иконки, картинки, таблицы ресурсо-строк).
  • Если извесно чем создан код — думаю есть специальные утилиты способные его раскрыть (они платные и малодоступные).

Опять-же, это при условии что нету паковщика кода (тогда нужно сначала применить депаковщик), шифровальщика/самомодифицирующегося кода. Если не разбит обфускатором так что не распутать. Чем больше код — тем сложнее разобраться.

P.S. Лично моё мнение — раскрывается-взламывается всё, но на это нужно потратить много-много времени. Возможно год и более (зависит от опыта и инструментов, в свободном доступе хороших инструментов нету).

Исходный код игры: что это такое и как можно его заполучить?

Lorem ipsum dolor

Исходный код игры — это тот самый код, который пишет программист, чтобы игра заработала. Он может быть написан на любом удобном программисту языке программирования.

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

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

Исходный код игры

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

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

Но большинство игр распространяются по другому сценарию. Когда программист пишет игру, он закрывает исходный код от посторонних глаз и затем распространяет игру в виде скомпилированного файла. Скомпилированные файлы могут содержать как двоичный машинный код, так и объектный код или код из ассемблерных команд.

Например , вы скачиваете файл игры с «ехе»-расширением, чтобы установить такую игру к себе на компьютер с операционной системой Windows. Если вы попытаетесь открыть такой файл для просмотра его кода, то максимум , что вы там обнаружите , — это объектный код, который состоит из «смеси» цифр и букв в 16-битовой системе исчисления. Полностью восстановить из объектного кода исходный не представляется возможным, только его частичное восстановление, чтобы можно было «уловить» алгоритмы и логику в игре.

В общем, нужно понимать простую вещь : в основном игры пишутся на компилируемых языках. А это значит, что код игры должен пройти процесс компиляции, для того чтобы его мог «понять» компьютер. А компиляция — это односторонний процесс, который всегда происходит только в одном направлении. Это означает, что обратное программирование — это всего лишь попытка воссоздать исходный код игры.

Исходный код игры: для чего закрывать и для чего его хочется заполучить

  • с закрытым исходным кодом;
  • с открытым исходным кодом.
Для чего нужен исходный код игры

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

В общем, по конкретной игре нужно искать наличие исходного кода. Если же вы просто хотите «поиграться» с исходным кодом какой-либо игры, то мож ете найти игры 90-х или 2000-х годов, у которых исходный код открыт , и экспериментируйте сколько душе угодно.

Заключение

Исходный код игры — это гарантия авторского права на игру. У кого исходники, тот и автор. Восстанавливать исходный код — это довольно сложное занятие, которое потребует от вас специальных знаний. А самое главное , что чем «больше» и сложнее игра, тем дольше и менее точным будет восстановленный исходный код игры.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Почему никак не узнать исходный код игры?

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

В приложениях .net его можно узнать через DotPeek, но в большинстве игр нет.

Почему нельзя узнать исходный код, как например достать текстуры из игры?
Почему после компиляции всё?
Если это всё как-то шифруют, то как работает эта шифровка?

Я понимаю вопросы глупые, но я просто не могу этого понять. =(

(Объясните пожалуйста на простых словах, без википедии, я не понимаю что там написано)

  • Вопрос задан более двух лет назад
  • 3784 просмотра

2 комментария

Средний 2 комментария

inoise

Может стоит хотябы потратить вечер и узнать как работает компьютер?

Если речь про unity/c# игры, то их исходный код можно увидеть и отредактировать через dnSpy (кроме il2cpp), а текстуры вытянуть/заменить через UABE.

Решения вопроса 2

15432

Системный программист ^_^

Эмм ну допустим вы приготовили салат. Нарезали крабовые палочки, кукурузку всыпали, намешали особый соус по своему рецепту. И поставили на стол — нате, хавайте.

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

Так же и с программой. Исходный код — это для нас, человеков. Нам так удобнее описывать программу. Машине же для исполнения вообще не сдались красивые имена и английский язык, всё наше рукоделие переводится в машинные коды, притом покомпактнее, пооптимальнее (упаковкой / нарезкой салата из нашего кода занимаются оптимизирующие компиляторы). В результате получается бинарный файл. Да, его можно дизассемблировать, сломать мозги, но понять, как он работает. И чтобы его понять — нужно научиться читать как машина, думать, как компилятор. В общем, сложно это и часто нецелесообразно. А вообще, люди не то что софт, даже железо реверсят по фотографиям среза кристалла. Но это совсем другая история.

Ответ написан более двух лет назад
Нравится 8 1 комментарий
Anton K @tosi_kk Автор вопроса
Спасибо БОЛЬШОЕ!

GavriKos

DotPeek работает только для .net. Если приложение написано на чем т одругом — дотпик бесполезен. Есть разные другие инструменты для декомпиляции.
Но — полный исходный код вы не получите, если он был скомпилирован.

А текстуры можно вытащить — это совсем другое.

Ответ написан более двух лет назад
Нравится 1 2 комментария
Anton K @tosi_kk Автор вопроса
Почему после компиляции всё? Не вернуть все назад?
Saboteur @saboteur_kiev Куратор тега Программирование

Anton K,
Потому что некоторые операции необратимы.
3 + 7 = 10
4 + 6 = 10
Но если вам дадут 10, вы никак не узнаете из каких цифр оно было сложено.

Ответы на вопрос 3
было бы большой ошибкой думать

Справедливости ради стоит отметить, что много современных игр состоят из 2 основных частей.
Первая — это т. н. «движок», он отвечает за визуализацию моделей, обработку ввода, сеть, просчёт физики и пр. Он действительно обычно скомпилирован в машинный код и его дизассемблирование очень затруднено.
Вторая часть — это игровая логика, она уже отвечает за сценарий, определяет, что произойдёт в игре на определённые действия игрока, открывает уровни, изменяет параметры самой игры, и пр.
Очень часто, игровая логика описывается скриптами, которые доступны для чтения.
Разумеется, это не всегда так, но очень часто игровые студии не имеют ресурсов или желания для разработки собственного движка, а сосредотачиваются на самой игре.
Огромное количнство игр, даже ААА сделаны именно так. Думаю, движки Unity и UnrealEngine в совокупности отжирают более половины мирового рынка игр.

Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать

Lunali

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

Я как раз поругалась с Massachusetts Institute of Technology из за этого . Они хотят красть у детей код и раздавать всем. Я же не вижу в этом смысла и считаю смысл в том что бы Закрыть код, но научить каждого взглянув на чужую игру воспроизвести ее.

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

Поверте чужой код — это не только не чему не учить, но и научить плохому, а имено кражам.

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

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

К примеру вот код

606f7f87a8817509029762.png

Кто знает что он делает?

я не уверена что без пояснение кто то сразу даст ответ .

Потому куда важнее дать пояснение чем просто посмотреть чужой код

В играх важнее идея ,а не код . Самое важное в игре , это игровой сценарий.
Допустим вы украли код игры на питон , а сами знаете только си шарп, какой прок от этого?

Я же взглянув на игру ,просто с нуля ее напишу за пару дней

Использование и переработка ПО: когда можно, а когда нельзя

Предположим, вы создали код и передали исключительное право на него другому лицу (работодателю или по договору отчуждения). Возникает вопрос — как не нарушить права нового правообладателя? В каких пределах можно использовать код, а в каких — нельзя?

В этой статье пойдет речь о допустимом и недопустимом использовании чужого ПО, переработке и адаптации. Разберемся с правовым регулированием и с тем, что это значит на практике.

Что не является нарушением?

Забавный факт — по российскому законодательству софт охраняется в том же режиме, что и литературные произведения. Каждый разработчик — немножко писатель.

Так вот, если кто-то прочитал “Войну и мир”, вдохновился и написал свое произведение даже с очень похожими сюжетными линиями — это не нарушение. Нарушением будет перепечатывать произведение дословно.

Иными словами — охраняется форма выражения, а не идеи. С софтом также. Нарушением является копирование исходного кода (полностью или частично — об этом будет ниже подробнее). Не является нарушением воспроизведение функциональности программы, решаемых ею задач.

Также не является нарушением создание похожего кода в случае, если решение по-другому просто невозможно реализовать. Можно использовать такой тест: если посадить двух опытных разработчиков и поставить им одну и ту же задачу, они создадут примерно одно и то же? Если да — то такое решение спокойно можно использовать в дальнейших разработках.

Что является нарушением?

  • копирование исходного кода;
  • переработка кода (создание новой версии ПО с использованием исходного кода другой программы).

Нарушать исключительное право не стоит, поскольку правообладатель может взыскать компенсацию. Есть два способа расчетов: до 5 млн рублей по усмотрению суда или в двукратном размере стоимости права использования программы. Способ выбирает правообладатель.

Что такое переработка?

Переработка — это отдельный аспект права использования ПО (правомочие, если юридическим языком). Право на переработку кода принадлежит правообладателю. Делать это без его согласия — значит нарушать исключительное право.

Переработкой не является:

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

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

Объем переработки законодательством не определен. Исходя из судебной практики для создания производной программы нужно доработать 20% исходного кода или создать новые модули или функциональные возможности.

В общем, нужно следить, есть ли у вас право на переработку. Оно должно быть письменно явно выражено.

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

Как можно защитить софт от незаконного использования?

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

Но еще очень классно может сработать комбинация технических и правовых методов. Например, компания 1С использует ключ аппаратной защиты «HASP», без указанного ключа правомерная работа в программах общества «1С» невозможна. Попытка заменить ключ защиты является модификацией программы и незаконным вмешательством и наказуема сама по себе.

А дальше дело техники — исполнительные действия по осмотру компьютеров в офисе, установление незаконного использования, компенсация в 4 млн. Разработчики 1С в этом плане готовят отличную почву юристам для судебного дела.

Из этого, как вижу я, можно сделать два вывода:

  • ключи защиты — это хорошая помощь вашим юристам в защите софта;
  • если вы на другой стороне баррикад и сносите ключ защиты — помните о последствиях.

Что из этого всего следует

  • Можно повторять другую программу, если иначе задачу решить невозможно в принципе;
  • Можно спокойно использовать простые универсальные части кода, которые и так все используют;
  • Можно воспроизводить функциональность программы, если вы не копируете исходный код, а пишете сами;
  • Нельзя перерабатывать код без разрешения правообладателя;
  • Если вы можете влиять на ход переговоров — сохраняйте за собой право на переработку при отчуждении ПО;
  • Если у вас нет права на модификацию ПО — лучше этого не делать. Снести ключ защиты — это тоже модификация;
  • Вы можете придумывать технические решения, которые будут защищать вашу программу совместно с правовыми методами.

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

Если у вас есть вопросы — напишите, пожалуйста, об этом в комментариях. Так я буду знать, о чем стоит рассказать еще. Эта статья — это ответ на комментарии к предыдущей про исключительное право.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *