Стоит ли мне беспокоиться о том, чтобы запутать мой .NET-код?

Я уверен , что многие читатели на SO использовали Lutz Редер «s .NET рефлектор декомпилировать их код .NET. Я был поражен тем, насколько точно наш исходный код можно воссоздать из наших скомпилированных сборок.

Мне было бы интересно услышать, сколько из вас использует обфускацию и для каких продуктов?

Я уверен, что это гораздо более важная проблема, скажем, для приложения .NET, которое вы предлагаете для загрузки через Интернет, в отличие от того, что создано специально для конкретного клиента.

Ответов (10)

Решение

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

для меня легко - если вам нужно защитить интеллектуальную собственность - запутать - если нет.

Легко сделать с помощью подходящих инструментов.

Никакой новой обфускации, но много трюков с компилятором, начиная с версии 1.1.

Например, каждый раз, когда вы используете анонимный тип, вы получаете IL, который компилируется с довольно неясным именем. Каждый раз, когда вы используете yield, вы получаете совершенно новый класс, который реализует как IEnumerable, так и IEnumerator (умная оптимизация, нечитаемый код). Каждый раз, когда вы используете анонимный делегат, вы получаете новый метод с именем, недопустимым на каждом языке .Net, о котором я знаю, но это нормально для IL.

Я думаю, что в какой-то мере мы ВСЕ должны беспокоиться о нашем IP :)

Хороший вопрос, хотя, как это то, о чем я очень хочу узнать больше (в настоящее время я не запутываю).

Поговорив с моим менеджером на работе, он сказал, что не запутывает, но делает NGEN при установке, очевидно, этого должно быть достаточно, чтобы Reflector не работал над вашими сборками, но я понятия не имею, правда ли это и в какой степени , поэтому, пожалуйста, не воспринимайте это как евангелие :)

Хороший вопрос :) +1

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

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

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

@ Роб Купер

Поговорив с моим менеджером на работе, он сказал, что не запутывает, но делает NGEN при установке, очевидно, этого должно быть достаточно, чтобы Reflector не работал над вашими сборками, но я понятия не имею, правда ли это и в какой степени , поэтому, пожалуйста, не воспринимайте это как евангелие :)

Это не обеспечивает никакой защиты от разборки. Сначала я предполагаю, что вполне возможно извлечь необработанные файлы из любого установочного пакета, такого как MSI или CAB-файл.

Но что еще более важно, Ngen запускается на клиентской машине после установки сборки. Ngen просто заставляет сборку компилироваться сейчас, а не позже использовать JIT. Исходная сборка остается неизменной и должна оставаться, потому что Ngen может быть не в состоянии скомпилировать всю сборку.

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

Помните, что обфускация - это не шифрование. ИМХО, если кто-то осознает ценность обратной инженерии вашего кода, они это сделают. Это верно для управляемого кода или нативного кода, запутанного или нет. Конечно, обфускация отпугивает случайного наблюдателя, но действительно ли такие люди угрожают вашему бизнесу? Каждый метод обфускации .NET, который я видел, усложняет вашу жизнь как разработчика.

Существуют службы, предлагающие настоящее шифрование, например SLPS от Microsoft. См. http://www.microsoft.com/slps/default.aspx

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

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

Согласитесь, большинству людей, которые хоть немного умеют программировать, не нужно красть ваш код!