如何(以编程方式)确定iPhone / iPod是否为:
Pinch Media可以检测到手机是否被打破或者软件运行是否被破解,是否有人知道他们是如何做到这一点的?有没有图书馆?
答案 0 :(得分:39)
Here是检测您的应用是否被破解的方法之一。
简而言之:破解通常需要更改Info.plist。由于它是您可以访问的常规文件,因此很容易确定此类更改。
答案 1 :(得分:25)
检测越狱手机就像检查/private/var/lib/apt/
文件夹的存在一样简单。虽然这不会检测仅安装程序用户,但现在大多数已经安装了Cydia,Icy或RockYourPhone(所有这些都使用apt)
要检测盗版用户,最简单的方法是检查应用SignerIdentity
中是否存在Info.plist
密钥。由于高级破解程序可以轻松找到标准[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
检查,因此最好使用通过#import <objc/runtime.h>
提供的Objective C运行时来模糊这些调用,或者使用替代等效项。
答案 2 :(得分:10)
为了扩展zakovyrya的回复,您可以使用以下代码:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
// Jailbroken
}
然而,越狱你的应用程序的人可以对你的程序进行hexedit,因此,他们可以编辑字符串@“SignerIdentity”来读取@“siNGeridentity”或其他会返回nil的东西,从而通过。
因此,如果您使用此(或http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html中的任何其他建议):
答案 3 :(得分:5)
扩展yonel和Benjie上面的评论:
1)Landon Fuller's method依赖加密检查,由yonel链接,似乎是唯一一个仍未被自动破解工具击败的人。我不会过分担心Apple会很快改变LC_ENCRYPTION_INFO标题的状态。它似乎对越狱的iphone有一些不可预测的影响(即使用户购买了副本......)
无论如何,我不会根据该代码对用户采取任何草率行动......
2)补充本杰的评论。混淆(在处理反盗版代码中的任何字符串值时绝对必要):类似但可能更简单的方法是始终检查 salted 散列版本的你正在寻找的价值。例如(即使该检查不再有效),您可以将每个MainBundle的密钥名称检查为md5(keyName +“some secret salt”),而不是相应的常量...相当基本,但肯定会击败任何定位字符串。
当然,这要求您能够间接查询要比较的值(例如,通过浏览包含它的数组)。但最常见的情况就是这样。