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

rjs*_*ing 78 iphone cocoa-touch objective-c jailbreak ios

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

  1. 监狱破了
  2. 运行软件的破解副本

Pinch Media可以检测手机是否被打破或软件运行是否破裂,是否有人知道他们是如何做到这一点的?有图书馆吗?

zak*_*rya 39

以下是检测您的应用是否被破解的方法之一.

简而言之:破解通常需要更改Info.plist.由于它是您可以访问的常规文件,因此很容易确定此类更改.


rpe*_*ich 25

检测越狱手机就像检查/private/var/lib/apt/文件夹的存在一样简单.虽然这不会检测仅安装程序用户,但现在大多数已经安装了Cydia,Icy或RockYourPhone(所有这些都使用apt)

要检测盗版用户,最简单的方法是检查SignerIdentity应用中是否存在密钥Info.plist.由于高级破解程序可以轻松找到标准[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]检查,因此最好使用可通过的Objective C运行时来模糊这些调用,#import <objc/runtime.h>或使用替代等效项.


Ben*_*jie 10

只是为了扩展zakovyrya的回复,您可以使用以下代码:

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
  // Jailbroken
}
Run Code Online (Sandbox Code Playgroud)

但是,越狱你的应用程序的人可以对你的程序进行hexedit,因此,他们可以编辑字符串@"SignerIdentity"来读取@"siNGeridentity"或其他会返回nil的东西,从而通过.

因此,如果您使用此(或http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html中的任何其他建议):

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


小智 5

扩展yonel和Benjie上面的评论:

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

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

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

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