y a-t-il un endroit où je pourrais commencer la programmation de tweaks MobileSubstrate?

Après une recherche ici sur le forum, j'ai trouvé une question comme ça, et elle m'a redirigé vers un tutoriel qui leur a donné quelques instructions de base sur la manipulation du tremplin avec CapitainHook.

Pour commencer, je voudrais le faire avec %hooks normaux seulement. Tout soupçon où je pourrais commencer?

26
demandé sur edc1591 2011-05-25 06:11:14

3 réponses

Donc, puisque je (espère que je) suis loin d'un noob avec la programmation MobileSubstrate maintenant, et que j'ai vu cette question comme très populaire, j'ai décidé de créer une réponse couvrant tout ce que vous devez savoir sur le sujet brièvement.

Cette petite introduction est destinée à quiconquea une connaissance minimale de L'Objectif-C et sait ce qu'il fait.

NOTE : je vais me référer au chemin d'installation de theos comme $THEOS. Cela pourrait être ~/theos, /var/theos, /usr/theos... Ouais.

La façon la plus populaire de créer des extensions MobileSubstrate, également connu sous le nom tweaks , utilise Dustin Howett 's suite de construction theos. Les détails suivent:

Qu'est-Ce que theos?

Donc, nous devrions commencer avec ce que theos est pas:

  • Le Système D'Exploitation
  • Un Dieu Grec
  • Un compilateur

Et bien sûr, ce que theos ne fait pas :

  • vous apprend comment code.
  • crée tweaks sans vous avoir à penser
  • configure un environnement de construction complet et / ou installe le SDK iOS.

Theos est une suite multi-plateforme d'outils de développement pour la gestion, le développement et le déploiement de logiciels iOS sans l'utilisation de Xcode , avec:

  • Un système de construction robuste piloté par GNU Make, ce qui rend ses Makefiles facilement déployables partout avec theos installé trop.

  • NIC, un système de modèle de projet qui crée des projets vides prêts à construire à des fins variables.

  • Logos, une bibliothèque de directives préprocesseur intégré conçu pour rendre le développement D'extension MobileSubstrate facile et avec la génération de code optimale.

  • Emballage automatisé : Theos est capable de créer directement des paquets DEB pour la distribution dans Cydia, le plus populaire moyenne de distribution de paquets dans la scène jailbreak.

Comment installer theos?

  • sur OSX : installez le SDK iOS et suivez ces instructions .
  • sur iOS : installez le paquet BigBoss Recommended Tools de Cydia et exécutez installtheos3.
  • sur Linux : trouvez un moyen d'installer la chaîne d'outils et suivez ces instructions .
  • Sur Windows: Rien n'est impossible, mais si vous y parvenez, faites-le moi savoir. :P

Comment utiliser theos?

C'est une questiontrès posée et trop vague. Depuis theos est une suite complète d'outils de développement, il n'est pas logique de demander à Comment l'utiliser, mais, plus précisément, de demander Comment créer des logiciels à l'aide de theos.

Tout d'abord, ayez toujours la référence Theos Makefile en main. Il couvre les bases de la création d'un Théos Makefile, et cela inclut résoudre vos problèmes de liaison en ajoutant un framework ou un framework privé au projet .

Maintenant, vous pouvez soit créer votre propre Makefile à partir de zéro, créer votre petit clone/lien symbolique theos et commencer à coder, mais theos facilite cette étape. Vous pouvez simplement utiliser nic.pl.

Un exemple très simple d'exécution de NIC pour créer quelque chose peut être trouvé ici . Il est très simple et vous met en place tout de suite pour programmation.

Maintenant, voici où nous commençons à revenir au sujet.

Créer un tweak avec theos

Tout d'Abord, ne exécuter NIC quand à l'intérieur de $THEOS/bin. NIC va créer le répertoire du projet exactement où vous l'exécutez, et il évite tout projet en cours de création dans $THEOS/bin. Par conséquent, vous vous retrouverez avec une erreur simple qui peut être évitée en créant le répertoire du projet quelque part décent.

Exécutez $THEOS/bin/nic.pl et choisissez le modèle iphone/tweak. Vous être invité par des informations simples auxquelles vous savez peut - être bien répondre, à l'exception du dernier champ: MobileSubstrate bundle filter.

Comme une grande partie de MobileSubstrate n'est pas seulement le hooker (la bibliothèque qui change les méthodes/fonctions originales avec les vôtres), mais aussi le loader (la partie qui permet d'insérer votre accrochage dans certains processus), vous devez fournir ces informations de base pour que le chargeur sache où charger votre tweak. Ce champ n'est que le bundle identifiant de l'application dans laquelle ce projet sera inséré.

com.apple.springboard, l'option par défaut est l'identifiant de lot pour le Tremplin, l'application qui est:

  • L'écran d'accueil iOS
  • le lanceur / afficheur d'applications communes
  • la barre d'État iOS
  • Gestionnaire de certains processus d'arrière-plan essentiels de haut niveau

Par conséquent, il y a de nombreux réglages qui modifient le comportement de quelque chose d'aussi trivial que l'application lancement à quelque chose comme la façon dont l'ensemble de l'interface utilisateur de l'écran d'accueil ressemble.

Programmation d'un tweak avec des Logos

Maintenant, le répertoire généré par NIC contiendra:

  • Theos Makefile, où vous allez modifier les informations relatives à la compilation
  • le fichier control, dans lequel vous modifierez les informations relatives à l'emballage
  • un lien symbolique (ou un raccourci) vers $THEOS nommé theos/
  • le fichier de code principal, par défaut Tweak.xm. Il est déjà ajouté au Makefile pour la compilation, de sorte que vous pouvez commencer à coder tout de suite avec elle!

Sur savoir quoi faire

Maintenant, vous n'avez pas le code source de SpringBoard, et vous ne pouvez pas deviner quelles méthodes accrocher de nulle part. Par conséquent, vous avez besoin d'un jeu d'en-tête Tremplin. Pour cela, vous devez utiliser un outil nommé class-dump-z et l'exécuter dans le binaire SpringBoard (qui se trouve à l'intérieur du système de fichiers iOS) pour obtenir des fichiers d'en-tête comprenant toutes les déclarations de classe et ses méthodes à l'intérieur du application.

À partir de cela (un tas de devinettes et de journalisation d'un appel de méthode est impliqué), vous pouvez commencer à déconner avec ce que vous voulez dans un tweak.

Bien sûr, si vous n'êtes pas d'accrochage Tremplin vous pouvez utiliser class-dump-z comme vous le feriez dans d'autres binaires, tels que UIKit, MobileSafari, etc.

Notez que lors de l'inversion des applications App Store , elles seront cryptées. Vous devrez les déchiffrer (Je ne suis malheureusement pas autorisé à vous dire comment), puis exécutez simplement class-dump-z sur ils.

Sur l'obtention d'en-têtes privés

Des choses comme les faisceaux de préférences nécessitent les en-têtes pour les frameworks privés, dans ce cas les en-têtes du framework Preferences. Sinon, vous obtiendrez des erreurs de déclaration manquantes sans fin (comme je suppose que vous pourriez supposer).

Les obtenir a la même logique appliquée à l'étape précédente. Exécutez class-dump-z sur, dans ce cas, le binaire Preferences et lancez les en-têtes sur votre INCLUDEPATH. Le INCLUDEPATH est l'endroit où le compilateur va chercher les en-têtes que vous incluez comme #include <stdio.h>. Oui, stdio.h se trouve dans l'un des répertoires qui construisent INCLUDEPATH d'un compilateur!

Lors de la compilation avec un Makefile theos, $THEOS/include compte dans votre INCLUDEPATH, ce qui signifie que vous pouvez simplement lancer vos en-têtes déversés et les inclure plus tard.

(notez que les en-têtes de classe ne sont pas toujours parfaits, vous risquez donc d'avoir quelques erreurs de compilation liées à l'en-tête qui peuvent être facilement corrigées avec quelque chose comme supprimer une directive #import ou la changer, ou ajout de quelques déclarations.)

Code conseils

  • vous ne pouvez pas lier avec SpringBoard, donc chaque fois que vous avez besoin d'une classe de SpringBoard, vous devez utiliser la directive Logos %c ou la fonction objc_getClass, telle que définie à <objc/runtime.h> pour l'obtenir. Exemple: [%c(SBUIController) sharedInstance], [objc_getClass("SBUIController") sharedInstance].
  • lorsque vous ne savez pas ce qu'une méthode fait ou comment quelque chose fonctionne dans SpringBoard, essayez de le démonter avec IDA ou d'autres. J'utilise IDA Démo (
  • Regarder un exemple de code est incroyablement utile pour apprendre et comprendre comment quelque chose fonctionne à L'intérieur de SpringBoard ou d'autres (encore une fois..). Des gens formidables sur GitHub pour avoir un projets regardé sont rpetrich, chpwn, DHowett, EvilPenguin, et bien sûr, beaucoup plus.
  • pour trouver aussi sur la façon dont Tremplin et d'autres travaux (...), jetez un oeil à l'article d'une classe sur le iPhone Dev Wiki !

Épilogue

, Attendez, où est la bonne partie? Où puis-je apprendre à coder dans Tweak.xm?

Eh bien, la question initiale était en fait Comment démarrer la programmation MobileSubstrate tweaks?. Vous êtes tous configurés, espérons-le avec tous les en-têtes placés, prêts à taper make et à voir votre projet compilé comme par magie avec theos.

Tout ce que vous devez faire est maintenant de creuser réellement dans vos en-têtes ou votre démontage et aller accrocher, appeler, etc.!

Logos Reference contient exactement comment accrocher et utiliser d'autres fonctionnalités de Logos, et l'article MobileSubstrate sur le devwiki est également une excellente lecture.

, Bonne chance. Et en cas de doute, n'hésitez pas à rejoindre le canal IRC irc.saurik.com #theos. C'est un excellent moyen de discuter de sujets liés à theos et de poser des questions. Je suis surtout là, avec d'autres personnes très intelligentes;)

114
répondu Matoe 2012-07-19 11:50:26

Vous recherchez les Théos créés par DHowett.. Theos vous permet de faire des réglages, mais il ne vous donne pas tout ce dont vous avez besoin. Vous n'obtenez pas tous les en-têtes pour iOS, vous devez donc class-dump-z les frameworks/private-frameworks du SDK iOS. Commencez ici: http://iphonedevwiki.net/index.php/Theos/Getting_Started , ou rejoignez irc.saurik.net #theos pour plus d'aide. Vous pouvez aussi regarder mes projets qui utilisent theos: https://github.com/evilpenguin

2
répondu EvilPenguin 2012-02-01 17:52:57

On dirait que tu cherches theos. Jetez un oeil à ce, il devrait vous aider à démarrer.

1
répondu edc1591 2011-05-25 02:23:31