Защита кода позволяет автоматически убрать его часть из защищенного приложения и обращаться к нему только по требованию в момент выполнения. Любое обращение к защищенному хранилищу кода инициирует сначала проверку наличия электронного ключа, и лишь при его соответствии тому, на котором была произведена защита приложения, производится дальнейшее расшифровывание защищенного кода.
Код каждого метода из защищенного приложения имеет свою уникальную и независимую от других участков кода привязку к электронному ключу. Такой подход существенно затрудняет обратный анализ и реализует уникальную последовательность обращений, опирающуюся на граф потока выполнения защищаемого приложения.
Защита EXE
Защищенный исполняемый файл остается Managed-сборкой, но большая часть его кода переносится в Native-DLL специального вида, которая представляет собой защищенное хранилище кода:
- В процессе выполнения происходит вызов кода защищенного метода, после чего вызывается код заглушки.
- Заглушка инициирует выполнение кода из защищенного хранилища относительно вызванного метода.
- Происходит выполнение защищенного кода.
Защита DLL
При защите динамических DLL-библиотек для платформы .NET использован аналогичный подход, что и при защите исполняемых файлов, но с учетом специфики использования библиотечного кода. В процессе защиты из оригинальной DLL-библиотеки удаляется MSIL-код, и на его место вставляются вызовы специальных методов-заглушек. Т. о., после защиты от оригинальной DLL-библиотеки остается только код с вызовом методов-заглушек. Данный подход к защите позволяет сохранить работоспособность принципов взаимодействия с защищенной библиотекой: на нее по-прежнему можно добавлять ссылки (references) из других .NET сборок, и она по-прежнему имеет статус Managed-сборки. После защиты DLL сборки нет необходимости вносить какие-либо изменения в код, который уже использует защищенную библиотеку, так как методы-заглушки возьмут на себя всю работу по перенаправлению вызовов к защищенному хранилищу кода.
- Исполняемый файл обращается к методу из защищенной библиотеки
- После обращения защищенному методу вызывается код заглушки
- Заглушка инициирует выполнение кода из защищенного хранилища относительно вызванного метода
- Происходит выполнение защищенного кода.