如何检测iOS应用程序是否在越狱的手机上运行?

182
如果我希望我的应用在越狱的iPhone上表现不同,我该如何确定呢?

你将会追踪一个移动的目标,但是你可以尝试跟踪这些资源的进展,以查看你的技术效果如何:
  • https://www.theiphonewiki.com/wiki/Bypassing_Jailbreak_Detection
  • https://www.theiphonewiki.com/wiki/XCon
- Michael Bishop
18个回答

4

需要检查的一些常见文件:

/Library/MobileSubstrate/MobileSubstrate.dylib /Applications/Cydia.app /var/cache/apt /var/lib/apt /var/lib/cydia /var/log/syslog /var/tmp/cydia.log /bin/bash /bin/sh /usr/sbin/sshd /usr/libexec/ssh-keysign /etc/ssh/sshd_config /etc/apt

大多数情况下是检查Cydia相关文件。


4
我不知道是否有任何与此相关的“API”。如果有,那么越狱掩盖产品很快就会覆盖它们。
正如许多人指出的那样,这是一场猫捉老鼠的游戏。在双方都成为专家之后,一切都取决于谁先行动。(持有设备的人。)
我在Zdziarski的新书《Hacking and Securing iOS Apps》中找到了许多检测越狱的好建议。(就个人而言,我更愿意为O'Reilly的电子书支付更高的费用,因为他们允许复制和粘贴。)
不,我与出版商没有关联。但我觉得这是一本好书。我不喜欢只发表黑客的错误,让他们修复它们,所以我想指出这本书。

3

我建议查找那些在“原版”iPhone上不存在的文件。我见过的所有越狱工具都会安装ssh。这可能是判断是否越狱的一个好指标。


19
SSH从不自动安装,用户必须自己安装。 - Grant Paul
1
我并没有真正关注越狱领域的最新动态。但是据我回忆,当我写这篇文章(2009年1月)时,Ziphone和其他工具默认安装了ssh和bsd子系统。也许现在情况已经不同了。 - Gordon Wilson
12
相信我说,chpwn已经跟上了越狱界的发展。 - Winfield Trail

3
我们所做的是,我们已经有一个RSS供稿来与我们的用户进行沟通(Stocks Live),我们发布了一条新闻,内容如下:

一些越狱设备存在问题,我们制作了一个黑客工具来解决这些问题,但我们需要知道这是否是越狱设备,请点击此处以便应用程序解决问题。如果您回到正常状态即删除越狱,请点击此处。

然后您可以处理用户交互并采取适当的行动,例如表现不同等...

3

尝试查找Cydia或越狱设备创建的文件。或者尝试在应用程序黑盒子之外的文件中写入内容。如果您成功执行此操作,则设备已被破解/越狱 :)

- (BOOL)jailbroken
{
    NSFileManager * fileManager = [NSFileManager defaultManager];
    return [fileManager fileExistsAtPath:@"/private/var/lib/apt/"];
}

3
苹果已经批准了您的应用程序,其中包含以上代码吗? - karthikPrabhu Alagu

1
在iOS 14中,有一个名为App Attest的服务。请查看这个文章
我还使用了这个存储库 https://github.com/fiber-inc/SecurityDetector, 但是一些用户说,当探测器触发时,他们没有越狱。
所以我决定测试这个存储库 https://github.com/wearebeatcode/SwiftJailbreakDetection/blob/master/Sources/SwiftJailbreakDetection/JailbreakDetection.swift。目前算法不太好,并且会给出错误结果,即未越狱的手机已越狱。正在进一步寻找...
现在我正在尝试这个:https://github.com/securing/IOSSecuritySuite

0
这是我的解决方案:

步骤1

extension UIDevice {
    func isJailBroken() -> Bool {
        let cydiaPath = "/Applications/Cydia.app"
        let aptPath = "/private/var/lib/apt/"
        if FileManager.default.fileExists(atPath: cydiaPath) || FileManager.default.fileExists(atPath: aptPath) {
            return true
        }
        return false
    }
}

步骤2:在启动屏幕视图控制器(或任何您首次调用的VC)的viewDidLoad()中调用它:
       // show a blank screen or some other view controller
       let viewController = UIDevice.current.isJailBroken() ? JailBrokenViewController() : NextViewController()
       self.navigationController?.present(viewController, animated: true, completion:nil)

-2

尝试访问/Application/Preferences.app/General.plist 在越狱的iPhone上,您应该能够这样做。 在非越狱手机上,您将无法访问它。


3
如果有源代码的话,这个回答会更有趣。个人认为:这会让你得到一个赞。 - Johan Karlsson
5
未越狱的设备也可以打开并阅读此文件。(已测试) - frankish
@JohanKarlsson 我假设这里的读者可以编写自己的源代码。如果他们不能 - 那他们在这里干什么? - gnasher729

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接