Обфускация в .NET: как это делается, насколько это безопасно?

Я поднял вопрос обфускации в еще один вопрос, на который кто-то ответил, что" запутывание не прекращается ".

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

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

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


person joshcomley    schedule 29.05.2009    source источник
comment
ObLink: ioccc.org   -  person workmad3    schedule 29.05.2009
comment
Безопасность не имеет ничего общего с обфускацией. Я хотел получить серьезные ответы сообщества о том, насколько безопасен мой код при обфускации с помощью обфускатора X, Y или Z. Степень безопасности, обеспечиваемая обфускацией, всегда равна нулю или меньше (меньше в случае, когда обфускация содержит ошибки и делает ваш код менее безопасным, чем он был ранее).   -  person L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o&#x    schedule 21.06.2010


Ответы (5)


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

person Stephan    schedule 29.05.2009

Есть способы сделать что-то подобное - например, пробовали ли вы когда-нибудь запустить Reflector на самом себе?

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

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

person David M    schedule 29.05.2009

Если кто-то достаточно предан делу, чтобы получить вашу программу, они это сделают, никакая обфускация этого не изменит. Я думаю, что ответ Джоэла Кохорна на Защита приложения .NET хорошо резюмирует:

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

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

  • Rewrite for as while. Use special values.
  • Change iteration into recursion
  • Obfuscate constructs and meaningless variable names
  • Remove intermediate variables and literals
  • Obfuscate names again
  • Remove literals
  • Remove redundant text

  • person Gavin Miller    schedule 29.05.2009


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

    person Sebastian    schedule 21.06.2010