【问题标题】:C++ Intellectual Property Protection/Anti-ReversingC++ 知识产权保护/反逆转
【发布时间】:2010-10-29 02:39:03
【问题描述】:

我在这里看到了很多关于复制保护的讨论。我对防逆转和知识产权保护更感兴趣。

Safenet 和 HASP 等解决方案声称可以加密二进制文件,但这些解决方案在与有效密钥一起使用时是否受到保护以防反转?

可以使用哪些策略来混淆代码并摆脱逆向者?有没有像样的商业实现?

我知道大多数保护方案都可以被破解,但这里的目标是延迟有问题的软件逆转的能力,如果另一家公司试图实施这些方法,它会变得更加明目张胆。

【问题讨论】:

  • 我假设“逆向”的意思是“逆向工程”(也就是反编译)?

标签: c++ obfuscation copy-protection


【解决方案1】:

Safenet 和 HASP 等解决方案声称可以加密二进制文件,但这些解决方案在与有效密钥一起使用时是否受到保护以防反转?

没有。专门的逆向工程师可以解密它,因为操作系统必须能够解密它才能运行它。

就个人而言,我不会担心。诚然,我对您的业务一无所知,但在我看来,逆向工程 C++ 与 Java 或 .NET 等语言相比相对困难。这将足以阻止除最坚定的攻击者之外的所有攻击者。

然而,一个坚定的攻击者总是能够绕过你实现的任何东西,因为在某些时候它必须变成一堆 CPU 指令并执行。你不能阻止他们阅读。

但对于一个不平凡的程序来说,这是一个很多的努力。在我看来,更有可能有人在看到你的程序运行后(或者甚至只是从你的营销材料中)创建了一个竞争对手。这可能比尝试逆向工程更容易,并且避免了任何潜在的法律问题。这不是您可以(或应该)阻止的事情。

【讨论】:

    【解决方案2】:

    雇佣一些我多年来共事过的人,他们会完全混淆源代码!

    【讨论】:

    • 混淆源代码对逆向工程的难度没有太大帮助。这是因为编译器可能会优化大多数功能等效的混淆。
    • @Eduard - Gabriel Munteanu,与我共事的人甚至可以混淆最好的编译器!
    • +1:非常有趣。我看到过代码——我发誓——被故意混淆和调试。
    【解决方案3】:
    【解决方案4】:

    这有两个主要方面:

    1. 混淆 - 通常意味着重命名和剥离符号。有些还可能通过等效的代码转换重新排列代码。可执行打包程序通常还采用反调试逻辑。
    2. 低级保护 - 这意味着内核或硬件级编程。可见于 Sony、nProtect、CD/DVD 复制保护等 rootkit。

    【讨论】:

      【解决方案5】:

      几乎不可能以完全不可能进行逆向工程的方式真正混淆代码。

      如果有可能,那么计算机病毒将是绝对不可阻挡的,没有人能够知道它们的工作原理和作用。在我们能够运行加密代码之前,加密在某个时刻被解密并“可读”(例如,可以读取机器代码的人),然后它才能被 cpu 执行。

      现在考虑到这一点,您可以放心地假设廉价的保护措施可以抵御廉价的黑客。像“不好”一样阅读便宜,它与您支付的价格完全无关。强大的保护将抵御伟大的黑客,但终极保护并不存在。

      通常,您的解决方案越商业化,攻击向量就越“知名”。

      另外,请注意加密应用程序等内容会带来额外开销并会惹恼用户。 USB 加密狗也让用户烦恼,因为他们必须随身携带,而且要花一大笔钱来更换。因此,在您很高兴自己受到保护免受少数黑客攻击而您的所有客户将不得不承担您的保护方法所承受的障碍之间,这也成为一种权衡。

      【讨论】:

      • “您的所有客户都必须承担您的保护方法所承受的障碍”,大多数情况下 - 是的,但如果我们谈论的是多人游戏 - 大多数非作弊玩家都会这样做欣赏反作弊保护(对于这种保护,每一点都很重要)
      【解决方案6】:

      当然,您可以竭尽全力尝试击败/延迟调试器和逆向工程。正如其他人所说,你不会阻止一个坚定的攻击者,期间......一旦你的应用被黑客入侵,你可以期望它可以免费在线使用。

      您陈述了您想要的保护计划的两个目标:

      1) 使逆向工程变得困难。 2) 明目张胆地有人在敲诈你。

      对于#1,任何混淆器/调试检测器/等方案都会产生至少一些影响。然而,坦率地说,研究过编译器输出的工程师比例正在减少,这意味着编译后的 C/C++ 代码对许多人来说是混淆代码。

      对于 #2,除非您尝试保护特定且受法律保护的算法/流程,否则一旦应用被逆向工程,您就会陷入困境。如果它受到法律保护,那么您已经发布了受保护的详细信息,那么您想获得什么?

      总的来说,我认为这是一种“取胜”的艰难方式,您最好在“业务方面”解决这个问题,即订阅您的应用,或收取维护/支持费用。 ..但具体情况显然取决于您的情况。

      【讨论】:

        【解决方案7】:

        您需要设置一个限制,以保护您的代码。查看市场以及您为解决方案收取的费用。您永远不会 100% 保护您的产品,因此您应该评估哪种方法可以为您提供最佳保护。在大多数情况下,一个简单的许可证密钥就足够了。

        延迟逆向工程只会“延迟”不可避免的事情。您需要关注的是阻止最初尝试违反版权/IP 的行为。 “关于”页面上的良好法律条款和条件通知,或粗体版权通知警告,任何对代码进行逆向工程的尝试都将导致通过脊柱的镐...

        如果他们有可能会受到法律诉讼,大多数人会放弃试图扯掉一些东西。

        我们使用 SafeNet,我们的客户将其视为“官方”保护。这本身就是一种很好的威慑。

        【讨论】:

          猜你喜欢
          • 2019-07-14
          • 2020-03-22
          • 2022-10-15
          • 2012-01-18
          • 1970-01-01
          • 2018-05-24
          • 1970-01-01
          • 2016-03-08
          • 1970-01-01
          相关资源
          最近更新 更多