Dev:MobileSubstrate/fr

Languages: English &bull; français &bull; ไทย

Cydia Substrate (anciennement nommé MobileSubstrate) est le de facto framework qui permet la 3ème partie des développeurs de fournit des correctifs d'exécutions (“Cydia Substrate extensions”) aux fonctions du système, similaire à Application Enhancer sur OS X.

Saurik a écrit tout un site de documentation sur Substrate. Cydia Substrate contient 3 composants majeurs: MobileHooker, MobileLoader et safe mode.

MobileHooker
MobileHooker est utilisé pour remplacer les fonctions du système. Ce processus est connu sous le nom d'hooking. Il y a 2 APIs que l'on pourrait utiliser:

MSHookMessage va remplacer l'implémentation du message obtenu dans l'Objective-C -[class selector] par replacement, et va retourner l'implémentation original. Pour accrocher une méthode de classe, fournir la meta class recherchée depuis objc_getMetaClass dans le MSHookeMessage(Ex)(Voir exemple en dessous). Ce remplacement dynamique est en fait une caractéristique Objective-C, et peut ainsi être utilisé method_setImplementation. MSHookMessage est non thread-safe et a été déprécié en faveur de MSHookMessageEx

MSHookFunction est comme MSHookMessage, mais c'est pour les fonctions utilisées en C / C++. Le remplacement doit être effectué au niveau de l'assemblage. Conceptuellement, MSHookFunction écrira des instructions qui sautent à la fonction de remplacement, et allouent des octets sur un emplacement de mémoire de commande, qui possède les instructions de découpe d'origine. Depuis iOS,par défaut une page de mémoire ne peut pas être à la fois écrite et exécutable, un patch du noyau doit être appliquée pour MSHookFunction pour fonctionner.

Dans la dernière version de MobileSubstrate, MSHookMessageaussi requière un patch du noyau pour les "supercall" de fermeture et ainsi pour accrocher toutes les méthodes correctement.

Code d'exemple:
Utilisation de MSHookFunction:

Utilisation de MSHookMessageEx:

Notez que si vous êtes accroché à une méthode de classe, vous devez mettre une méta-classe de la classe argument

Utilisation de MSHookFunction pour accrocher une fonction privée :

Parce que nous voulons que le pointeur ai un symbole privé, nous devons utiliser nlist.

MobileLoader
MobileLoader charge la 3ème partie du code de correction dans l'application en cours d'exécution. MobileLoader va d'abord se charger dans l'application de l'exécution utilisant la variable d'environnement DYLD_INSERT_LIBRARIES. Il recherche ensuite toutes les bibliothèques dynamiques dans le répertoire /Library/MobileSubstrate/DynamicLibraries/,Une extension doit utiliser le code de constructeur pour effectuer tous les travaux.