(Почему) я должен использовать обфускацию?

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

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

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

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

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


person Sören Kuklau    schedule 28.08.2008    source источник


Ответы (8)


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

person John Sibly    schedule 28.08.2008

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

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

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

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

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

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

person Leigh Caldwell    schedule 28.08.2008

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

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

person GateKiller    schedule 28.08.2008

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

person skolima    schedule 28.08.2008

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

person John    schedule 28.08.2008

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

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

person Staale    schedule 28.08.2008

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

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

person John Hunter    schedule 28.08.2008

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

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

person Jorge Córdoba    schedule 28.08.2008