Я пытаюсь сделать протектор для программ на C#. Суть его в том, что защищаемый файл переводится в байты и шифруется. Затем в другой программе, которая расшифровывает этот массив из ресурсов, я произвожу запуск сборки через Assembly.Load(DecryptModule(Properties.Resources.Protected,"Pass"))
. Проблема заключается в незащищённой памяти, которая используется для Assembly.Load()
и я могу снять эту защиту в 1 клик обычным дампом. Как можно защитить память(Если это возможно), которая используется для Assembly.Load()
?
Механизма защиты отдельной управляемой сборки в .NET не существует. В Windows, однако, существуют другие механизмы защиты памяти.
Начиная с Windows 10, Trusted execution позволяет создавать изолированные области памяти, так что доступ к данным в такой области может быть получен только кодом, загруженным в эту же область. Требует аппаратной поддержки со стороны процессора (например, Intel Software Guard Extensions).
Для антивирусных приложений, начиная с Windows 8.1 существует механизм защищенных сервисов, который ограничивает доступ к памяти целого процесса. Любые модули, загружаемые в защищенный сервис, должны быть подписаны специальным сертификатом.
Приложения для обработки звука или видео, начиная с Windows Vista, могут использовать Windows Media Foundation, который в целях защиты авторских прав также предоставляет похожий функционал (см. Protected Media Path)
Когда вышеперечисленное не применимо, приложение может попытаться защитится теми же методами, которыми действует вредоносное ПО: инжекция DLL в во все процессы и перехват вызовов функций работы с памятью (ReadProcessMemory и др.). Антивирусы в старых версиях Windows действуют именно так. Однако, этот метод очень ненадежен, ведь если в системе две программы пытаются применить его одновременно, они входят в конфликт и результат непредсказуем.
В общем, если вам нужна реальная защита, как минимум нужно переходить к использованию неуправляемого кода. Также, можно всегда вынести критичный код в удаленный сервис (думаю, это единственный реальный способ защиты, когда секретным является сам код).
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня при компиляции сборки в Release появляется вот такая ошибка:
Делаю игру на мобильные устройства на движке UnityВ игре есть такой момент, когда при столкновении игрока с препятствием я ставлю Time