Помогает ли NGEN'ing приложению .NET защитить его от обратного инжиниринга? Если нет, то когда бы я использовал это? - PullRequest
3 голосов
/ 28 августа 2010

Если Ngen не защищает мое приложение, когда я смогу разумно использовать это приложение в своей карьере?

Ответы [ 3 ]

2 голосов
/ 28 августа 2010

Джеффри Рихтер написал замечательную статью в своей книге, я не знаю, есть ли в третьем выпуске, но вот отличная статья, которую он написал в 2002 году о Ngen'ing, которая все еще актуальна.

Основные характеристики:

Между тем, существует несколько потенциальных проблем с файлами NGen'd:

  • Нет защиты интеллектуальной собственности.Многие люди считают, что возможно отправлять файлы NGend без отправки файлов, содержащих исходный код IL, таким образом сохраняя свою интеллектуальную собственность в секрете.К сожалению, это невозможно.Во время выполнения CLR требуется доступ к метаданным сборок, а файлы NGend не содержат метаданные.

  • Файлы NGend могут быть не синхронизированы.Когда CLR загружает файл NGen'd, он сравнивает ряд атрибутов о ранее скомпилированном коде и текущей среде выполнения.Если какой-либо из атрибутов не совпадает, файл NGen'd не может быть использован, и вместо него используется обычный процесс JIT-компилятора.

  • Плохое администрирование.Файл NGen'd не удаляется автоматически при удалении сборки, что отрицательно сказывается на простом администрировании .NET Frameworks и истории развертывания XCOPY.

  • Низкая производительность времени загрузки (перебазирование).Когда Windows загружает файл NGend, она проверяет, загружается ли файл по его предпочтительному базовому адресу.Если файл не может быть загружен по предпочтительному базовому адресу, Windows переместит файл, исправив все ссылки на адреса памяти.Это занимает очень много времени, потому что Windows должна загрузить весь файл в память и изменить различные байты в файле.Для получения дополнительной информации о перебазировании см. Мою книгу: Программирование приложений для Microsoft Windows, 4-е издание (Microsoft Press).

Низкая производительность во время выполнения.

При компиляции кодаNGen не может сделать столько предположений о среде исполнения, сколько может компилятор JIT.Это приводит к тому, что NGen.exe создает код с рядом косвенных ссылок на память, которые не нужны для скомпилированного кода JIT

1 голос
/ 28 августа 2010

NGen предназначен только для компиляции IL для повышения производительности. Вы хотели бы изучить запутывание кода для защиты приложения от обратного инжиниринга.

0 голосов
/ 28 августа 2010

Скорость загрузки - все, для чего это действительно полезно. Тем не менее, это может привести к 2000% (да, это правильно) улучшение.

Edit:

Обратите внимание, что JIT-код обычно работает быстрее, чем NGEN-код.

...