Exploration mobile d'exécution iOS avec Objection, ou pirater notre propre application



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.

Objection


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:

  1. Installez l'application via Xcode sur l'appareil.
  2. Recherchez FoodSniffer.app dans le Finder.

  3. Accédez au pack FoodSniffer.

  4. 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.ipa

Nous lançons notre application corrigée sur l'appareil:

ios-deploy --bundle Payload / FoodSniffer.app -W -d

Si 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.

  1. Connexion à la base de données:

    sqlite connect chinook.db

  2. 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 Frida

Un 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!

Source: https://habr.com/ru/post/fr429196/


All Articles