我们即将在应用程序的其他组件引用的强名称 .NET 程序集中实现许可算法。当然,我们希望将某人交换包含许可证检查的程序集并由此解锁应用程序功能的风险降至最低。
据我所知,您可以将程序集重定向到不同的版本(通过发布者策略或在应用程序配置文件中)。但是我还没有找到一种方法来重定向到具有另一个名称或使用不同密钥签名的程序集。
是否有其他方法可以影响程序集绑定,以便使用使用不同密钥签名的程序集?如果有,绕过这个算法需要多高的努力?
我们即将在应用程序的其他组件引用的强名称 .NET 程序集中实现许可算法。当然,我们希望将某人交换包含许可证检查的程序集并由此解锁应用程序功能的风险降至最低。
据我所知,您可以将程序集重定向到不同的版本(通过发布者策略或在应用程序配置文件中)。但是我还没有找到一种方法来重定向到具有另一个名称或使用不同密钥签名的程序集。
是否有其他方法可以影响程序集绑定,以便使用使用不同密钥签名的程序集?如果有,绕过这个算法需要多高的努力?
不,不可能重定向到不同的程序集版本。程序集重定向不能使用不同的名称或强名称。
有可能规避这一点。一种技术但简单的方法是简单地反汇编所有强命名程序集并在没有强名称的情况下重新编译它们。通过使用 ildasm 和 ilasm 或使用 PE 编辑器,这很容易。见这里和这里。当您反编译它时,为什么不同时删除任何许可证检查?除非能够防止反编译,否则混淆器将无济于事。已经提到的另一种方法可能是使用公钥延迟签署新程序集并关闭程序集验证。或者由于 GAC 中的程序集仅在安装期间进行验证,您可以替换 GAC 中的现有程序集。最后两个确实需要管理权限。