【问题标题】:Cocoa app - security issueCocoa 应用程序 - 安全问题
【发布时间】:2009-08-05 08:16:05
【问题描述】:

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

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

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

提前感谢您的帮助!


已解决

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

【问题讨论】:

  • 这篇文章让我想起了宋飞传的一集!但除此之外,这是一个很好的问题! :)
  • @BitDrink 在您的已解决部分,您是否真的打算说“任何复制保护都可以阻止盗版”?根据下面的对话,“没有复制保护可以阻止盗版”会更正确。

标签: objective-c cocoa delegates protection piracy


【解决方案1】:

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

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

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

【讨论】:

  • 你是对的!你所描述的是我的应用程序发生了什么!破解者已将 isRegistered() 调用替换为常量 TRUE 值! AquaticPrime 很好,但我不想使用框架!我可以做些什么来解决这个问题?不过,谢谢!
  • @BitDrink:你不能做太多。无论您的反盗版系统有多么复杂,最终都归结为一个决定:它是正版的还是盗版的。破解者将找到该点并将其替换为常量 true。您可以使用校验和,但校验和检查代码也是如此。
  • 如果我不使用 isRegistered() 调用,但我在 applicationDidFinishLaunching 委托中实现了该方法的主体 [isRegistered()],这是一个很好的解决方案还是同样的事情? (感谢回复)
  • 是一样的。破解者所要做的就是找到检查注册的指令序列,并将该序列中的第一条指令替换为该序列之后的下一条指令的跳转。
  • 不,不完全一样。如果isRegistered 是一个Objective-C 方法,那么替换它的实现是简单的。在 Leopard 中,有一个用于此目的的运行时函数。 C 函数和内联代码更难替换(但仍然没有那么难)。
【解决方案2】:

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

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

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

【讨论】:

  • 欢迎您的建议!谢谢!
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    从根本上说,任何复制保护系统最终都会有如下所示的内容:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2011-10-10
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多