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

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

3 ответа

Решение

Джеффри Рихтер написал отличную статью в своей книге, я не знаю, есть ли в третьем выпуске, но вот отличная статья, которую он написал в 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-скомпилированного кода

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

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

Редактировать:

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

Другие вопросы по тегам