Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect Jailbroken in iOS 11 or later

Tags:

ios

cordova

Used "https://github.com/leecrossley/cordova-plugin-jailbreak-detection" but still it didn't check the JAILBROKEN since Cydia and other options were bypassed in latest 11+ iOS versions

How to handle latest iOS using Cordova or in native code ?

like image 447
Vinay Avatar asked Mar 09 '18 13:03

Vinay


People also ask

Can you tell if an iPhone has been jailbroken?

The easiest way to know if you have a jailbroken iPhone is to check your apps. If your iPhone has the alternative app store Cydia instead of Apple's App Store, that's a clear sign of a jailbroken phone.

How does a developer determine if a device has been jailbroken?

Most jailbreak detection methods fall into the following categories: File existence checks. URI scheme registration checks. Sandbox behavior checks.

What does it mean when it says your device appears to be jailbroken?

Jailbreaking is the process of exploiting the flaws of a locked-down electronic device to install software other than what the manufacturer has made available for that device. Jailbreaking allows the device owner to gain full access to the root of the operating system and access all the features.

Can MDM detect jailbreak?

Mobile Device Manager Plus allows organizations to detect jailbroken devices in the network and also remove these devices once they are detected.


1 Answers

Update 2021: You can use the extension on UIDevice from this article: https://developerinsider.co/best-way-to-check-if-your-ios-app-is-running-on-a-jailbroken-phone/

I copied all code in here.

You can find the latest version of code on Github here (author is @vineetchoudhary): https://github.com/developerinsider/isJailBroken/blob/master/IsJailBroken/Extension/UIDevice%2BJailBroken.swift

Whole code:

import Foundation
import UIKit

extension UIDevice {
    var isSimulator: Bool {
        return TARGET_OS_SIMULATOR != 0
    }
    
    var isJailBroken: Bool {
        get {
            if UIDevice.current.isSimulator { return false }
            if JailBrokenHelper.hasCydiaInstalled() { return true }
            if JailBrokenHelper.isContainsSuspiciousApps() { return true }
            if JailBrokenHelper.isSuspiciousSystemPathsExists() { return true }
            return JailBrokenHelper.canEditSystemFiles()
        }
    }
}
    
private struct JailBrokenHelper {
    static func hasCydiaInstalled() -> Bool {
        return UIApplication.shared.canOpenURL(URL(string: "cydia://")!)
    }
    
    static func isContainsSuspiciousApps() -> Bool {
        for path in suspiciousAppsPathToCheck {
            if FileManager.default.fileExists(atPath: path) {
                return true
            }
        }
        return false
    }
    
    static func isSuspiciousSystemPathsExists() -> Bool {
        for path in suspiciousSystemPathsToCheck {
            if FileManager.default.fileExists(atPath: path) {
                return true
            }
        }
        return false
    }
    
    static func canEditSystemFiles() -> Bool {
        let jailBreakText = "Developer Insider"
        do {
            try jailBreakText.write(toFile: jailBreakText, atomically: true, encoding: .utf8)
            return true
        } catch {
            return false
        }
    }
    
    /**
     Add more paths here to check for jail break
     */
    static var suspiciousAppsPathToCheck: [String] {
        return ["/Applications/Cydia.app",
                "/Applications/blackra1n.app",
                "/Applications/FakeCarrier.app",
                "/Applications/Icy.app",
                "/Applications/IntelliScreen.app",
                "/Applications/MxTube.app",
                "/Applications/RockApp.app",
                "/Applications/SBSettings.app",
                "/Applications/WinterBoard.app"
        ]
    }
    
    static var suspiciousSystemPathsToCheck: [String] {
        return ["/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
                "/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
                "/private/var/lib/apt",
                "/private/var/lib/apt/",
                "/private/var/lib/cydia",
                "/private/var/mobile/Library/SBSettings/Themes",
                "/private/var/stash",
                "/private/var/tmp/cydia.log",
                "/System/Library/LaunchDaemons/com.ikey.bbot.plist",
                "/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
                "/usr/bin/sshd",
                "/usr/libexec/sftp-server",
                "/usr/sbin/sshd",
                "/etc/apt",
                "/bin/bash",
                "/Library/MobileSubstrate/MobileSubstrate.dylib"
        ]
    }
}

Also, you need to add cydia in LSApplicationQueriesSchemes key inside Info.plist. It's required for canOpenURL to work.

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>cydia</string>
</array>
like image 80
Aleksandr Honcharov Avatar answered Sep 21 '22 10:09

Aleksandr Honcharov