Вопрос

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

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

.NET Reactor полностью останавливает любую декомпиляцию, смешивая любую чистую сборку .NET (написанную на C #, VB.NET, Delphi.NET, J #, MSIL ...) с собственным машинным кодом.

То есть, по сути, вы отбрасываете все преимущества байт-кода за один раз?

Есть ли хорошие инженерное дело преимущества обфускации?

Это было полезно?

Решение

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

Другие советы

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

Как вы сказали, обфускация предназначена для решения социальной проблемы.А социальные (или деловые) проблемы, в отличие от технических, редко имеют полное решение.Существуют только степени успеха в решении или минимизации проблемы.

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

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

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

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

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

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

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

Одним из потенциальных инженерных преимуществ является то, что в некоторых случаях запутывание может создавать меньшие исполняемые файлы или другие артефакты, напримерзапутывание javascript приводит к уменьшению размера файлов (поскольку все переменные называются "a" и "b" вместо "descriptiveNameOne", все пробелы удалены и т.д.).Это приводит к более быстрому времени загрузки веб-страниц, использующих запутанный javascript.Очевидно, что это неприменимо (в такой степени) к миру .NET, но это пример ситуации, в которой есть прямая инженерная выгода.

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

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

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

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

Используйте шифрование для защиты информации в пути.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top