Можно ли предотвратить изменение DLL?

Можно ли подписать или иным образом защитить управляемую (.NET) DLL от изменения? Я ищу возможные решения, которые бы выявляли изменения в DLL и предотвращали их загрузку во время выполнения.NET. Я не против, если кто-то может загрузить DLL в Reflector или ILSpy - до тех пор, пока модифицированная DLL не может быть выполнена, я бы с этим согласился.

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

Любой совет будет принят во внимание.

2 ответа

Решение

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

Подписание библиотеки предотвратит изменение. Недостатком является то, что как только вы подписали эту библиотеку, вы должны также подписать все дочерние библиотеки, которые она использует. Это может быть неприятно, если вы используете что-то из библиотеки NuGet.

Теоретически, как только DLL подписана, создается подпись, чтобы гарантировать, что она не была изменена. Если кто-то взломал его, то framework его не загрузит.

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