114 votes

Comment Apple sait que vous utilisez API privée ?

J’ai présenté un fichier binaire à Apple sans code source.

En dehors de vérifier manuellement le code source, comment Apple sait ce qui a été utilisé et quelles vous avez appelé ?

181voto

KennyTM Points 232647

Il existe 3 façons je sais. Ce sont juste des spéculations, puisque je ne travaille pas dans la Pomme de l'équipe de révision.

1. otool -L

Ce sera la liste de toutes les bibliothèques de l'application a liés à. Quelque chose de clairement vous ne devez pas utiliser, comme IOKit WebKit et peuvent être détectés par ce.

2. nm -u

Ce sera la liste de tous les symboles lié. Ce peut détecter

3. Liste Objective-C sélecteurs, ou strings

Objective-C sélecteurs sont stockées dans une région spéciale de la binaire, et, par conséquent, Apple pourrait en extraire le contenu à partir de là, et de vérifier si vous avez utilisé certains sans-papiers Objective-C méthodes, telles que l' -[UIDevice setOrientation:].

Depuis les sélecteurs sont indépendants de la classe que vous soyez de messagerie, même si votre classe personnalisée définit -setOrientation: pas pertinent pour UIDevice, il y aura une possibilité d'être rejeté.


Vous pouvez utiliser Erica Sadun de APIKit pour détecter le potentiel de rejet en raison de (fausses alarmes) Api privées.


(Si vous avez vraiment vraiment vraiment vraiment envie de contournement de ces vérifications, vous pouvez utiliser les fonctions d'exécution tels que

  • dlopen, dlsym
  • objc_getClass, sel_registerName, objc_msgSend
  • -valueForKey:; object_getInstanceVariable, object_getIvar, etc.

pour obtenir ces bibliothèques privées, des classes, des méthodes et ivars. )

26voto

Robert Diamond Points 950

Vous pouvez répertorier les sélecteurs dans un programme de Mach-O en utilisant la ligne suivante dans Terminal :

13voto

Chris McLuvin Points 71

Disons que vous voulez utiliser une API privée; L’objectif C vous permet de construire n’importe quel SEL à partir d’une chaîne:

    SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
    [UIDevice performSelector:my_sel ...];
 

Comment une analyse de robot ou de bibliothèque pourrait-elle résoudre ce problème? Ils devraient résoudre ce problème en utilisant un outil qui surveille les accès privés lors de l'exécution. Même s'ils ont construit un tel outil d'exécution, il est difficile à attraper, car cet appel peut être caché dans un chemin d'accès rarement exercé.

7voto

Alex Martelli Points 330805

J'imagine qu'ils regardent tous les symboles que votre binaire essaie d'importer (informations sans doute facilement accessibles dans la table des symboles) et vous avertissent si l'un de ces symboles se trouve dans leur "liste d'API privée". Assez facile à automatiser, en fait.

1voto

Sniggerfardimungus Points 5207

Un exécutable n'est pas exactement une boîte noire. Si vous appelez une bibliothèque, c'est une chose facile à trouver. C'est pourquoi je déplore la perte des langages d'assemblage dans les formations CS modernes. =] Des outils tels que ldd vous diront ce que vous avez lié, bien que je ne me souvienne pas quelle incarnation de ldd a été intégrée au kit de développement pour iPhone mac.

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