iOS UIActivity Sharing

iOS UIActivity Sharing

Support HackTricks

UIActivity Sharing Simplified

iOS 6以降、サードパーティアプリケーションは、Appleのアプリ間通信ガイドに記載されているように、AirDropなどのメカニズムを使用して、テキスト、URL、画像などのデータを共有できるようになりました。この機能は、「共有」ボタンと対話することで表示されるシステム全体の_共有アクティビティシート_を通じて現れます。

すべての組み込み共有オプションの包括的な列挙は、UIActivity.ActivityTypeで利用可能です。開発者は、アプリケーションに不適切と判断した場合、特定の共有オプションを除外することができます。

データを共有する方法

注意すべき点は以下の通りです:

  • 共有されるデータの性質。

  • カスタムアクティビティの含有。

  • 特定のアクティビティタイプの除外。

共有は、共有するアイテムを渡すUIActivityViewControllerのインスタンス化を通じて促進されます。これは、次のように呼び出すことで実現されます:

$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:

Developers should scrutinize the UIActivityViewController for the activities and custom activities it's initialized with, as well as any specified excludedActivityTypes.

データの受信方法

データを受信する際に重要な側面は以下の通りです:

  • カスタムドキュメントタイプの宣言。

  • アプリが開けるドキュメントタイプの指定。

  • 受信データの整合性の確認

ソースコードにアクセスできなくても、Info.plistを調査してUTExportedTypeDeclarationsUTImportedTypeDeclarationsCFBundleDocumentTypesのようなキーを確認することで、アプリが扱えるドキュメントタイプを理解できます。

これらのキーに関する簡潔なガイドはStackoverflowで入手可能で、システム全体での認識のためにUTIを定義およびインポートし、アプリとの統合のためにドキュメントタイプを関連付ける重要性を強調しています。

動的テストアプローチ

アクティビティの送信をテストするには、次のことができます:

  • init(activityItems:applicationActivities:)メソッドにフックして、共有されるアイテムとアクティビティをキャプチャします。

  • excludedActivityTypesプロパティをインターセプトして除外されたアクティビティを特定します。

アイテムの受信には、次のことが含まれます:

  • 他のソース(例:AirDrop、メール)からアプリにファイルを共有し、「Open with...」ダイアログを表示させます。

  • 静的分析中に特定された他のメソッドの中でapplication:openURL:options:にフックして、アプリの応答を観察します。

  • 不正なファイルやファジング技術を使用してアプリの堅牢性を評価します。

参考文献

Support HackTricks

Last updated