是否可以防止DLL被修改?

时间:2012-10-09 22:16:42

标签: .net code-security

是否可以签名或以其他方式保护托管(.NET)DLL不被修改?我正在寻找可能的解决方案来检测DLL的变化并防止它们被.NET运行时加载。我不介意是否有人可以在Reflector或ILSpy中加载DLL - 只要修改后的DLL无法执行,我就可以了。

我对这个主题进行了一些搜索,但大多数文章/讨论都建议混淆,这不是我正在寻找的。我认为以数字方式签署DLL会实现这一点,但与同事聊天让我怀疑并且我在这方面只有肤浅的知识。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:4)

Signing a DLL不会阻止其他人反编译然后修改你的DLL。 阻止的是他们正在执行,然后将结果作为原始传递出去。换句话说,如果调用者决定信任它,则会执行修改后的DLL,但任何希望它具有您的公钥令牌的代码都会拒绝它。

答案 1 :(得分:1)

签署库将阻止修改。这样做的缺点是,一旦你签署了这个库,你必须签署它所消耗的所有子库。如果你正在使用NuGet库中的东西,这可能是一个痛苦的屁股。

理论上,一旦dll被签名,就会创建一个签名以确保它没有被修改。如果有人攻击它,那么框架将不会加载它。