2010-01-30 2 views
3

Я работаю над игрой с закрытым исходным кодом, которая использует язык сценариев для автоматизации. Практически вся логика игры обрабатывается скриптами. Сценарии могут быть скомпилированы в формат байт-кода, но из-за характера языка идентификаторы должны быть сохранены. Скомпилированные скрипты могут быть встроены в другие текстовые форматы ресурсов, используя двоично-текстовое кодирование.Шифрование скриптов для вставки в текстовые файлы

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

+0

Нет содержимого C++, которое я вижу - удаленный тег C++. – 2010-01-30 20:51:22

+0

Извините. Тег был добавлен силой привычки, потому что язык реализации - C++. –

+0

Защитите источник от чего именно? И почему? Откуда взялась идея, что вам нужно использовать шифрование? – 2010-01-31 02:01:23

ответ

1

В Windows размер исполняемого файла не влияет на время загрузки, поскольку exe просто отображается в память, а затем выгружается по мере необходимости. Я не могу себе представить, почему это было бы неверно и для * nix.

Итак, если скрипты не нужно изменять отдельно от вашего .exe, вы можете вставить их в файл .exe, что затруднит их изменение, даже если они смогут их найти. Я написал небольшой инструмент, который превратил файлы данных в файлы .obj, что сделало его очень легким для ввода данных в мой exe - оказалось, что довольно легко написать объектный файл, содержащий только данные.

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

+0

Достаточно хорошо. Я думаю, что некоторые наивные возмущения и разумное использование 'objcopy' - мое решение. И, кстати, я имел в виду размер исполняемого файла сценария, а не игровое приложение. :) –

+0

@Jon: да, я вижу это сейчас. Насколько я понимаю, сильное шифрование обычно не увеличивает данные, которые он шифрует так же, как и круглый размер, чтобы соответствовать размеру блока алгоритма шифрования. –

1

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

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

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

1

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

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

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

0

Шифрование здесь не будет дорого.

В принципе, любой добавляемый уровень шифрования сам исполняемый файл должен иметь возможность выполнять дешифрование для запуска скриптов.Вы запираете дверь, но вы оставляете ключ в замке. Это неизбежно.

Что такое шифрование, так это то, что он несколько повышает планку доступа к тем, кто может получить доступ к данным. Это требует некоторых навыков разборки. Простое вложение файлов в исполняемый файл уже отфильтрует случайного не очень-хорошего хакера. Те, кто не удержался от такого внедрения, также являются теми, кто сможет следовать пути обработки данных, найти логику дешифрования и, по желанию, выдать дешифрованный код. Уровень шифрования может также увеличить чувство важности: то, что было зашифровано, безусловно, стоит того. Следовательно, попытка слишком фанковых вещей может просто ухудшить вашу ситуацию, а не лучше.

С другой стороны, вложение файлов в исполняемый двоичный файл, вероятно, является хорошей идеей. Это избавило бы от необходимости находить их во время выполнения в файловой системе (определение местоположения во время выполнения, как известно, несколько сложнее в системах Unix, чем в Windows, из-за жестких ссылок: в Windows исполняемый файл может легко получить свой собственный путь, но в Unix наличие жестких ссылок означает, что «исполняемый путь не определен»).