Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Unity3D: способы защиты проекта

Unity3D: способы защиты проекта

Страницы: 1 2 Следующая »
AlerrПостоялецwww7 июня 201811:27#0
Привет всем.
Возникла ситуация, когда нужно дать работать над проектом нескольким людям. Хотелось бы защитить cs-код и шейдеры.
Как защитить cs-код - можно либо обфускатить, либо собрать dll. Я предпочитаю собирать dll. Хотелось бы узнать, а есть ли автоматический способ сбора dll? Очень неудобно перегонять каждый класс в отдельный dll.
А вот как защитить код шейдеров так, чтобы на выходе было что-то типа dll? У меня была одна идея (ну это конечно совсем так себе) размещать код шейдеров в cs-коде и в нем собирать шейдеры, но почему-то юнити (как оказалось) это перестали поддерживать.
Как можно защитить шейдеры?
EugeneУчастникwww7 июня 201813:32#1
Alerr
> У меня была одна идея (ну это конечно совсем так себе) размещать код шейдеров в
> cs-коде и в нем собирать шейдеры,
Если я не ошибаюсь, шейдеры будут лежать строкой в бинарнике, не?
KumoKairoПостоялецwww7 июня 201814:02#2
Шейдеры можно перехватить профилировщиком прям на графической карте, они в любом случае разворачиваются. Не парьтесь.
AlerrПостоялецwww7 июня 201814:25#3
Eugene
> Если я не ошибаюсь, шейдеры будут лежать строкой в бинарнике, не?
Да, так было в ранних версиях юнити, теперь они это убрали.


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

Еще вопрос, а есть какие-то автоматизированные средства сборки dll под Unity? Чтобы указал файлы и на выходе получил их dll?

KumoKairoПостоялецwww7 июня 201814:28#4
dll это не способ защиты C#. Они декомпилятся и выдают код почти в таком же виде, в котором он был изначально в исходном файле.
AlerrПостоялецwww7 июня 201816:06#5
KumoKairo
> dll это не способ защиты C#. Они декомпилятся и выдают код почти в таком же виде, в котором он был изначально в исходном файле.
Спасибо, не знал. Подскажите как тогда максимально защитить код?
EugeneУчастникwww7 июня 201816:16#6
Alerr
> Спасибо, не знал. Подскажите как тогда максимально защитить код?
Писать на С++, лол

Никак, забей. Потрать время на полезные вещи.
AlerrПостоялецwww7 июня 201816:23#7
Eugene
> Никак, забей. Потрать время на полезные вещи.

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

KumoKairoПостоялецwww7 июня 201816:34#8
но все же хотелось бы больше разобраться в этой теме.

C# никак не защитить. Ни обфускация, ни прочие свистелки-перделки не помогут. Они нужны просто чтобы ночами спать спокойней, но объективного толку от них никакого нет. Расслабься и спокойно делай игру.

Если по сабжу "как компилить много C# файлов в одну dll" - лучше всего использовать сырые C# проекты (которые создаются через Visual Studio через File -> Create Project). Пишешь на сыром C# всё что надо, без юнити, компилишь свои dll и кладёшь в папку с игровым проектом. При сильном желании можно зареференсить UnityEngine.dll, но в таком случае надо аккуратно смотреть чтобы ссылочная версия соответствовала версии запущенному редактору.
Но опять же, код это никак не защитит

Правка: 7 июня 2018 16:38

AlerrПостоялецwww7 июня 201816:38#9
KumoKairo
> Расслабься и спокойно делай игру.

Ну спасибо) Но мне теперь любопытно, в чем причина того, что C# не защитишь?

KumoKairoПостоялецwww7 июня 201817:00#10
Но мне теперь любопытно, в чем причина того, что C# не защитишь?

Он компилится, как и большое количество других языков, в промежуточный язык Intermediate Language (IL). Читается он как высокоуровневый ассемблер и из него почти всегда можно вернуть начальный вид кода на C#.
Можете посмотреть как выглядит IL после компиляции из C# в песочнице типа этой http://dotnetfiddle.net/ (там есть режим просмотра IL)
gamedevforПостоялецwww7 июня 201817:35#11
секрет фирмы писать на С++ )))
EugeneУчастникwww7 июня 201817:36#12
gamedevfor
> секрет фирмы писать на С++ )))
Кстати, юнити же вроде использует il2cpp для некоторых платформ?
KumoKairoПостоялецwww7 июня 201817:45#13
Eugene
> Кстати, юнити же вроде использует il2cpp для некоторых платформ?

Скоро эта приблуда будет везде компилиться.

Но надо понимать что это транспилированный код, и юнити зачем-то хранит кучу метаданных (что-то связано со строковыми литералами, но затрагивает и сами методы / их названия и прочее). Читал статью какого-то китайца, который достаточно успешно конвертил код скомпиленый с IL2CPP в удобочитаемый вид на С++. Не могу найти статью, скину если нарою в истории.

Единственный вариант защитить код - делать всё на сервере, а на клиент стримить картинку в видеоформате

DampireУчастникwww7 июня 201817:59#14
KumoKairo
> Единственный вариант защитить код - делать всё на сервере, а на клиент стримить
> картинку в видеоформате
Брехня.
1. Обфускация превращает код в нечитабельную кашу, которая декомпилируется (сюрприз, сюрприз) в нечитаемую кашу. Которую потом надо рефакторить и превращать во что-то приличное. Для шейдеров она тоже есть. Внезапно.
2. P/Invoke ныкает код в нативную библиотеку, которую чуть сложнее декомпилировать.
3. Проблема неуловимого Джо. Никому ваши поделки на Юнити не нужны. Есть огромная база куда более качественного кода в опенсорсе.

Правка: 7 июня 2018 18:02

Страницы: 1 2 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр