【问题标题】:(Why) should I use obfuscation?(为什么)我应该使用混淆?
【发布时间】:2010-09-07 02:36:46
【问题描述】:

在我看来,混淆是一种属于“默默无闻的安全”或“虚假的保护意识”阵营的想法。保护知识产权,有版权;为防止发现安全问题,正在修复这些问题。简而言之,我将其视为解决社会问题的技术解决方案。 Those almost never work.

但是,我似乎是我们开发团队中唯一有这种感觉的人,所以我要么错了,要么只需要令人信服的论据。我们的产品使用 .NET,一位开发人员建议使用 .NET Reactor(顺便提一下,was suggested in this SO thread as well)。

.NET Reactor 通过将任何纯 .NET 程序集(用 C#、VB.NET、Delphi.NET、J#、MSIL...编写)与本机机器代码混合,完全停止任何反编译。

所以,基本上,你一次性抛弃了字节码的所有优点?

工程对混淆有很好的好处吗?

【问题讨论】:

    标签: .net security obfuscation protection


    【解决方案1】:

    您出于工程原因询问,因此严格来说,这不是问题的答案。但我认为这是一个有效的澄清。

    正如您所说,混淆旨在解决社会问题。与技术问题不同,社会(或商业)问题很少有完整的解决方案。解决或最小化问题只有一定程度的成功。

    在这种情况下,混淆会提高有人反编译和窃取您的代码的障碍。它会阻止随意的攻击,并通过惯性降低您的知识产权被盗的可能性。打个令人厌烦的类比,防盗锁并不能防止您的汽车被盗,但它会降低被盗的可能性。

    当然,在可维护性、(可能)性能方面以及最重要的是在使用户更难准确提交错误报告方面存在成本。

    正如 GateKiller 所说,混淆不会阻止有决心的团队进行反编译,但是(这取决于您的产品)团队可能会在多大程度上攻击您?

    因此,这不是针对社会问题的技术解决方案,而是为复杂的社会结构增加影响的技术决策。

    【讨论】:

      【解决方案2】:

      如果一大群程序员真的想要获取您的源代码并且有时间、金钱和精力,那么他们就会成功。

      因此,混淆应该阻止那些没有时间、金钱或精力来获取您的消息来源的人,您可能会打电话给他们。

      【讨论】:

        【解决方案3】:

        如果您坚持纯托管代码混淆,您可以减少相当多的程序集大小,并且混淆的类/函数名称(折叠为单个字母)意味着更小的内存占用。这几乎总是可以忽略不计,但对某些移动/嵌入式设备(尽管主要在 java 中)确实有影响(并且已被使用)。

        【讨论】:

          【解决方案4】:

          一个潜在的工程优势是,在某些情况下,混淆可以创建更小的可执行文件或其他工件 - 例如。混淆 javascript 会导致文件更小(因为所有变量都被命名为“a”和“b”而不是“descriptiveNameOne”,并且所有的空格都被删除了,等等)。这会加快使用混淆 javascript 的网页的加载时间。显然,这在 .NET 世界中并不适用(同样多),但它是直接工程优势的一个例子。

          【讨论】:

            【解决方案5】:

            我发布了一个问题,它讨论了一些问题,可能会对您有所帮助: should-i-be-worried-about-obfuscating-my-net-code

            【讨论】:

              【解决方案6】:

              虽然与 .net 无关,但我会考虑在 Javascript 中进行混淆处理,并且可能还会考虑使用其他交互语言。 Javascript 从混淆中受益匪浅,因为它减少了所需的带宽以及解析器必须读取的标记。

              但是混淆编译后的字节码对我来说似乎并没有那么有用。我的意思是你会尝试和实现什么?我只能看到混淆在许可证检查代码中稍微有用,以避免它太容易被规避。

              【讨论】:

                【解决方案7】:

                正如您所指出的,使用混淆的主要原因是为了保护知识产权。对于企业而言,购买 .NET Reactor 之类的混淆产品通常比尝试合法地执行您的版权更具成本效益。

                混淆还可以提供其他更附带的好处,例如性能改进和程序集尺寸减小。这些将是您正在寻找的工程优势。

                【讨论】:

                  【解决方案8】:

                  使用加密来保护途中的信息。

                  在您的程序仍有信息时使用混淆来保护信息。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-04
                    • 2011-03-01
                    • 2021-04-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多