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.
Réponses
Trop de publicités?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é.
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 :
+(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:
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é.
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!