C++ 知识产权保护/反逆向技术

6

我在这里看到了很多有关版权保护的讨论。但我更感兴趣的是反向保护和知识产权保护。

有一些解决方案,比如Safenet和HASP声称可以加密二进制文件,但如果使用有效密钥,这些方案是否能够防止反向工程?

有哪些策略可以用来混淆代码并使反向工程变得困难?是否有任何商业实现方案呢?

我知道大多数保护方案都可能被破解,但目标是延迟对软件进行反向工程的能力,并使其更加明显,如果另一个公司试图实施这些方法。


我假设“reversing”是指“逆向工程”(也称为反编译)? - StaxMan
7个回答

7
有一些解决方案,例如Safenet和HASP声称可以加密二进制文件,但是如果使用有效的密钥,这些方案是否能够防止反向工程?
不行。专业的逆向工程师可以解密它,因为操作系统必须能够解密它才能运行它。
就我个人而言,我不会担心。诚然,我不了解你的业务,但在我看来,相对于Java或.NET等语言,逆向工程C++相对困难。这将足以保护除最有决心的攻击者之外的所有人。
然而,一个有决心的攻击者总是能够克服你实施的任何措施,因为在某个时刻,它必须被转换为一堆CPU指令并执行。你无法阻止他们阅读它。
但是对于一个非平凡的程序来说,这需要花费大量的精力。在我看来,更有可能的是,有人可能会在看到你的程序(甚至只是从你的营销材料中)后创建竞争对手。这可能比尝试逆向工程你的程序更容易,并避免了任何潜在的法律问题。这不是你可以(或应该)防止的。

6

我曾经与一些人共事过,如果你雇用他们,他们会彻底混淆源代码!


3
混淆源代码不能很大程度上增加反向工程的难度,因为编译器通常会优化大部分等效的混淆操作。 - Eduard - Gabriel Munteanu
@Eduard - Gabriel Munteanu,我曾经合作的人甚至可以让最好的编译器都感到困惑! - KM.
1
+1:非常有趣。我见过的代码,我发誓,是故意混淆和有错误的。 - S.Lott

1

你需要设定一个保护代码的限度。看看市场和你的解决方案收费情况。你永远无法百分之百地保护你的产品,因此你应该评估哪种方法会给你最好的保护。在大多数情况下,一个简单的许可证密钥和没有混淆就足够了。

延迟反向工程只会“延迟”不可避免的结果。你需要关注的是阻止初次侵犯版权/知识产权的尝试。在关于页面上放置一个良好的法律条款和条件声明,或者加粗的版权声明警告任何试图反向工程代码的行为将导致一根十字镐穿过脊柱……

如果有可能他们会被起诉,大多数人会放弃尝试窃取东西。

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



1

在编程中,要完全混淆代码以至于无法逆向工程化几乎是不可能的。

如果这是可能的话,那么电脑病毒将会变得绝对不可阻挡,没有人能够知道它们是如何运作和执行的。直到我们能够运行加密代码,加密才会在某个点被解密并且变得“可读”(也就是说,可以读懂机器码),然后才能由CPU执行。

现在考虑到这一点,你可以安全地假设廉价的保护措施可以抵御普通的黑客攻击。所谓廉价,并不是指价格,而是指保护措施本身的效果不够好。优秀的保护措施可以抵御高级的黑客攻击,但终极保护并不存在。

通常来说,你的解决方案越商业化,攻击向量就越“众所周知”。

此外,请注意像加密应用程序这样的东西意味着额外的开销和用户的不便。USB加密锁也会让用户感到困扰,因为他们必须随身携带它,并且替换成本也很高。因此,你必须在保护措施的效果和用户体验之间进行权衡。


大多数情况下,您的所有客户都必须承担您的保护方法所带来的障碍。但是,如果我们谈论多人游戏,大多数非作弊玩家确实欣赏反作弊保护(对于这种保护,每一位都很重要)。 - No-Bugs Hare

1

这个问题主要有两个方面:

  1. 混淆 - 通常意味着重命名和剥离符号。一些人也可能通过等效代码转换重新排列代码。可执行文件打包器通常还会采用反调试逻辑。
  2. 较低级别的保护 - 这意味着内核或硬件级别的编程。在像Sony、nProtect、CD/DVD复制保护等rootkit中看到。

1

当然,你可以采取各种巧妙的手段来试图打败/延迟调试器和逆向工程。正如其他人所说,你不会阻止一个决心坚定的攻击者……一旦你的应用程序被黑客攻破,你可以预期它将免费在线上提供。

你陈述了你所期望的保护方案的两个目标:

1)使逆向工程变得困难。 2)让某人明目张胆地抄袭你。

对于第一点,任何混淆器/调试检测器等方案都会产生至少一些影响。但是,老实说,越来越少的工程师曾经深入研究过编译器输出,这意味着对于许多人来说,编译后的C/C++代码就是混淆代码。

对于第二点,除非你有一个特定且受法律保护的算法/流程需要保护,否则一旦应用程序被逆向工程,你就完蛋了。如果它受到法律保护,那么你已经发布了受保护的细节,那么你想获得什么?

总的来说,我认为这是一种“赢”的困难方式,你最好在“业务方面”解决这个问题——也就是说,让你的应用程序成为一个订阅服务,或者收取维护/支持费用……但具体情况显然取决于你的情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接