是否有可能用一个用不同的密钥签名的强名称的程序集替代?

问题描述:

我们即将在由应用程序的其他组件引用的强命名的.NET程序集中实现许可算法。当然,我们希望将有人交换包含许可证检查的程序集以及通过解锁应用程序功能的风险降至最低。是否有可能用一个用不同的密钥签名的强名称的程序集替代?

据我所知,您可以将程序集重定向到不同的版本(通过发布者策略或在应用程序配置文件中)。但是我还没有找到一种方法来重定向到另一个名字的组合或用另一个键签名的程序集。

是否有其他方法影响程序集绑定,以便使用使用不同密钥签名的程序集?如果存在,绕过该算法需要付出多少努力?

+0

不可能,但...努力?少于1分钟 - 禁用验证和延迟标志。 –

不,不可能重定向到不同的Assembly版本。不同的名称或强名称是not possible with assembly redirects

有可能规避这一点。一个技术性但简单的方法是简单地反汇编所有强有名的程序集并重新编译它们,而不用强名称。使用ildasm和ilasm或使用PE编辑器很容易。见herehere。当你反编译它时,为什么不去除任何许可证检查?除非能够防止反编译,否则混淆器不会有帮助。已经提到的另一种方式可能是使用公钥延迟签署新程序集并关闭程序集验证。或者由于GAC中的装配仅在安装期间得到验证,您可以使用replace an existing assembly in the GAC。最后两个确实需要管理权限。