Как защитить код C # от модификации - PullRequest
2 голосов
/ 07 марта 2012

Необходимо защитить некоторые сборки от модификации (или, другими словами, как определить, был ли изменен двоичный файл сборки после компиляции).Как я могу добиться этого в .NET 4.0 с помощью встроенных средств .NET?

Проблема заключается только в обнаружении изменения файла DLL, а не в защите от декомпиляции, обратного инжиниринга и т.

Ответы [ 5 ]

3 голосов
/ 12 марта 2012

К сожалению, строгие имена обеспечивают защиту потребителю . Они не предоставляют никакой защиты разработчику сборки, если их код не был изменен. удалить a строгое имя тривиально. После удаления его можно изменить по желанию.

Даже защита, предоставляемая потребителю, ограничена строгими именами. Поскольку в центральном реестре открытых ключей нет никакого способа узнать, что сборка была подписана конкретным издателем. Хакеры могут изменить подпись и подписать ее своими ключами после внесения изменений. По правде говоря, строгие имена действительно защищают только от хакеров, изменяющих системные библиотеки времени выполнения ... даже тогда я не уверен, насколько они эффективны для реальной атаки на систему.

Поскольку код может быть легко изменен даже при строгом имени, добавление некоторой простой проверки хеша в ваш собственный код не обеспечит никакой дополнительной защиты. Единственный способ обрести надежду - использовать инструмент защиты профессионального уровня , который предлагает обнаружение несанкционированного доступа .

2 голосов
/ 07 марта 2012

Вы можете использовать сборки со строгими именами (см. ЗДЕСЬ ).
Они имеют открытый ключ и цифровую подпись, и как только они будут изменены, они больше не будут загружаться JIT:

Строгие имена обеспечивают строгую проверку целостности.Прохождение проверок безопасности .NET Framework гарантирует, что содержимое сборки не было изменено с момента ее создания.

НО, как сказал Стив, это не совсем безопасно!

0 голосов
/ 07 марта 2012

Попробуйте цифровую подпись своих сборок.Чтобы узнать больше, взгляните на статью Использование строгих имен в журнале MSDN Magazine.

0 голосов
/ 07 марта 2012

Строгое имя, подписывающее вашу DLL и использующее полное имя для ваших ссылок (включая подпись), должно помочь с этим.

Это не надежно - кто-то всегда может разобрать не только DLL, но и любые другие приложения, использующие ее, и обновить эти ссылки до новой версии DLL.

0 голосов
/ 07 марта 2012

Я бы предложил сделать хэш сборок во время компиляции. Сохраните его где-нибудь в приложении и проверьте во время выполнения с новым вычисленным хешем сборки.

Как подсказывает @Steve (и другие), процесс, использующий это, называется «сборки со строгим именем»

...