Подтвердить что ты не робот

Как обнаружить, что приложение работает на джейлбрейк-устройстве?

Я только что выпустил приложение для iOS, но я не уверен, как сделать приложение безопасным для использования jailbrakers.

Могу ли я что-то сделать, чтобы мое приложение не работало над джейлбрейковыми устройствами?

4b9b3361

Ответ 1

С помощью кода вы можете определить, работает ли приложение на сломанном устройстве или нет. Таким образом, вы можете открыть предупреждение и закрыть приложение. Вы можете делать все, что хотите. Вот учебник для него:

http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html

и вот сообщение о переполнении стека:

Как определить, что приложение iOS работает на взломанном телефоне?

Кроме того, если вы хотите полное решение, вы можете увидеть в tapjoy код SDK. Они обнаруживают взломанный iPhone. Вот тапфой, URL https://www.tapjoy.com/

Ответ 2

Проверьте эти пути

+ (BOOL)isJailBroken {
#ifdef TARGET_IPHONE_SIMULATOR
    return NO;
#endif

    NSArray *paths = @[@"/bin/bash",
                       @"/usr/sbin/sshd",
                       @"/etc/apt",
                       @"/private/var/lib/apt/",
                       @"/Applications/Cydia.app",
                       ];

    for (NSString *path in paths) {
        if ([self fileExistsAtPath:path]) {
            return YES;
        }
    }

    return NO;
}


+ (BOOL)fileExistsAtPath:(NSString *)path {
    FILE *pFile;
    pFile = fopen([path cStringUsingEncoding:[NSString defaultCStringEncoding]], "r");
    if (pFile == NULL) {
        return NO;
    }
    else
        fclose(pFile);
    return YES;
}

Кроме того, вы можете посмотреть https://github.com/OneSignal/OneSignal-iOS-SDK/blob/master/iOS_SDK/OneSignalSDK/Source/OneSignalJailbreakDetection.m

Ответ 3

Попробуйте найти файл, созданный cydia или jailbroken. Или попробуйте написать файл вне приложения blackbox. Если вам это удастся, устройство скомпрометировано /jailbroken:)

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

Ответ 4

Вы можете определить, является ли устройство jailBroken или нет, проверив следующее

  • Установлена ​​Cydia
  • Проверьте некоторые системные пути
  • Может выполнять проверку целостности песочницы
  • Выполнение проверки символической ссылки
  • Убедитесь, что вы создаете и записываете файлы вне своей песочницы

Существует библиотека с открытым исходным кодом, которую я создал из разных статей и книг, попробуйте.

Ответ 5

-(BOOL) isJailbroken
{
#if TARGET_IPHONE_SIMULATOR
return NO;
#else
FILE *f = fopen("/bin/bash", "r");
if (errno == ENOENT)
{
    // device is NOT jailbroken
    fclose(f);
    NSLog(@"no");
    return NO;
}
else {
    // device IS jailbroken
    fclose(f);
    NSLog(@"yes");
    return YES;

}
#endif
}

Ответ 6

Основанный на @karim отвечает на слегка измененную версию:

func hasJailbreak() -> Bool {
    #if arch(i386) || arch(x86_64)
        println("Simulator")
        return false    
    #else
        var fileManager = NSFileManager.defaultManager()
        if(fileManager.fileExistsAtPath("/private/var/lib/apt")) {
            println("Jailbroken Device")
            return true
        } else {
            println("Clean Device")
            return false
        }
    #endif
}

Ответ 7

Даже если ваше устройство заблокировано, приложения ipa могут получить доступ только к собственным песочницам, поэтому Если устройство либо взломан, либо нет, ваш метод вернет NO:) Ищите другой путь Также, если вы пытаетесь получить доступ к нему, но ваше приложение для публикации песочницы в appstore может столкнуться с проблемами

Ответ 8

/**
     Detect that the app is running on a jailbroken device or not

     - returns: bool value for jailbroken device or not
     */
    public class func isDeviceJailbroken() -> Bool {
        #if arch(i386) || arch(x86_64)
            return false
        #else
            let fileManager = FileManager.default

            if (fileManager.fileExists(atPath: "/bin/bash") ||
                fileManager.fileExists(atPath: "/usr/sbin/sshd") ||
                fileManager.fileExists(atPath: "/etc/apt")) ||
                fileManager.fileExists(atPath: "/private/var/lib/apt/") ||
                fileManager.fileExists(atPath: "/Applications/Cydia.app") ||
                fileManager.fileExists(atPath: "/Library/MobileSubstrate/MobileSubstrate.dylib") {
                return true
            } else {
                return false
            }
        #endif
    }

Ответ 9

Существует множество способов поиска джейлбрейковых устройств. проверка cydia technic не будет работать, если квалифицированный хакер изменит путь приложения.

Хорошим способом проверить это было бы увидеть, можем ли мы изменить файл в другом месте за пределами пакета приложений.

NSError *error;
NSString *stringToBeWritten = @"This is a test.";
[stringToBeWritten writeToFile:@"/private/jailbreak.txt" atomically:YES
         encoding:NSUTF8StringEncoding error:&error];
if(error==nil){
   //Device is jailbroken
   return YES;
 } else {
   //Device is not jailbroken
   [[NSFileManager defaultManager] removeItemAtPath:@"/private/jailbreak.txt" error:nil];
 }

Найдите больше методов в приведенном ниже URL

http://highaltitudehacks.com/2013/12/17/ios-application-security-part-24-jailbreak-detection-and-evasion/

Ответ 10

SWIFT 3:

func hasJailbreak() -> Bool {
        #if arch(i386) || arch(x86_64)
            print("Simulator")
            return false
        #else
            return FileManager.default.fileExistsAtPath("/private/var/lib/apt")
        #endif
    }

Ответ 11

Нет никакого способа обнаружить, если устройство взломано.

Учтите, что даже если бы оно существовало, устройство уже было взломано, что означает выполнение произвольного кода, и джейлбрейкер просто изменил бы любой метод обнаружения, который вы использовали бы, чтобы сообщить, что устройство не было взломано.

ссылка: https://forums.developer.apple.com/thread/43073

кредиты идут сотрудникам Apple, которые ответили на этот же вопрос