Пост в процессе написания!
Интро
Сегодня мы с вами разберём ситуации с защитой ПО на архитектуре .NET
На данный момент времени (2025.11.09) в мире экосистемы .NET есть прежняя проблема - это возможность прямой дизассемблеризации машинного кода бинарника до уровня исходного кода* (с учётом некоторых ограничений)
С этой проблемой сталкиваются многие разработчики, которые выводят .NET проект в публичную среду и имеют коммерческие отношения. И зачастую проблема затрагивает среду лицензирования ПО, иногда бывают кейсы с защитой интеллектуальной собственности (кода) от просмотра/модификации.
Собственно возникает вопрос: Раз .NET "дырявый" - как победить данную проблему? И тут вступают разные процессы защиты ПО от вскрытия и модификации:
- Обфускаторы кода
- Кастомные сборки .NET (dotnet publish с модифицированной средой .NET)
- Виртуализаторы кода (ВМ для IL опкодов)
- Рекомпиляторы .NET (IL стэк) в машинный код (X32/64, Arm64) (AOT компилятор (Раннее известный как Mono AOT), il2cpp)
Давайте рассмотрим в теории как работают данные процессы:
1. Обфускация кода
Это процесс, который перед процессом компиляции, редактирует исходные файлы проекта, меняя названия переменных, их положение в коде, создавая "мусорный" и бессмысленный код, создавая специальный код и атрибуты, которые предназначены для создания помех программам дизассемблирования.
Пример обфускации кода До:
using System;
После:
А теперь рассмотрим плюсы данного решения:
- Гарантия работы - изменения вкладываются ещё на этапе исходного кода, который пройдет все этапы компиляции, которые включают в себя различные этапы проверки кода. Таким образом скомпилированный бинарник гарантированно будет работать.
- Простота использования - Не нужно иметь знания в использовании данного процесса: Подключил и используй.
Ну теперь к минусам:
- Нестойкая защита - Этот процесс лишь усложнит работу над реверс инженерии. Если использовать публичный обфускатор - то высок шанс того, что его можно ДЕобфусцировать через например популярную утилиту
de4dotи её многочисленных форков, комьюнити которое адаптирует его под определённые сценарий использования.
| Плюсы | Минусы |
|---|---|
| Гарантия работы | Нестойкая защита |
| Простота использования |
