有哪些公认的方法可以减少 iPhone 应用程序盗版,且不违反 Apple 的评估流程?
如果我的应用程序“打电话回家”提供运行它的唯一设备 ID,我需要收集哪些其他信息(例如,用于购买应用程序的 Apple ID)来创建授权使用该应用程序的有效注册令牌? 同样,我将使用什么代码来访问这些额外数据?
目前,解决这个问题的最佳可用技术方法是什么?
(请不要回答关于盗版如何不可避免等的非编程答案。我知道盗版是不可避免的。我对讨论如何减少盗版的基于编程的答案感兴趣。提前感谢您的理解。)
有哪些公认的方法可以减少 iPhone 应用程序盗版,且不违反 Apple 的评估流程?
如果我的应用程序“打电话回家”提供运行它的唯一设备 ID,我需要收集哪些其他信息(例如,用于购买应用程序的 Apple ID)来创建授权使用该应用程序的有效注册令牌? 同样,我将使用什么代码来访问这些额外数据?
目前,解决这个问题的最佳可用技术方法是什么?
(请不要回答关于盗版如何不可避免等的非编程答案。我知道盗版是不可避免的。我对讨论如何减少盗版的基于编程的答案感兴趣。提前感谢您的理解。)
感谢评论中的 chpwn。
现在有一种更简单的方法可以检测您的 iPhone 应用程序是否已被盗版破解。这不涉及您根据接受的 ID 列表检查 iPhone 的唯一 ID。
目前,Crackers 做了三件事:
最后一个最容易用这段代码检查:
NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *info = [bundle infoDictionary];
if ([info objectForKey: @"SignerIdentity"] != nil)
{ /* do something */ }
通常,我们在我们构建的任何 App Store 应用程序中都没有 SignerIdentity,因此检查 nil 然后执行设置指令应该会使破解者和盗版者更加困难。
我对此不以为然,因此请访问如何阻止 iPhone IPA Crackers。那里有大量关于 iPhone 盗版以及如何遏制盗版的信息。
正如 Andrey Tarantsov 在评论中指出的那样,在二进制文件中查找“SignerIdentity”字符串(使用 HexEdit 之类的应用程序)并替换它非常容易。
您可以对该字符串进行编码,但您所要做的就是更改它的一个字符,应用程序将不再查找“SignerIdentity”键,而是查找可能不存在的其他键(因此为 null )。该密钥为空,应用程序认为它没有被破解(因为如果应用程序没有被破解,SignerIdentity 应该为空)。
相反,我宁愿检查 info.plist 的大小并将其与参考值进行比较。我注意到模拟器和设备构建没有相同的 info.plist 文件大小。调试、发布和分发版本也是如此。因此,请确保使用 Device Distribution Build 的 info.plist 文件大小设置参考值。
如何在启动时查找文件大小:
看起来保存 Plist 的 MD5 校验和并检查 CryptID 应该会做得很好直到一段时间。
检查iTunesMetadata.plist
购买日期,因为有时,当应用程序被破解时,该日期会更改为令人发指的日期。
还要检查购买者姓名字段是否存在。根据我破解个人使用应用程序的经验,这通常会被删除。如果有人知道 Temple Run 的反倾销保护是如何工作的,您可以将其与 poedCrackMod 无法获得的一些保护结合使用(谷歌 poedCrackMod 创建 hackulo.us 帐户,去开发中心寻找 poedCrackMod,将其安装在 iDevice 上) .
Clutch 不会通过 Temple Run 之类的保护来破解东西,它有一个名为 OverDrive 的功能,旨在让应用程序的破解检测静音。poedCrackMod 有 LamestPatch,它不是那么好。poedCrackMod 也是一个可以逆向工程的开源 bash 脚本。回顾一下,您有一个具有复制保护的应用程序,该应用程序无法通过离合器/过载来规避,但可以使用 poedCrackMod 破解。但是 poedCrackMod 无法绕过应用程序的应用内盗版检查。很难手动修补应用程序可执行文件中的完整性检查。所以你的应用很难破解。