60 votes

Comment détecter que l'application s'exécute sur un appareil jailbreaké ?

Je viens de publier mon application pour iOS, mais je ne sais pas comment protéger mon application contre les jailbrakers.

Puis-je faire quelque chose pour empêcher mon application de fonctionner sur des appareils jailbreakés ?

10voto

onmyway133 Points 2196

Vérifiez ces chemins

 + (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;
}

De plus, vous pouvez consulter https://github.com/OneSignal/OneSignal-iOS-SDK/blob/master/iOS_SDK/OneSignalSDK/Source/OneSignalJailbreakDetection.m

5voto

karim Points 4704

Essayez de trouver un fichier créé par cydia ou un appareil jailbreaké. Ou essayez d'écrire dans un fichier en dehors de la boîte noire de l'application. Si vous réussissez à le faire, l'appareil est compromis / jailbreaké :)

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

4voto

user3088680 Points 71

Vous pouvez détecter si un appareil est jailBroken ou non en vérifiant ce qui suit

  1. Cydia est installé
  2. Vérifier certains des chemins système
  3. Peut effectuer une vérification d'intégrité du bac à sable
  4. Effectuer la vérification du lien symbolique
  5. Vérifiez si vous créez et écrivez des fichiers en dehors de votre bac à sable

Il existe une bibliothèque open source que j'ai créée à partir de divers articles et livres, essayez-la.

4voto

sinh99 Points 2275
-(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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X