您如何(以编程方式)确定iPhone / iPod是否为:
- 越狱
- 运行软件的破解副本
Pinch Media可以检测电话是否被牢牢破了或者运行的软件是否被破解,有人知道他们是怎么做到的吗?有图书馆吗?
您如何(以编程方式)确定iPhone / iPod是否为:
Pinch Media可以检测电话是否被牢牢破了或者运行的软件是否被破解,有人知道他们是怎么做到的吗?有图书馆吗?
Answers:
检测越狱电话就像检查/private/var/lib/apt/
文件夹是否存在一样容易。尽管这不能检测到仅安装程序的用户,但到目前为止,大多数用户已经安装了Cydia,Icy或RockYourPhone(所有这些都使用apt)
要检测盗版用户,最简单的方法是检查SignerIdentity
应用程序中是否存在密钥Info.plist
。由于高级破解者可以轻松找到标准[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
检查,因此最好使用通过#import <objc/runtime.h>
或使用替代等效项提供的Objective C运行时来掩盖这些调用。
为了扩展zakovyrya的回复,您可以使用以下代码:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
// Jailbroken
}
但是,越狱您的应用程序的人可以对您的程序进行十六进制编辑,这样,他们可以编辑字符串@“ SignerIdentity”来读取@“ siNGeridentity”或返回nil的其他内容,然后通过。
因此,如果您使用此方法(或来自http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html的任何其他建议):
要扩展上面的yonel和Benjie的评论:
1)上面由yonel链接的Landon Fuller依靠加密检查的方法,似乎是唯一仍未被自动破解工具击败的方法。我不会为Apple很快更改LC_ENCRYPTION_INFO标头的状态而过分担心。它似乎确实对越狱的iPhone产生了一些不可预测的影响(即使用户购买了副本...)
无论如何,我不会基于该代码对用户采取任何轻率的行动...
2)补充本杰的评论。混淆(在反盗版代码中处理任何字符串值时绝对必要):一种类似但甚至更简单的方法是始终检查要查找的值的加盐 哈希版本。例如(即使该检查不再有效),您仍将对照适当的常量将每个MainBundle的键名作为md5(keyName +“ some secret salt”)进行检查...相当基本,但一定要击败任何尝试找到主键串。
当然,这要求您能够间接查询要比较的值(例如,通过包含它的数组)。但这是最常见的情况。