Сборки со строгими именами в .NET гарантируют, что код не был подделан? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь понять суть сборок с сильными именами в .NET. Погуглив об этом, я заметил, что везде говорится, что он гарантирует, что код исходит от меня и не был подделан. Итак, я проверил это. Я создал простую DLL, подписал ее с помощью вновь созданного ключа PFX и сослался на нее в своем приложении WPF. И хорошо, все работает. Когда я компилирую DLL с другим файлом PFX, я получаю сообщение об ошибке, так что все в порядке.

НО, когда я декомпилирую DLL с помощью ildasm, модифицирую ее и перекомпилирую с помощью ilasm, приложение WPF по-прежнему работает без каких-либо ошибок. Поэтому я подделал DLL со строгим именем и изменил ее вручную на старую, а приложение все еще работает с подделанной DLL. PublicKeyToken - это то же самое. Так в чем же смысл сильных имен? Это не гарантирует, что код не был подделан, так как я строго назвал его.

1 Ответ

0 голосов
/ 02 ноября 2018

Раньше он проверял на фальсификацию, но накладные расходы на проверку каждой сборки со строгим именем при запуске приложения были слишком высоки, поэтому Microsoft отключила это поведение по умолчанию несколько лет назад (путь назад когда был выпущен «.NET Framework версии 3.5 с пакетом обновления 1».

Это называется функция обхода строгого имени .

Вы можете отключить эту функцию (т. Е. Сделать проверку Windows на предмет подделки) для конкретного приложения, добавив в его файл ".config" следующее:

<configuration>  
  <runtime>  
    <bypassTrustedAppStrongNames enabled="false" />  
  </runtime>  
</configuration>  

Вы можете включить проверку строгого имени для ВСЕХ приложений, отредактировав реестр (что явно не является возможным решением!).

Подробнее см. На следующей странице:

https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-disable-the-strong-name-bypass-feature

В настоящее время рекомендуется использовать полный сертификат подписи кода для исполняемого файла и библиотек DLL, если вы хотите предотвратить подделку кода.

...