阻止某人加载托管程序集的最简单方法是什么?

时间:2017-01-08 23:44:09

标签: obfuscation strongname .net-security strong-named-key

.Net security noob here ...防止其他人加载我的程序集的最简单方法是什么?

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

以下是我认为的事情:

  1. 虽然强命名可以用作安全层,但事实并非如此 根据{{​​3}}(见警告:不要依赖强名称) 安全。它们只提供独特的身份。)

    在那个^注意我遇到了我无法做到的情况 加载第三方程序集(Aspose我认为它是)因为他们做了 没有签署他们的集会,但我的全部都是。所以我必须这样做 ildasm他们的集会,用我们自己的snk签名,然后ilasm回来) 为了使用他们的图书馆。 因此,强大的命名似乎不是一个 对我来说是一个很好的安全机制。 HOWEVER ......简单的检查怎么样, 在代码中,验证调用程序集是否与my签名 公钥令牌?这有效吗?

  2. 如果强烈命名不应该用于我正在尝试的内容 完成,正在实施Authenticode数字签名检查 在DLL上路线越好(似乎wintrust.dll可以帮助 有了这个)?

    我一直在经历几家供应商的混淆工具 许多人都带有许可证和各种东西。我很可能 使用一点混淆隐藏一些敏感部分, 但是我仍然希望有一种预防机制 有人从加载我的敏感库,而不必使用 通常附带的字符串和代码加密等功能 绩效(和其他)成本。

  3. 回到问题,阻止某人加载我的程序集的最简单的方法是什么?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我认为你想要的是阻止人们对你的装配进行逆向工程,对吧?像JustDecompiler这样的工具可以轻松获得汇编代码。 要对代码进行模糊处理,您可以随时使用某些付费产品(Eazfuscator)或某些开源代码(ObfuscarConfuserEx)。

答案 3 :(得分:1)

一种选择(可能或不可行)是不给它们组装。如果您可以基于Web(例如Software as a Service)创建应用程序,那么(使用适当安全的服务器)您的客户端将无法访问程序集。