20

可能的重复:
您如何保护您的软件免受非法分发?
防止软件复制的最佳实践

假设情况:

假设我从头开始构建了一个软件产品,它做了很多很棒的事情。唯一的问题是,一旦有人看过代码,他们就会很容易理解它,并且他们可以很容易地自己构建它。

现在,问题是我 100% 从头开始​​构建代码并混合使用 API 调用。没有其他人参与代码的开发。

如果我想卖这个产品,有什么保证比我聪明得多的人会对整个事情进行逆向工程并提出更好的产品?

现在我正在考虑分割整个代码。添加大量冗余代码和大量注释。

是否有任何加密软件代码的软件,这将使调试、故障排除和理解代码的工作原理几乎不可能?还照常运行?让开发者高枕无忧?

4

13 回答 13

27

程序中很少有东西是真正新颖的。几乎所有您可能放入代码中的东西,其他人都可以自己发明。通常比他们通过阅读您的代码来学习它更容易。阅读代码比编写代码更难,而且大多数程序员并不喜欢这样做。

因此,他们更有可能会看到您的应用并认为“我可以做到”,然后“太酷了,我要阅读该代码然后复制它!”。即使他们理解了,你仍然拥有版权,你仍然首先进入市场。

我建议你忘记它。

于 2010-03-03T00:54:07.510 回答
6

一旦有人看了一下代码,他们就会很容易理解它,并且他们可以很容易地自己构建它。

所以不要给任何人源代码。

如果我想卖这个产品,有什么保证比我聪明得多的人会对整个事情进行逆向工程并提出更好的产品?

(a) 所以现在开始销售它并占领市场。逆向工程需要时间,在此期间您正在捕捉市场和“思想份额”。(b) 在您的许可协议中加入禁止逆向工程的条款。(c) 确保获得产品的每个人都签署协议。

现在我正在考虑分割整个代码。添加大量冗余代码和大量注释。

仅当您要分发源代码时,这才有意义。在这种情况下,甚至没有人需要进行逆向工程。他们有你的源代码。不要给他们。

有没有什么软件...

有很多软件声称可以完成这项工作。但是,它是针对业务问题的技术解决方案。所有软件都可以进行逆向工程,因为在某些时候,它都必须被解密和去混淆到 CPU 可以理解的程度。在这一点上,它基本上是明文。因此,从形式上讲,没有任何技术解决方案是可能的(缺少在防篡改 HSM 中执行的代码之类的东西)。

我还要补充一点,您可以使用另一种业务机制来防止业务损失,这就是全部内容:价格。将价格定得太高以致被许可人会重视其副本而不允许对其进行检查,或将价格定得太低以致逆向工程在成本上不可行;或免费提供并通过支持合同赚钱。

于 2010-03-03T01:12:17.260 回答
4

一旦你真正拥有编写这样一个代码库的知识和经验,你就会清楚混淆是为了阻止偶然的 IP 侵权。

想知道你的代码的人会知道你的代码。

如果它成为金钱损失的问题,法院是您的保护。

这就是它的工作原理。

于 2010-03-03T00:57:08.710 回答
3

总有人能够理解和编写您的代码。哎呀,如果你有 0 方式获取代码,即使只是使用系统也足以让某人能够复制该过程。

例:我拿一壶水倒进杯子里,背对着另一个人。这个人知道水和重力在使物体落入其他容器方面非常出色,因此他们可以制定一个举起水壶的过程,让重力(API 调用)对他们有利。他们可能不知道您在前臂中使用的确切角度以及您使用的任何超级偷偷摸摸的持杯技术,但他们可以复制相同的过程并随着时间的推移对其进行改进。

tl; dr:您无法保护代码。

于 2010-03-03T00:54:17.137 回答
3

要做的事情是在竞争对手对你当前的东西进行逆向工程的同时,发明更美妙的东西。它被称为通过创新竞争。

于 2010-03-03T00:58:31.450 回答
3

我不是律师

如果您真的担心它,那么您愿意在上面投资,不要保护您的代码(除了混淆或加密等合理的东西),而是为您的想法和您的艺术申请专利。然后,如果有人确实接受了它,对其进行逆向工程并根据您的流程制定更好的流程,那么您就有合法的理由来获取您的钱。

您必须做很多事情,包括证明他们采纳了您的想法(这并不容易),但如果这是解决世界饥饿和所有人文问题的方法,那么它就是要做的事情。

现在对于缺点,我猜,你的方法可能是 90% 正确:

  1. 由于各种原因不能申请专利(我对已经获得专利的想法的数量感到惊讶,以及识别原创艺术是多么困难)
  2. 不是新的,也不是独特的(即已经有它的艺术)
  3. 不值得申请专利,因为费用远远超过收益

知识产权律师可以肯定地告诉你,而且咨询的费用并不多。总体而言,与他们协商会比花费大量时间隐藏代码更便宜。

祝你好运。

于 2010-03-03T01:01:59.583 回答
2

甚至不要打扰。如果您的代码真的“做了很棒的事情”,请确保它会被黑客入侵。只是出于好奇。

于 2010-03-03T00:54:14.783 回答
2

没有 100% 的方法可以保护您的代码免受逆向工程的影响。我们在说什么语言?如果这是 C/C++,那么很难进行逆向工程,更多的是你可以从调试信息等中删除它。但如果这是例如 Java,那么即使你混淆了代码,也有一些非常酷的工具(比如JAD)无论如何,这将揭示你的大部分工作。

尽管如此,我认为你应该尝试改变你的态度。大公司为简单的解决方案付出了很多钱,现在似乎服务是最重要的事情,而不是软件(因此基于开放软件的公司取得了成功)。所以,如果你有一个很棒的软件,不要害怕有人可能会偷走它,而是想想如何把它卖得好。

于 2010-03-03T00:57:49.813 回答
2

是否有任何加密软件代码的软件,这将使调试、故障排除和理解代码的工作原理几乎不可能?还照常运行?让开发者高枕无忧?

这是完全错误的心态IMO。如果你被公共汽车撞了怎么办?你的公司破产了?您的所有数据都在火灾中被毁?对于您的每一位客户,他们对您的软件的投资价值都会下降,并最终达到零,因为没有您,软件将无法进一步开发或排除故障。我已经看到这么多钱被这样浪费了,我认为这是一种可怕的商业模式。

我靠自己制作软件谋生,所以我知道靠软件谋生的艰辛。尽管如此,混淆不能成为当今的方式。对您的客户实施严格的许可协议,吓唬他们,让他们甚至不会考虑重新分发软件,而是让它保持开放

于 2010-03-03T01:04:12.267 回答
0

这是徒劳的。总有人比你聪明,因此他们将能够对你的混淆进行逆向工程。

于 2010-03-03T00:53:32.380 回答
0

通常,聪明到可以破解你的代码并以有意义的方式使用它的人足够聪明,可以自己完成,并且可能认为他们可以比你做得更好,所以他们不会费心窃取你的东西。

不要担心那些可以破解您的代码但不能有意义地使用它的人。如果你做得很好,这只会加强你所做工作的质量(想想所有蹩脚的触摸屏手机模仿者)。

于 2010-03-03T01:00:15.387 回答
0

他们将对您的代码进行逆向工程。没有什么能阻止他们。你唯一能做的就是让它变得更难。这包括混淆继承“开放”的代码(例如 PHP 和 Javascript),一直到用大量的自我修改乱扔代码。

于 2010-03-03T01:04:53.247 回答
0

我认为,在很多方面,让软件变得有价值的东西不是它提供的疯狂的技术进步,而是我们认为可能认为是软件本身的第三要素。就像你会在那里支持它的事实一样。或者它是作为 Web 服务提供的,您将在那里确保服务器正在运行。或者它是一个社区,你将在那里主持和建立社区。

虽然您实际上可能在销售代码,但您的代码所具有的价值并不是代码本身所固有的,而是源自围绕您的代码的功能和生态系统。

于 2010-03-03T03:10:34.603 回答