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