.Net动态授权加载

时间:2020-03-05 18:40:18  来源:igfitidea点击:

对于必须执行以下操作的系统,我们可以提出什么建议:

加载插件(并最终执行它们),但是有2种加载这些插件的方法:

  • 仅加载授权的插件(由软件所有者开发)
  • 加载所有插件

而且我们需要合理地确保授权插件是真实交易(未经修改)。但是,所有插件必须位于单独的程序集中。我一直在为插件使用强大的命名程序集,并将公钥存储在loader应用程序中,但是对我来说,无论如何,修改loader应用程序中的公钥似乎都很容易(如果用户愿意的话)加载程序应用程序的任何混淆。还有更安全的想法吗?

解决方案

回答

基本上,如果我们将代码放在其他人的计算机上,则不能绝对保证安全。

我们可以查看各种安全技巧,但最后,代码在其计算机上,因此不受控制。

如果最终用户加载未经授权的插件,我们将损失多少?

回答

How much do you stand to lose if the end user loads an unauthorised plugin?

诚然,这种情况不会经常发生,但是当/如果确实发生这种情况,我们会损失很多,尽管我知道我们不会百分百保证安全性,但我想让它成为阻碍人们放弃它的足够障碍。

使用具有全强名称的简单动态加载进行的烦人的事情是,即使插件已签名,加载器应用程序中只需进行简单的字符串文字更改即可加载任何其他程序集。

回答

我们可以扩大问题:"如何保护我的.net程序集免受逆向工程?"

答案是你做不到。对于那些还没有看到它的人,只需查找" reflector",然后在一些幼稚的exe上运行它。

(顺便说一句,只要我们没有随身携带的加密/解密硬件,这始终是无法使用的代码的答案),

混淆试图使逆向工程比开发更难(花费更多的钱),并且对于某些类型的算法,它会成功。

回答

在程序集上签名。

Strong-name signing, or strong-naming,
  gives a software component a globally
  unique identity that cannot be spoofed
  by someone else. Strong names are used
  to guarantee that component
  dependencies and configuration
  statements map to exactly the right
  component and component version.

http://msdn.microsoft.com/zh-CN/library/h4fa028b(VS.80).aspx