Comment déterminez-vous (par programme) si un iPhone/iPod est:
Pinch Media peut détecter si un téléphone est cassé en prison ou si le logiciel en cours d'exécution est fissuré, quelqu'un sait-il comment procéder? Y a-t-il des bibliothèques?
Ici est l'un des moyens de détecter si votre application a été piratée.
En bref: le cracking nécessite généralement de changer l'Info.plist. Comme c'est un fichier normal auquel vous avez accès, il est assez facile de déterminer de telles modifications.
Détecter un téléphone jailbreaké est aussi simple que de vérifier la présence de /private/var/lib/apt/
dossier. Bien que cela ne détecte pas les utilisateurs du programme d'installation uniquement, la plupart ont désormais installé Cydia, Icy ou RockYourPhone (qui utilisent tous apt)
Pour détecter les utilisateurs piratés, le moyen le plus simple consiste à vérifier la présence d'une clé SignerIdentity
dans le Info.plist
. Étant donné que les crackers avancés peuvent facilement trouver la norme [[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
vérifie, il est préférable de masquer ces appels en utilisant le runtime Objective C disponible via #import <objc/runtime.h>
ou utilisez d'autres équivalents.
Pour développer la réponse de zakovyrya, vous pouvez utiliser le code suivant:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
// Jailbroken
}
TOUTEFOIS, la personne jailbreakant votre application peut hexedit votre programme et en tant que tel, elle pourrait éditer la chaîne @ "SignerIdentity" pour lire @ "siNGeridentity" ou autre chose qui retournerait nil, et donc passerait.
Donc, si vous utilisez ceci (ou l'une des autres suggestions de http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html ):
Pour développer les commentaires de yonel et Benjie ci-dessus:
1) méthode de Landon Fuller s'appuyant sur la vérification du chiffrement, lié ci-dessus par yonel, semble être le seul qui ne soit toujours pas vaincu par les outils de craquage automatisés. Je ne serais pas trop inquiet à propos de Apple changer l'état de l'en-tête LC_ENCRYPTION_INFO de si tôt. Cela semble avoir des effets imprévisibles sur les iphones jailbreakés (même lorsque l'utilisateur a acheté une copie .. .)
En tout cas, je ne prendrais aucune action imprudente contre un utilisateur basé sur ce code ...
2) Pour compléter le commentaire de Benjie concernant. obscurcissement (une nécessité absolue lorsque vous traitez avec des valeurs de chaîne dans votre code anti-piratage): un moyen similaire mais peut-être encore plus simple consiste à toujours vérifier un salé version hachée de la valeur que vous recherchez. Par exemple (même si cette vérification n'est plus efficace), vous vérifieriez le nom de clé de chaque MainBundle comme md5 (keyName + "some secret salt") par rapport à la constante appropriée ... Plutôt basique, mais sûr de vaincre toute tentative de localiser le chaîne.
Bien sûr, cela vous oblige à pouvoir interroger indirectement la valeur que vous souhaitez comparer (par exemple en parcourant un tableau le contenant). Mais c'est le plus souvent le cas.