阻止某人加载我的托管程序集的最简单方法



.Net安全noob在这里。。。防止其他人加载我的程序集的最简单方法是什么?

背景:虽然我真的在寻找"足够好"的保护(有足够的时间/金钱/智慧,有人可以成功破解、破解和攻击),但这似乎已经是一个解决了的问题,我只是错过了它。

以下是我所知道的:

  1. 虽然强命名可以用作一层安全性,但它不是根据微软的说法文档(请参阅警告:不要依赖强名称安全它们只提供唯一的身份。)

    在这一点上,我遇到过无法装载第三方集会(我想是Aspose),因为他们这样做了没有在他们的集会上签名,不管我所有人都是。所以我不得不ildasm他们的程序集,用我们自己的snk签名,然后ilasm返回)以便使用他们的图书馆所以,强命名似乎不是良好的安全机制。但是。。。一个简单的检查怎么样,在代码中,验证调用程序集是否使用公钥令牌?这足够有效吗?

  2. 如果我尝试的内容不应该使用强命名正在实现验证码数字签名检查在dll上路由越好(似乎wintrust.dll会有所帮助用这个)?

    我已经浏览了几家供应商的模糊处理工具许多都有许可证和各种各样的东西。我很可能使用一点模糊来隐藏一些敏感部分,但是我仍然希望有一个机制来防止某人加载我的敏感库,而不必使用字符串和代码加密等功能,通常随性能(和其他)成本。

那么回到问题上来,防止有人加载我的程序集的最简单方法是什么?

事实上,您无法100%保证您的程序集不会被下载和以错误的方式使用。但有些措施可以帮助你:

  1. 对安装包(msi)进行签名。您需要SSL证明书在安装过程中,用户将看到下载文件的发布者。如果您的安装包被修改,签名将被破坏并且用户在安装时将看到该应用程序来自未知出版商或您以外的其他出版商
  2. 通过强程序集命名,可以防止库替换为另一个"坏"库。让我们考虑下一个场景:您将带有库A的应用程序部署到某个服务器上,或者用户将您的应用程序安装到他/她的计算机上。如果没有强名称,库a或任何其他库都可以被某些代码替换或修改到另一个版本上。例如,这个新版本可以将所有用户密码发送到某个地方,或者执行其他恶意操作。如果一个库在下载时更改了.Net,它将引发强名称验证异常。所以,你的应用程序将被破坏。恶意代码应该重新编译所有应用程序库,以便使应用程序正常工作。这更难
  3. 混淆也是一件非常重要的事情,它可以非常困难甚至不可能理解程序集内部发生的事情(代码重命名、字符串加密等)
  4. 如果您有一些非常关键的智能代码,最好将其重写为本机(C/C++)代码
  5. 如果你的应用程序是移动或桌面应用程序,并且它发出后端请求,你可以将重要代码移动到服务器端

显而易见,但可能没有那么大帮助:最简单的方法是删除程序集。

我认为你想要的是防止人们对你的组装进行逆向工程,对吧?像JustDecompiler这样的工具可以很容易地获取汇编代码。为了混淆你的代码,你总是可以求助于一些付费产品(Eazfuscator)或一些开源产品(Obfuscar或ConfuserEx)。

一个选项(可能可行,也可能不可行)是不将程序集交给它们。如果您可以使您的应用程序基于web(如软件即服务),那么(使用适当安全的服务器)您的客户端将无法访问程序集。

最新更新