您如何(以编程方式)确定 iPhone/iPod 是否为:
- 越狱
- 运行您的软件的破解副本
Pinch Media可以检测手机是否越狱或运行的软件是否被破解,有人知道他们是怎么做到的吗?有图书馆吗?
这是检测您的应用程序是否被破解的方法之一。
简而言之:破解通常需要更改 Info.plist。由于它是您可以访问的常规文件,因此很容易确定此类更改。
/private/var/lib/apt/
检测越狱手机就像检查文件夹是否存在一样简单。虽然这不会检测到仅安装程序的用户,但现在大多数人已经安装了 Cydia、Icy 或 RockYourPhone(所有这些都使用 apt)
要检测盗版用户,最简单的方法是检查SignerIdentity
应用程序的Info.plist
. 由于高级破解者可以轻松找到标准[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
检查,因此最好使用可用的 Objective C 运行时来隐藏这些调用,#import <objc/runtime.h>
或者使用替代等效项。
只是为了扩展 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)Landon Fuller依赖于加密检查的方法,上面由 yonel 链接,似乎是唯一没有被自动破解工具打败的方法。我不会过分担心 Apple 会很快改变 LC_ENCRYPTION_INFO 标头的状态。它似乎对越狱的 iphone 有一些不可预测的影响(即使用户购买了副本......)
无论如何,我不会根据该代码对用户采取任何轻率的行动......
2)补充本杰的评论。混淆(在处理反盗版代码中的任何字符串值时绝对必要):一种类似但可能更简单的方法是始终检查您正在寻找的值的加盐 散列版本。例如(即使该检查不再有效),您将检查每个 MainBundle 的密钥名称为 md5(keyName + "some secret salt") 与适当的常量...相当基本,但一定会击败任何定位细绳。
当然,这要求您能够间接查询要比较的值(例如通过包含它的数组)。但这是最常见的情况。