代码之家  ›  专栏  ›  技术社区  ›  Thunder

是否可以阻止.NET MSIL DLL的反编译?

  •  4
  • Thunder  · 技术社区  · 15 年前

    几乎所有.NET程序集都可以使用 Reflection 。这意味着所有.NET产品都是开源的,因为其他开发人员可以很容易地使用代码。 难道没有一种方法可以让我们加密代码(至少对于某些安全逻辑而言),使其不容易被破解或误用吗?

    编辑

    旧问题 winforms.net真的等于开源吗? 编辑时考虑了有关正确使用该词的评论 开放源代码

    6 回复  |  直到 10 年前
        1
  •  9
  •   Aiden Bell    15 年前

    所有代码都可以进行反向工程、复制、克隆、重用、重新链接和其他操作。什么 开放源代码 意思是它是 法律意义上的自由 不受限制,所以人们可以 学习 从代码中。这也意味着 技术可以发展 可以创造一个更强大的长期技术经济,而不是短期的。阅读“大教堂和集市”以获得有偏见但相关的观点。

    我不知道有一种足够强大的代码保护方法,它不仅模糊度高,而且 隐晦式安全 . 仅凭你的问题,你就需要对你所问的主题有更多的了解。 阅读和研究 技术、逻辑和 可能地 问题意图的哲学性质。

    编辑:我坚持我的原则,即使“开源”一词的使用被取消了。

        2
  •  10
  •   Brad Larson    10 年前

    有一些工具可以加密.NET程序集,防止使用Reflector和类似工具进行反编译。他们还执行一些相关的服务,如模糊处理、嵌入式资源保护等。我知道的两个服务:

    RemoteSoft Salamander Suite
    XHEO DeployLX

        3
  •  6
  •   Community Mohan Dere    8 年前

    没有办法让我们 加密代码(至少对某些 安全逻辑)。 容易破裂或误用。

    其他人已经接触过代码模糊器,但是问问你自己你真正想要完成的是什么:

    • 你想让你的代码更“安全”吗?通过默默无闻实现安全不仅是一种相对较弱的策略,而且无论如何,您不应该将敏感数据放入源代码中!将密码、连接字符串等从代码中移到配置文件中。

      那么,只要没有人可以访问您的物理机器,应用程序就可能是安全的。你可以假设如果攻击者拥有物理机器,所有的希望都会消失。

    • 你想保护专有算法吗?如果你不想花大把的钱去获得专利,那么最好的尝试和真正的策略就是通过你控制的服务器上的Web服务来公开你的API。这个应用程序调用了Web服务——这意味着性能会下降,并且你依赖于你的用户有一个Internet连接,但至少你的代码是绝对安全的。

    • 您是否试图阻止用户盗版软件?有 lots of posts 关于授权密钥系统。

        4
  •  1
  •   Andrew Hare    15 年前

    任何东西都可以逆向工程。虽然.NET程序集可以更容易地反编译,但是 many obfuscators 使代码更难理解。

    没有任何好的方法来加密您发送给客户的代码。在某种程度上,代码必须被解密才能运行,这意味着客户机必须能够做到这一点。如果客户机有能力解密代码,那么其他任何有权访问该机器的人也有能力解密代码。

    此问题不是.NET程序集独有的-任何应用程序都容易反编译。如果您主要关心原始源的安全性,那么基于Web的应用程序(如网站或Web服务)可能会更好,因为您可以将程序集与外部世界隔离开来。

        5
  •  0
  •   Earlz    15 年前

    默默无闻永远帮不了你…

    被反编译的代码可能有,也可能没有有用的变量/类名,它肯定不会有注释,当然版权仍然属于您。

    所以从法律上讲,你无论如何都不能使用反编译的程序(甚至是反编译的程序),我相信有一些选项(如果默认情况下不启用)可以用于基本的模糊性,比如使用var1…9999作为变量名和类名。

        6
  •  0
  •   particle    15 年前

    如果需要OpenSource,请尝试 mono 框架。虽然它的一部分还没有被Microsoft作为公共语言基础结构CLI的一部分发布。如果回答“否”,则不能在任何地方使用或重用/发布整体的一部分。你也可以看看 rotor 共享源公共语言基础结构2.0,它是开放源代码,由Microsoft管理,但它不包含窗口形式的命名空间,仅包含cli。它仅用于学习和研究目的。微软也在MPL下发布IT代码 codeplex .请仔细阅读许可证,即使对于开源,GPL和LGPL也有区别。为了学习目的,我认为逆向工程是可以的,以防出现一些问题,而这些问题不在您的代码中,您可能希望对其进行调试。为此,微软允许直接从其符号服务器使用IT框架源代码。您可以将Visual Studio配置为下载任何.NET框架的源代码和符号:t,并将其调试为框架代码中发生的情况和方式。这是一篇很好的文章,如何在 shawn burke blog .