3

我有一个关于保护我的可可应用免受盗版的好方法的问题。我知道这是不可能的!

因此,在我的应用程序中,我有一个isRegistered()每次用户启动应用程序时都会运行的方法。这是从applicationDidFinishLaunching:App 委托调用的。所以如果这个方法返回true,应用程序会继续执行代码,否则会出现一个Alert,说应用程序没有注册,还有xx天可以购买许可证。

这是个好办法吗?因为,我没有这方面的经验。

预先感谢您的帮助!


解决了

首先感谢大家!我认为同样的事情:任何复制保护都可以阻止盗版。我只是想解决这个小错误,即使我知道有人会再次破解我的应用程序。然而,这是真的——最好的办法是改进应用程序,而不是浪费时间尝试使盗版保护更有效。

4

4 回答 4

7

您描述的解决方案几乎不需要任何专业知识即可破解。isRegistered()将函数更改为始终返回 true是微不足道的。因此,规避您的保护所需的努力只是您为支持用户购买注册码而实施所有基础设施所必须付出的努力的一小部分。

换句话说,您没有获得良好的投资回报。关于实施盗版保护(而不是改进您的产品)的投资回报是否足够好(因为您将自己与那些无事可做的人比证明他们比您更聪明)存在一些争论。

纠正投资回报平衡的一种好方法是使用预先存在的代码,例如AquaticPrime。那样的话,至少你不会花那么多时间去追逐彩虹:)

于 2009-08-05T11:27:31.727 回答
4

我不从事收缩包装软件业务,但我的朋友是。他在销售他的产品 10 年后观察到,创建过于复杂的保护是没有意义的,因为总是有人会破解它。你是孤独的,世界是无限的。投入时间/金钱来改进您的软件比从事版权保护工作要好。

还要记住,大约 10% 的人永远不会偷窃,而其他 10% 的人会一直尝试。只要确保这 80% 的人能够在没有任何其他市长障碍的情况下购买您的产品。比你可以忽略那些讨厌的 10%。实际上这是来自 Joel Spolsky IHMO 的引述。

因此,从技术角度来看,您的解决方案似乎完全没问题,只需坚持下去。

于 2009-08-05T11:02:41.327 回答
2

几乎不值得实施您自己的反盗版系统,因为您几乎总是会花很多精力在很容易被破解的东西上。依赖一个共享的实现——在这种情况下是一个像AquaticPrime这样的框架( macsb邮件列表中的很多人都推荐这个)——并且你实际上是依赖于足够好的框架来保护你自己的应用程序以及所有其他应用程序.

Leopard 和更高版本上的代码签名框架允许您对代码进行签名,这样如果它被篡改,它将拒绝运行 - 请参阅手册页kill中的选项文档。

于 2009-08-05T17:05:35.517 回答
0

这是一个很好的问题。阅读了答案后,我认为 BitDrink 真正得到的是:我们知道一个isRegistered()函数非常容易破解。isRegistered在了解任何保护系统最终都会被黑客入侵的情况下,编写一个比返回布尔值的函数更难被黑客入侵的函数有哪些策略?

从根本上说,任何版权保护系统最终都会有这样的东西:

if (program is registered)
    let the program continue
else
    nagging message
end

任何拥有 GDB 副本的黑客最终都会找到第一行并编写一个小补丁将其删除。大多数复制保护系统通过隐蔽性来关注安全性,即难以找到该行。您还可以通过对二进制文件进行签名并检查签名来使该系统更加健壮,但您只需为黑客添加另一个环即可跳过。他们最终会找到您的公钥并将其更改为他们自己的公钥,以便他们可以替换您的签名。但是,我相信这会大大减慢他们的速度。Leopard 提供了一个代码签名实用程序,但我不知道它是否可以用来防止错误签名的应用程序运行。

这个问题没有完美的解决方案,但有两点需要记住:

  1. 您的注册系统被破坏。绝对没有办法解决这个问题。
  2. 您的注册系统是用户和您的程序之间的障碍。您应该针对(希望是大多数)合法用户进行优化,并使其尽可能简单。
于 2009-08-05T15:59:00.377 回答