(Почему) я должен использовать запутывание? - PullRequest
8 голосов
/ 28 августа 2008

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

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

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

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

Есть ли хорошие инженерные преимущества для запутывания?

Ответы [ 8 ]

13 голосов
/ 28 августа 2008

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

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

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

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

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

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

6 голосов
/ 28 августа 2008

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

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

4 голосов
/ 28 августа 2008

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

3 голосов
/ 28 августа 2008

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

2 голосов
/ 28 августа 2008

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

2 голосов
/ 28 августа 2008

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

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

2 голосов
/ 28 августа 2008

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

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

1 голос
/ 28 августа 2008

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

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

...