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