iOS Basic Testing Operations

HackTricksをサポートする

iOSデバイスの識別とアクセスの概要

iOSデバイスのUDIDを特定する

iOSデバイスを一意に識別するために、UDIDと呼ばれる40桁のシーケンスが使用されます。macOS Catalina以降では、Finderアプリでこれを見つけることができます。iTunesはもはや存在しないためです。デバイスがUSB経由で接続され、Finderで選択されると、その名前の下の詳細をクリックすることでUDIDを含む他の情報が表示されます。

Catalina以前のmacOSバージョンでは、iTunesがUDIDの発見を助けます。詳細な手順はこちらにあります。

コマンドラインツールはUDIDを取得するための代替方法を提供します:

  • I/Oレジストリエクスプローラーツール ioregを使用する:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • ideviceinstallerをmacOS(およびLinux)で使用する:

$ brew install ideviceinstaller
$ idevice_id -l
  • system_profilerの利用:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • instrumentsを使用してデバイスをリストする:

$ instruments -s devices

デバイスシェルへのアクセス

SSHアクセスは、OpenSSHパッケージを脱獄後にインストールすることで有効になり、ssh root@<device_ip_address>を介して接続できます。デバイスを保護するために、ユーザーrootmobileのデフォルトパスワード(alpine)を変更することが重要です。

USB経由のSSHは、Wi-Fiがない場合に必要となり、iproxyを使用してデバイスポートをSSH接続用にマッピングします。この設定により、次のコマンドを実行することでUSB経由でSSHアクセスが可能になります:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

オンデバイスシェルアプリケーション、例えば NewTerm 2 は、直接デバイスとのインタラクションを容易にし、特にトラブルシューティングに役立ちます。リバースSSHシェルも、ホストコンピュータからのリモートアクセスのために確立できます。

忘れたパスワードのリセット

忘れたパスワードをデフォルト(alpine)にリセットするには、/private/etc/master.passwd ファイルを編集する必要があります。これには、既存のハッシュを rootmobile ユーザーエントリの隣にある alpine のハッシュに置き換えることが含まれます。

データ転送技術

アプリデータファイルの転送

SSHとSCPによるアーカイブと取得: tar を使用してアプリケーションのデータディレクトリをアーカイブし、その後 scp を使用して転送するのは簡単です。以下のコマンドは、データディレクトリを .tgz ファイルにアーカイブし、その後デバイスからプルします:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

グラフィカルユーザーインターフェースツール

iFunboxとiExplorerの使用: これらのGUIツールは、iOSデバイス上のファイルを管理するのに便利です。しかし、iOS 8.4以降、Appleはデバイスが脱獄されていない限り、これらのツールのアプリケーションサンドボックスへのアクセスを制限しました。

ファイル管理のためのObjectionの使用

Objectionによるインタラクティブシェル: Objectionを起動すると、アプリのBundleディレクトリにアクセスできます。ここから、アプリのDocumentsディレクトリに移動し、ファイルを管理したり、iOSデバイスとの間でファイルをダウンロードおよびアップロードしたりできます。

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

アプリの取得と抽出

IPAファイルの取得

オーバー・ザ・エア(OTA)配信リンク: OTAを介してテスト用に配布されたアプリは、npmを介してインストールされるITMSサービスアセットダウンローダーツールを使用してダウンロードでき、IPAファイルをローカルに保存します。

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

アプリバイナリの抽出

  1. IPAから: IPAを解凍して、復号化されたアプリバイナリにアクセスします。

  2. 脱獄デバイスから: アプリをインストールし、メモリから復号化されたバイナリを抽出します。

復号化プロセス

手動復号化の概要: iOSアプリバイナリはAppleによってFairPlayを使用して暗号化されています。リバースエンジニアリングを行うには、メモリから復号化されたバイナリをダンプする必要があります。復号化プロセスには、PIEフラグの確認、メモリフラグの調整、暗号化されたセクションの特定、そしてこのセクションを復号化された形式にダンプして置き換えることが含まれます。

PIEフラグの確認と修正:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

暗号化セクションの特定とメモリのダンプ:

otoolを使用して暗号化セクションの開始および終了アドレスを特定し、gdbを使用して脱獄したデバイスからメモリをダンプします。

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

暗号化セクションの上書き:

元のアプリバイナリの暗号化セクションを復号化されたダンプで置き換えます。

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

復号の最終化: MachOViewのようなツールを使用して、バイナリのメタデータを変更し、cryptidを0に設定して暗号化がないことを示します。

復号 (自動的に)

frida-ios-dump

frida-ios-dumpツールは、iOSデバイスから自動的にアプリを復号して抽出するために使用されます。最初に、dump.pyを設定してiOSデバイスに接続する必要があり、これはiproxyを介してローカルホストのポート2222を使用するか、デバイスのIPアドレスとポートを直接使用して行うことができます。

デバイスにインストールされているアプリケーションは、次のコマンドでリストできます:

$ python dump.py -l

特定のアプリ、例えばTelegramをダンプするには、次のコマンドを使用します:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

このコマンドはアプリのダンプを開始し、現在のディレクトリに Telegram.ipa ファイルを作成します。このプロセスは、未署名または偽署名されたアプリを ios-deploy のようなツールを使用して再インストールできるため、脱獄デバイスに適しています。

flexdecrypt

flexdecrypt ツールは、そのラッパー flexdump とともに、インストールされたアプリケーションからIPAファイルを抽出することを可能にします。デバイス上での flexdecrypt のインストールコマンドには、.deb パッケージのダウンロードとインストールが含まれます。 flexdump は、以下のコマンドに示すように、アプリをリストおよびダンプするために使用できます。

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbakは、アプリの復号化に脱獄したデバイスを必要とする別のFridaベースのツールです:

bagbak --raw Chrome

r2flutch

r2flutchは、radareとfridaの両方を利用して、アプリの復号化とダンプを行います。詳細はGitHubページで確認できます。

アプリのインストール

サイドロードは、公式App Storeの外でアプリケーションをインストールすることを指します。このプロセスはinstalldデーモンによって処理され、アプリはApple発行の証明書で署名される必要があります。脱獄したデバイスはAppSyncを通じてこれを回避し、偽署名されたIPAパッケージのインストールを可能にします。

サイドロードツール

  • Cydia Impactor: iOSのIPAファイルやAndroidのAPKファイルを署名してインストールするためのツールです。ガイドやトラブルシューティングはyalujailbreak.netで確認できます。

  • libimobiledevice: iOSデバイスと通信するためのLinuxおよびmacOS用のライブラリです。USB経由でアプリをインストールするためのideviceinstallerのインストールコマンドと使用例が提供されています。

  • ipainstaller: このコマンドラインツールは、iOSデバイスに直接アプリをインストールすることを可能にします。

  • ios-deploy: macOSユーザー向けに、ios-deployはコマンドラインからiOSアプリをインストールします。IPAを解凍し、直接アプリを起動するために-mフラグを使用することがプロセスの一部です。

  • Xcode: Xcodeを利用して、Window/Devices and Simulatorsに移動し、アプリをInstalled Appsに追加することでアプリをインストールします。

非iPadデバイスへのアプリケーションインストールの許可

iPhoneやiPod touchデバイスにiPad専用アプリケーションをインストールするには、Info.plistファイル内のUIDeviceFamily値を1に変更する必要があります。ただし、この変更は署名検証チェックのためにIPAファイルの再署名を必要とします。

注意: この方法は、アプリケーションが新しいiPadモデル専用の機能を要求する場合、古いiPhoneやiPod touchを使用していると失敗する可能性があります。

参考文献

Support HackTricks

Last updated