是否可以签署或以其他方式保护托管 (.NET) DLL 不被修改?我正在寻找可能的解决方案来检测对 DLL 的更改并防止它们被 .NET 运行时加载。我不介意是否有人可以在 Reflector 或 ILSpy 中加载 DLL - 只要修改后的 DLL 无法执行,我就可以了。
我对此主题进行了一些搜索,但大多数文章/讨论都推荐混淆,这不是我想要的。我认为对 DLL 进行数字签名可以实现这一点,但与同事的交谈让我对此表示怀疑,而且我对这方面的了解也很肤浅。
任何意见,将不胜感激。
是否可以签署或以其他方式保护托管 (.NET) DLL 不被修改?我正在寻找可能的解决方案来检测对 DLL 的更改并防止它们被 .NET 运行时加载。我不介意是否有人可以在 Reflector 或 ILSpy 中加载 DLL - 只要修改后的 DLL 无法执行,我就可以了。
我对此主题进行了一些搜索,但大多数文章/讨论都推荐混淆,这不是我想要的。我认为对 DLL 进行数字签名可以实现这一点,但与同事的交谈让我对此表示怀疑,而且我对这方面的了解也很肤浅。
任何意见,将不胜感激。
签署 DLL不会阻止其他人反编译然后修改您的 DLL。它确实阻止的是他们这样做,然后将结果作为原始. 换句话说,如果调用者决定信任修改后的 DLL,它将执行,但任何期望它拥有您的公钥令牌的代码都会拒绝它。
签署图书馆将防止修改。不利的一面是,一旦你签署了这个库,你也必须签署它使用的所有子库。如果您使用的是 NuGet 库中的某些内容,那可能会让人头疼。
理论上,一旦对 dll 进行签名,就会创建一个签名以确保它未被修改。如果有人破解了它,那么框架将不会加载它。