【问题标题】:Reducing piracy of iPhone applications减少 iPhone 应用程序的盗版
【发布时间】:2010-10-25 04:23:04
【问题描述】:

有哪些公认的方法可以减少 iPhone 应用程序盗版,且不违反 Apple 的评估流程?

如果我的应用程序“打电话回家”提供运行它的唯一设备 ID,我还需要收集哪些其他信息(例如,用于购买应用程序的 Apple ID)来创建授权使用的有效注册令牌的应用程序?同样,我将使用什么代码来访问这些额外数据?

目前解决这个问题的最佳可用技术方法是什么?

(请不要非编程回答关于盗版如何不可避免等。我知道盗版是不可避免的。我对基于编程的答案感兴趣讨论如何减少它。提前感谢您的理解。)

【问题讨论】:

  • 我喜欢提前指定他们想听到什么答案的问题。这就是您获得最佳答案的方式。 ;)
  • 这听起来像是一个自我否定的问题,Alex。您正在询问您需要收集什么才能使令牌有效。在不知道“需要”和“有效”是什么意思的情况下,答案可能会转向哲学或“你不需要任何东西”。请记住,您是在询问公众如何智取公众。
  • 看到了吗?有可能提供一个问题的答案,而无需狡猾和哲学化!也许你们中的一些人应该尝试一下。
  • 我真的不喜欢你放置 cmets 的方式 - 为什么要求如此激进?
  • @jalf:每个问题都在不同程度上指定提问者想听到的内容。如果没有,那将不是一个问题。考虑到该线程可能最终偏离主题,要求不接收非编程答案是可以理解的

标签: iphone piracy piracy-prevention


【解决方案1】:

更新

visit and read

感谢 cmets 中的 chpwn。

代码太旧了! - 2009 年 5 月 11 日

现在有一种更简单的方法可以检测您的 iPhone 应用程序是否已被盗版破解。这不涉及您根据接受的 ID 列表检查 iPhone 的唯一 ID。

目前破解者做了三件事:

  1. 编辑 Info.plist 文件
  2. 将 Info.plist 从二进制解码为 UTF-8 或 ASCII
  3. 将密钥对添加到 Info.plist{SignerIdentity, Apple iPhone OS 应用程序签名}

最后一个最容易用这段代码检查:

NSBundle *bundle = [NSBundle mainBundle]; 
NSDictionary *info = [bundle infoDictionary]; 
if ([info objectForKey: @"SignerIdentity"] != nil) 
{ /* do something */  }

一般来说,我们构建的任何 App Store 应用程序中都没有 SignerIdentity,因此检查 nil 然后执行设置指令应该会让破解者和盗版者更加困难。

我对此不以为然,因此请访问 How to Thwart iPhone IPA Crackers. 那里有大量关于 iPhone 盗版以及如何遏制盗版的信息。

【讨论】:

  • @David 没有人能回答的快速问题:如果这是一个如此简单的(可能是 5 行)修复,为什么没有更频繁地实施?你知道有什么缺点吗?应用商店的绝大多数应用已被破解,可供下载。
  • 破解者很容易检查 SignerIdentity 文字字符串或 infoDictionary 选择器调用。您可能想掩盖它们。 “做某事”部分也很棘手:你不能马上失败,因为这会惊动破解者。因此,您需要以很大的延迟失败(也许给他们 30 天的试用期,然后要求购买正版副本)。看,让它变得有用不再那么简单了。
  • 我发现了我的应用程序的破解版本,其 Info.plist 文件与我提交给商店的文件相同。此检查不再起作用。
  • 这是错误的!这不再需要盗版应用程序!请改为检查二进制文件的“Crypt ID”。该密钥不再需要且不再包括在内,并且是一种可怕的检查方式。
  • 呃,你检查提交的日期了吗?那时它奏效了。无需打结。 ;)
【解决方案2】:

正如 Andrey Tarantsov 在 cmets 中指出的那样,在二进制文件中查找“SignerIdentity”字符串(使用 HexEdit 之类的应用程序)并替换它非常容易。

您可以对该字符串进行编码,但您只需更改其中的一个字符,应用程序将不再查找“SignerIdentity”键,而是查找其他可能不存在的键(因此为空)。该密钥为空,应用认为它没有被破解(因为如果应用没有破解,SignerIdentity 应该为空)。

相反,我宁愿检查 info.plist 的大小并将其与参考值进行比较。我注意到模拟器和设备构建没有相同的 info.plist 文件大小。调试、发布和分发版本也是如此。因此,请确保使用 Device Distribution Build 的 info.plist 文件大小设置参考值。

如何查找filesize at launch

【讨论】:

    【解决方案3】:

    请检查iTunesMetadata.plist 的购买日期,因为有时,当应用程序被破解时,该日期会更改为令人发指的日期。

    还要检查购买者姓名字段是否存在。根据我破解个人使用应用程序的经验,这通常会被删除。如果有人知道 Temple Run 的反倾销保护是如何工作的,您可以将其与 poedCrackMod 无法获得的一些保护结合使用(谷歌 poedCrackMod 创建 hackulo.us 帐户,去开发中心寻找 poedCrackMod,将其安装在 iDevice 上) .

    Clutch 不会使用 Temple Run 之类的保护来破解东西,它有一个名为 OverDrive 的功能,旨在让应用程序的破解检测静音。 poedCrackMod 有 LamestPatch,它不是那么好。 poedCrackMod 也是一个可以逆向工程的开源 bash 脚本。回顾一下,您有一个具有复制保护的应用程序,该应用程序无法通过离合器/过载来规避,但可以使用 poedCrackMod 破解。但是 poedCrackMod 无法绕过应用程序的应用内盗版检查。很难手动修补应用程序可执行文件中的完整性检查。所以你的应用很难破解。

    【讨论】:

      【解决方案4】:

      看起来保存 Plist 的 MD5 校验和并检查 CryptID 应该会做得很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-01
        • 2011-05-12
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多