【发布时间】:2010-11-11 13:39:33
【问题描述】:
【问题讨论】:
-
Apple 知道如何确定:p
-
如果您对这个问题感兴趣,为什么不支持 51 区提案 jail-breaking Stack Exchange site
标签: iphone objective-c ios cocoa-touch jailbreak
【问题讨论】:
标签: iphone objective-c ios cocoa-touch jailbreak
Here 是检测您的应用是否被破解的方法之一。
简而言之:破解通常需要更改 Info.plist。由于它是您可以访问的常规文件,因此很容易确定此类更改。
【讨论】:
扩展上面的 yonel 和 Benjie 的 cmets:
1) Landon Fuller's method 依赖加密检查,上面由 yonel 链接,似乎是唯一没有被自动破解工具打败的。我不会过分担心 Apple 会很快改变 LC_ENCRYPTION_INFO 标头的状态。它似乎对越狱的 iphone 有一些不可预测的影响(即使用户购买了副本......)
无论如何,我不会根据该代码对用户采取任何轻率的行动...
2) 补充 Benjie 的评论。混淆(在处理反盗版代码中的任何字符串值时绝对必要):一种类似但可能更简单的方法是始终检查 salted hashed 版本的您正在寻找的价值。例如(即使该检查不再有效),您将检查每个 MainBundle 的密钥名称为 md5(keyName + "some secret salt") 与适当的常量...相当基本,但肯定会击败任何定位字符串。
当然,这要求您能够间接查询要比较的值(例如,通过包含它的数组)。但大多数情况下都是如此。
【讨论】:
只是为了扩展 zakovyrya 的回复,您可以使用以下代码:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
// Jailbroken
}
但是,越狱您的应用程序的人可以对您的程序进行十六进制编辑,因此,他们可以编辑字符串 @"SignerIdentity" 以读取 @"siNGeridentity" 或其他将返回 nil 的内容,从而通过。
所以如果你使用这个(或来自http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html 的任何其他建议):
【讨论】:
检测越狱手机就像检查/private/var/lib/apt/ 文件夹是否存在一样简单。虽然这不会检测到仅安装程序的用户,但现在大多数人已经安装了 Cydia、Icy 或 RockYourPhone(所有这些都使用 apt)
要检测盗版用户,最简单的方法是检查应用的Info.plist 中是否存在SignerIdentity 键。由于高级破解者可以轻松找到标准的[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] 检查,因此最好使用通过#import <objc/runtime.h> 提供的Objective C 运行时来隐藏这些调用,或者使用替代等效项。
【讨论】: