【问题标题】:How to prevent loading recompiled .net dll of open source project如何防止加载开源项目重新编译的.net dll
【发布时间】:2018-06-11 08:08:36
【问题描述】:

我有项目并且正在实施许可。我决定使用开源库,因为我知道无论您为保护您的应用付出多少努力,它都可能以任何方式被黑客入侵。

我正在考虑破解它的方法,现在我发现基本上因为它是开源项目,所以应该很容易避免声明许可证。黑客需要下载开源库并简单地删除断言方法不验证任何内容的版本。

所以我的问题是有哪些选项可以防止加载重新编译的库。我想加载我在构建项目时使用的库。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    最简单的解决方案是使用您的私钥对已编译的 DLL 进行签名,然后针对已签名的 DLL 编译项目的其余部分。这将确保当有人用不同的(或没有签名)替换 DLL 时,应用程序将无法加载。除非您不想让其他人验证您的 DLL,否则您不需要 CA 的证书,您可以生成自己的公钥/私钥。

    此线程更详细地讨论了这个主题 (C#: why sign an assembly?) 和 this MSDN article 处理如何签署您的 DLL。

    【讨论】:

    • 显然会重新编译反汇编代码的人不会知道“跳过验证”工具......
    • @AlexeiLevenkov 甚至没有拆开。从 git 下载并编译。
    • 问题是如何防止攻击者抛出修改后的 DLL,这样他的代码就不会加载它而不是原始代码。 Windows 长期以来在数字签名 (msdn.microsoft.com/en-us/library/windows/desktop/…) 中为此内置了功能,对程序集进行签名只是在 .NET 世界中应用此技术。世界上大多数安全都依赖于公钥/私钥加密,所以我想说这种方法已经被证明是有效的,并且需要最少的努力。如果您想保护源代码不被阅读,可以使用不同的技术(混淆)。
    【解决方案2】:

    您可以遵循此策略。当您编译软件时,将 Dll 哈希存储在您的应用程序中(即使通过反编译,黑客也无法读取)。每次当您的软件在客户端计算机上运行时进行比较。如果文件哈希不匹配用户已经修改了文件。

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多