9.7 KiB
Partage UIActivity
À partir d'iOS 6, il est possible pour les applications tierces de partager des données (éléments) via des mécanismes spécifiques comme AirDrop, par exemple. Du point de vue de l'utilisateur, cette fonctionnalité est la feuille d'activité de partage système bien connue qui apparaît après avoir cliqué sur le bouton "Partager".
Une liste complète des mécanismes de partage intégrés disponibles peut être trouvée dans UIActivity.ActivityType. Si elle n'est pas considérée comme appropriée pour l'application, les développeurs ont la possibilité d'exclure certains de ces mécanismes de partage.
Envoi d'éléments
Lors du test de partage UIActivity
, vous devez prêter une attention particulière à :
- les données (éléments) partagées,
- les activités personnalisées,
- les types d'activités exclus.
Le partage de données via UIActivity
fonctionne en créant un UIActivityViewController
et en lui passant les éléments souhaités (URL, texte, une image) sur init(activityItems:applicationActivities:)
.
Si vous avez le code source, vous devriez jeter un coup d'œil au UIActivityViewController
:
- Inspectez les activités passées à la méthode
init(activityItems:applicationActivities:)
. - Vérifiez s'il définit des activités personnalisées (également passées à la méthode précédente).
- Vérifiez les
excludedActivityTypes
, s'il y en a.
Si vous n'avez que l'application compilée/installée, essayez de rechercher la méthode et la propriété précédentes, par exemple :
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
Réception d'éléments
Lors de la réception d'éléments, vous devez vérifier :
- si l'application déclare des types de documents personnalisés en regardant dans les UTI exportés/importés ("Info" onglet du projet Xcode). La liste de tous les UTI déclarés par le système peut être trouvée dans la documentation archivée des développeurs Apple.
- si l'application spécifie des types de documents qu'elle peut ouvrir en regardant dans les Types de documents ("Info" onglet du projet Xcode). S'ils sont présents, ils consistent en un nom et un ou plusieurs UTI qui représentent le type de données (par exemple, "public.png" pour les fichiers PNG). iOS utilise cela pour déterminer si l'application est éligible pour ouvrir un document donné (spécifier les UTI exportés/importés ne suffit pas).
- si l'application vérifie correctement les données reçues en regardant dans la mise en œuvre de
application:openURL:options:
(ou sa version obsolèteUIApplicationDelegate application:openURL:sourceApplication:annotation:
) dans le délégué de l'application.
Si vous n'avez pas le code source, vous pouvez toujours regarder dans le fichier Info.plist
et rechercher :
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
si l'application déclare des types de documents personnalisés exportés/importés.CFBundleDocumentTypes
pour voir si l'application spécifie des types de documents qu'elle peut ouvrir.
Une explication très complète sur l'utilisation de ces clés peut être trouvée sur Stackoverflow, mais voici un résumé :
UTExportedTypeDeclarations
: Utilisez-les pour définir vos propres UTI que votre application veut enseigner au système sur lequel elle est installée. Un UTI décrit une pièce de données (pas nécessairement des données situées à l'intérieur d'un fichier !) et nécessite au moins un identificateur (com.example.MyCoolDataType
). De plus, il peut avoir un nom (My Cool Data Type
), une ou plusieurs extensions de nom de fichier (.myCoolDataType
), un ou plusieurs types MIME (x-application/my-cool-data-type
), un ou plusieurs types de presse-papiers (utilisés lors du transfert de données de ce type en utilisant copier-coller), et un ou plusieurs types de système d'exploitation hérités. Habituellement, vous voulez également que les UTI se conforment aux UTI existants (par exemple, lorsque vous dites que votre UTI se conforme àpublic.data
, tout processus qui peut traiter des données génériques peut également traiter votre UTI).- par exemple : Vous définissez votre propre format de données de fichier propriétaire et vous voulez que ce format de données soit également connu des autres applications, plugins, extensions, etc.
UTImportedTypeDeclarations
: Vous utilisezUTImportedTypeDeclarations
pour enseigner au système des UTI que vous voulez qu'il connaisse dans le système mais qui ne sont pas vos UTI.- par exemple : Votre application est capable de lire le format de données propriétaire d'une autre application, mais vous ne savez pas si cette application est même installée sur le système.
CFBundleDocumentTypes
: Vous utilisezCFBundleDocumentTypes
pour indiquer au système les types de documents que votre application est capable d'ouvrir. À moins que vous ne listiez également vos UTI ici, ces UTI ne sont pas associés à votre application dans Finder et votre application n'apparaîtra pas dans le menuOuvrir avec >
.
La seule chose que vous devez toujours définir pour un type de document est le rôle. Le rôle peut être "Viewer" (vous pouvez afficher ce type de fichier mais vous ne pouvez pas l'éditer), "Editor" (vous pouvez afficher et éditer ce type de fichier), "None" (il n'est pas spécifié ce que vous pouvez faire avec ce fichier).- par exemple : Vous voulez que votre application soit associée à certains types de fichiers, identifiés soit par extension, par type MIME, soit par identificateur UTI. Si vous voulez que votre application soit associée à un type UTI, l'application doit soit importer, soit exporter le type, sinon le type peut ne pas être connu du système et l'enregistrement d'un type UTI inconnu n'a tout simplement aucun effet du tout.
Test dynamique
Pour envoyer des activités, vous pouvez :
- Accrocher la méthode que nous avons vue dans l'analyse statique (
init(activityItems:applicationActivities:)
) pour obtenir lesactivityItems
et lesapplicationActivities
. - Découvrir les activités exclues en accrochant la propriété
excludedActivityTypes
.
Pour recevoir des éléments, vous pouvez :
- Partager un fichier avec l'application depuis une autre application ou l'envoyer via AirDrop ou e-mail. Choisissez le fichier de sorte qu'il déclenche le dialogue "Ouvrir avec..." (c'est-à-dire qu'il n'y a pas d'application par défaut qui ouvrira le fichier, un PDF par exemple).
- Accrocher
application:openURL:options:
et toutes les autres méthodes qui ont été identifiées dans une analyse statique précédente. - Observer le comportement de l'application.
- En outre, vous pourriez envoyer des fichiers spécifiques mal formés et/ou utiliser une technique de fuzzing.
Lisez comment ici.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez The PEASS Family, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.