Подтвердить что ты не робот

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

У меня есть приложение, которое имеет 1 ссылочную сборку (test.exe, test.dll)

Что мне нужно, когда запускается test.exe, он должен показывать имя издателя как "TestCompany".

Чтобы сделать это, я подписал цифровую подпись, и он делает то, что я хочу. И если я изменяю один байт test.exe, имя издателя "Неизвестно". Это хорошо.

Но если я изменяю test.dll, приложение запускается как ничего не произошло и показывает имя издателя как "TestCompany". Что плохо для меня.

Поэтому я положил сильное имя на test.dll и добавил <bypassTrustedAppStrongNames enabled="false" /> в app.config.

Опять же, никакой разницы. Поэтому я снова искал и обнаружил, что bypassTrustedAppStrongNames проверяет, имеет ли узлы сильное имя или нет. Не проверка. Это не хорошо для меня снова.

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

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

PS: Target.net framework 2.0.

4b9b3361

Ответ 1

Большинство моих важных сборок не загружаются в качестве ссылки в моем проекте. То, что я делаю, это объявить интерфейсы взаимодействия (общие для всех проектов в качестве базы... да, это ссылка ссылается..), тогда я загружаю все сборки во время выполнения, используя:

 Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
 Type type = assembly.GetType("MyClass");
 object instanceOfMyType = Activator.CreateInstance(type);

Я использую это по нескольким причинам. У меня разные реализации классов, которые я должен вызывать в зависимости от конфигурации пользователя/клиента. Также представляется хорошим вариантом гарантировать, что вы загружаете определенную сборку с помощью моего общедоступного токена и версии.

После небольшого исследования я нашел эти сообщения:

Что ж, я был шокирован после того, как посмотрел на ваш вопрос. Это вызывает беспокойство насчет ссылки на мои DLL сейчас. Я не знаю, насколько это безопасно, но, похоже, это намного безопаснее, чем просто ссылаться на него.

Я не нашел ссылки в документации MS для использования Assembly.Load и bypassTrustedAppStrongNames. Я буду запускать некоторые тесты позже, но кажется более безопасным использовать это.