182 votes

Comment détecter qu’une application iOS est en cours d’exécution sur un téléphone jailbreaké ?

Si je veux que mon application se comporte différemment sur un iPhone jailbreaké, comment ferais-je pour déterminer cela? Je pensais que quelqu'un avait posé cette question avant, mais je n'arrive pas à le trouver maintenant.

94voto

wisequark Points 2748

Cela dépend de ce que tu veux dire par jailbreak. Dans le cas simple, vous devriez être capable de voir si Cydia est installé et passer par là - quelque chose comme

 NSString *filePath = @"/Applications/Cydia.app";
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
   // do something useful
}
 

Pour les noyaux piratés, c'est un peu (beaucoup) plus impliqué.

82voto

Tertium Points 2154

Cydia n’est pas un must sur appareil jailbreaké. Tandis que toujours l’accès à bash normal est refusé sur appareil non-jailbreaké. Nous savons le chemin d’accès au bash sur tous les systèmes de x, donc s’il n’y a aucune prison nous pouvons y accéder - toujours.

Donc j’ai utiliser du code plus simple que la recherche de cydia :

53voto

Mark Johnson Points 763
 +(BOOL)isJailbroken {
    NSURL* url = [NSURL URLWithString:@"cydia://package/com.example.package"];
    return [[UIApplication sharedApplication] canOpenURL:url];
}
 

La vérification du chemin du fichier /Applications/Cydia.app n'est pas autorisée sur un téléphone normal? Je n'ai jamais entendu parler d'Apple détectant cela et rejetant une application pour cela, mais Apple est imprévisible. Cydia a un schéma d'URL cydia: // qui peut être vérifié légalement avec UIApplication canOpenURL:

52voto

GregH Points 654

Vérifier si le noyau est cassé n'est pas beaucoup plus impliqués.

Cette opération rend le noyau de la signature vérification de code signé toujours le rapport que le code est correctement signé, ininterrompue des téléphones ne peuvent pas exécuter du code avec une mauvaise signature.

Donc, inclure un exécutable séparé dans l'application avec une mauvaise signature. Il pourrait juste être un 3-programme en ligne a main() et une valeur de retour. Compiler le fichier exécutable sans signature de code (de la désactiver dans les Paramètres de Projet->Build) et signe avec une autre clé à l'aide de la "codesign" de l'utilitaire de ligne de commande.

Votre application exec l'exécutable séparé. Si votre programme ne peut pas obtenir la valeur de retour lors de l'exécution de l'exécutable séparé avec le mauvais sig, il est certainement en prison. Si l'exécutable séparé retourne UN-OK, le téléphone est certainement jailbreaké.

14voto

user3088680 Points 71

Vous pouvez détecter si un appareil est Jailbreaké ou non en vérifiant les points suivants:

  • Cydia est installé
  • Vérifier les chemins d'accès au système
  • Effectuer un bac à sable de vérification de l'intégrité
  • Effectuer de vérification de lien symbolique
  • Vérifier si vous de créer et d'écrire des fichiers en dehors de votre bac à sable

Il y a une bibliothèque open source que j'ai créé à partir de plusieurs articles et livres. L'essayer sur GitHub!

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