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

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

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

.NET Reactor completely stops any decompiling by mixing any pure .NET assembly (written in C#, VB.NET, Delphi.NET, J#, MSIL...) with native machine code.

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
2 770
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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