确定iPhone是否以编程方式被监禁

时间:2009-07-16 23:43:09

标签: iphone objective-c ios cocoa-touch jailbreak

如何(以编程方式)确定iPhone / iPod是否为:

  1. Jail broken
  2. 运行软件的破解副本
  3. Pinch Media可以检测到手机是否被打破或者软件运行是否被破解,是否有人知道他们是如何做到这一点的?有没有图书馆?

4 个答案:

答案 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中的任何其他建议):

  • 不要指望它永远有效
  • 请勿以任何方式使用此信息来破坏/阻碍您的应用程序(否则他们将导致对其进行伪装,因此您的应用程序将不会知道它已越狱)
  • 可能明智地混淆了这段代码。例如,您可以将base64编码的反向字符串放在代码中,然后通过反转过程在应用程序中对其进行解码。
  • 稍后在您的代码中验证您的验证(例如,当我说SignerIdentity时,它实际上是说SignerIdentity还是siNGeridentity?)
  • 不要在像stackoverflow这样的公共网站上告诉人们你是怎么做的
  • 请记住,它只是一个指南而且不是万无一失的(也不是防裂的!) - 强大的力量带来了巨大的责任。

答案 3 :(得分:5)

扩展yonel和Benjie上面的评论:

1)Landon Fuller's method依赖加密检查,由yonel链接,似乎是唯一一个仍未被自动破解工具击败的人。我不会过分担心Apple会很快改变LC_ENCRYPTION_INFO标题的状态。它似乎对越狱的iphone有一些不可预测的影响(即使用户购买了副本......)

无论如何,我不会根据该代码对用户采取任何草率行动......

2)补充本杰的评论。混淆(在处理反盗版代码中的任何字符串值时绝对必要):类似但可能更简单的方法是始终检查 salted 散列版本的你正在寻找的价值。例如(即使该检查不再有效),您可以将每个MainBundle的密钥名称检查为md5(keyName +“some secret salt”),而不是相应的常量...相当基本,但肯定会击败任何定位字符串。

当然,这要求您能够间接查询要比较的值(例如,通过浏览包含它的数组)。但最常见的情况就是这样。