Publié par Andrey Batutin, développeur iOS senior, DataArt.Plus d'une ou deux fois, quand je suis arrivé au travail (ou que je suis juste sorti du lit), j'ai trouvé une lettre en colère dans le courrier, dont l'essence était que rien ne fonctionne dans l'assemblage de l'application par l'appstor, et que tout doit être réparé de toute urgence.
Parfois, la raison en était mes bancs. Parfois mes collègues. Et parfois même
Apple Inc lui-même .
Mais les scénarios les plus meurtriers étaient liés à des bogues qui n'étaient reproduits que sur les versions d'application / version. Rien ne déroute et vous fait hurler devant un macbook, comme l'impossibilité de connecter un débogueur à votre propre application et de voir ce qui s'y passe.
Des problèmes similaires sont créés par
APNS et son dépannage sur les
assemblys de version / ad-hoc.
Sur les assemblys où existe un environnement APNS de production, vous ne pouvez pas connecter un débogueur.
Sur les assemblys où il y a un débogueur, il n'y a pas de push de production APNS. Mais ils tombent généralement.
Apple, comme le dieu de l'Ancien Testament, donne d'une part une plate-forme où le jailbreak va bientôt entrer dans l'
histoire (et le piratage dans l'App Store reste au niveau d'erreur statistique), et l'autre fait que le développeur se sent comme un pauvre parent, le petit Oliver Twist, qui a osé demander plus de bouillie.
Voix off: "Oncle Apple, donnez-moi un autre certificat de distribution ..."Pour le programmeur moyen, faire quelque chose avec la version release / appstore d'une application iOS était presque impossible. Il était plus facile de quitter avant la sortie.
En bref:
La version finale est signée par le certificat de distribution et utilise le profil d'approvisionnement de distribution. Le droit interdit d’attacher un débogueur au processus de demande. De plus, lors du téléchargement de l'ipa sur l'App Store, le binaire est également crypté. Les extensions d'application sont signées séparément.
Autrement dit, l'auteur de l'application semble être en mesure de prendre et de signer à nouveau l'assembly App Store avec un certificat à l'aide du profil d'approvisionnement. Mais vous devez toujours savoir comment le faire. Mais même après cela, la question de savoir comment connecter le débogueur au processus d'application reste ouverte.
Par conséquent, nous devons nous concentrer exclusivement sur la non-adaptation au stade du développement. Et attrapez tous les bugs avant que l'application ne quitte l'App Store. Et les journaux, plus de journaux pour le dieu des journaux!

Mais récemment, un nouvel espoir se profile à l'horizon.

Dans la
partie précédente
, nous avons rencontré Frida, un merveilleux framework pour l'injection de code dynamique. Et contourné avec lui l'épinglage SSL dans l'excellent projet
FoodSniffer .
Dans cet article, nous allons nous familiariser avec un framework créé sur la base de Frida, qui facilite grandement la manipulation des versions de versions des applications iOS.
L'objection
vous permet d'
injecter FridaGadget dans une version iOS et de la signer à nouveau avec le certificat et le profil d'approvisionnement souhaités.
La préparation
Nous avons d'abord besoin de la version Release de FoodSniffer.
Remarque importante - lors de la création d'un ipa, désactivez «Inclure le code bit pour le contenu iOS».

Ensuite, nous avons besoin d'un profil d'approvisionnement pour la génération de build.
Pour l'obtenir:
- Installez l'application via Xcode sur l'appareil.
- Recherchez FoodSniffer.app dans le Finder.

- Accédez au pack FoodSniffer.

- Copiez embedded.mobileprovision de là dans le dossier avec votre version ipa.

Vous devriez obtenir quelque chose comme ceci:

Après cela, installez l'objection conformément aux
instructions . Je recommande fortement d'utiliser l'option virtualenv.
En plus de l'objection, nous aurons besoin d'
ios-deploy pour exécuter l'application corrigée sur l'appareil.
Re-signez l'application!
Dans le terminal, découvrez le hachage de l'identité de signe de code dont nous avons besoin:
sécurité trouver-identité -p codesigning -v
Nous sommes intéressés par l'identité 386XXX, car elle correspond au certificat de lot avec lequel l'application a été signée lors de l'installation via Xcode, à partir de laquelle nous avons obtenu le profil d'approvisionnement.
Injectez FridaGadget et re-signez notre application:
objection patchipa --source FoodSniffer / FoodSniffer.ipa --codesign-signature 386XXX --provision-file embedded.mobileprovision
Par conséquent, nous devrions obtenir
FoodSniffer-frida-codesigned.ipa .
Maintenant, nous avons besoin d'
ios-deploy pour installer et nous connecter à FridaGadget. Il s'agit d'une étape importante - si vous installez simplement ipa sur votre appareil via iTunes ou Xcode, cela ne fonctionnera pas pour se connecter à FridaGadget.
Après avoir déballé FoodSniffer-frida-codesigned.ipa :
décompressez FoodSniffer-frida-codesigned.ipaNous lançons notre application corrigée sur l'appareil:
ios-deploy --bundle Payload / FoodSniffer.app -W -dSi tout s'est bien passé, l'application devrait démarrer sur l'appareil, et dans le terminal, nous verrons:

Maintenant, dans un autre onglet de terminal, connectez l'objection au FridaGadget:
objection explorer
Profit!
Les petits pains que l'objection fournit
Contournement de l'épinglage SSL
Ici, tout est simple:
ios sslpinning disable
Maintenant, vous pouvez facilement utiliser Proxy Server pour surveiller le trafic de notre application, comme décrit dans la
première partie .
Dump UserDefaults
ios nsuserdefaults getÀ la fin du vidage, nous devrions voir
«mood_state» = «J'ai faim»
Vider le trousseau de l'application
vidage du trousseau ios
Et voici notre mot de passe super secret.
Récupération des données d'une base de données SQLite.Dans l'application, j'ai ajouté la base de données sqlite
chinook.db d'ici .
L'objection vous permet d'effectuer des requêtes directement dans la base de données comme suit.
- Connexion à la base de données:
sqlite connect chinook.db

- Demande-lui:
sqlite execute query select * from albums

Conclusion
Objection et Frida permettent enfin un travail relativement normal et simple avec les builds Ad Hoc et Distribution des applications iOS. Ils redonnent au programmeur le pouvoir sur leur propre application, cachée derrière les couches de protection avec lesquelles Apple enveloppe si soigneusement les applications iOS. De plus, Objection et Frida fonctionnent sur des appareils non jailbreakés. De plus, ils sont relativement faciles à utiliser.
Avec eux, j'ai l'espoir de rendre à nouveau le développement iOS formidable. Évitez en toute sécurité de saper le nouveau siège social d'Apple de l'intérieur.

Liens hyper (utiles)
Un étudiant d'Amsterdam sur le thème du code iOS .
https://labs.mwrinfosecurity.com/blog/repacking-and-resigning-ios-applications/https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2016/october/ios-instrumentation-without-jailbreak/ .
Code source de l'application iOS FoodSniffer .
Télégramme FridaUn merci spécial à
@manishrhll .
Remarque Tout ce qui précède doit être appliqué uniquement à leurs applications et ne pas essayer de briser le "Tinder" ou autre chose. Ça ne marchera toujours pas!