【问题标题】:Practices for hiding the executable code of compiled applications隐藏已编译应用程序的可执行代码的做法
【发布时间】:2011-01-08 22:09:22
【问题描述】:

对 .net 程序集进行反编译和逆向工程是一种标准做法。

我想发布一些将添加到现有应用程序的插件程序集,但我不希望它们被其他人使用。

有哪些方法可以隐藏这些程序集的来源?

【问题讨论】:

    标签: c# obfuscation decompiling


    【解决方案1】:

    这是软件;世事皆可能。您可以加密您的二进制文件,然后在运行时将它们全部或部分解密到您的应用程序中。这不是万无一失的,但要由你决定你想变得多么严厉。

    【讨论】:

      【解决方案2】:

      您可以使用obfuscator tool,这会有所帮助,但逆向工程仍然很有可能。

      您的用户的计算机需要知道它需要做什么,因此您必须告诉它。计算机的所有者对其拥有完全的控制权,因此他可以知道您告诉计算机做什么,并且他可以告诉它做其他事情。

      【讨论】:

        【解决方案3】:

        除非您控制目标硬件,否则理论上不可能实现 100% 的保护。如果 CPU 能够执行它,只要有足够的时间和知识,人类也可以阅读它。这甚至不限于 C#(尽管它通常更容易在托管语言中执行)。您可以使用 Dotfuscator 或 XenoCode 之类的混淆器来使反编译代码更难理解。如果你真的很担心,你应该转向基于服务器的应用程序。

        【讨论】:

        • 在某种程度上,基于服务器的应用程序也是可反向工程的(如果这是一个词的话)。如果有足够的时间,您可以研究它的行为并查看每个可能输入的所有可能答案,最终您将能够创建另一个具有相同可观察行为的服务器端应用程序。
        【解决方案4】:

        您可以编写一个将host CLR using the CLR COM api 的应用程序,这样您就可以首先在本机代码级别加载和解码程序集。如果您使用多个anti-reverse engeneering techniques 来加强本机加载程序,您可以获得足够好的安全性。

        【讨论】:

          【解决方案5】:

          有一种方法可以隐藏数据,称为steganographyCodeProject 上涵盖了许多文章的作者,他为此编写了一个框架。我认为文章的标题是从 1 到 12 的系列中的“隐写术”。这是作者所属的website

          还有一个叫'Phoenix Protector'的混淆器,找到here,可以对.NET代码进行混淆,我个人没试过,但听起来不错。

          希望这会有所帮助, 最好的祝福, 汤姆。

          【讨论】:

            【解决方案6】:

            至少,您应该混淆您的 dll,以防止黑客和竞争对手查看和理解您的代码。混淆不是 100% 万无一失的,但它在他们的道路上提出了一个足够大的障碍。

            Crypto Obfuscator 等一些混淆器具有将所有 dll 嵌入到主 exe 中的功能,因此您的 dll 不会显式可见,并且可以在磁盘上使用 Reflector 等逆向工程工具打开。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-10-23
              • 1970-01-01
              • 2014-10-20
              • 1970-01-01
              • 1970-01-01
              • 2014-11-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多