PyMobileDevice3
開発者ツールの使用 (iOS 17.0 以上)
よく使用されるアクション
OpenSSL ライブラリ
libusb 依存関係
概要
インストール
使用法
ビットとバイト (Python API)
貢献する
お役立ち情報
著作権表示
pymobiledevice3
、iDevices (iPhone など) を操作するための純粋な Python3 実装です。これは、このツールがアーキテクチャとプラットフォームの両方で汎用的であり、以下でサポートおよびテストされていることを意味します。
窓
Linux
macOS
主な機能は次のとおりです。
bonjour を介したデバイス検出
TCPポートフォワーディング
syslog 行の表示 (デバッグを含む)
プロファイル管理
アプリケーション管理
ファイル システム管理 (AFC)
クラッシュレポート管理
ネットワークスニッフィング (PCAP)
ファームウェアのアップデート
装着イメージ
通知のリスニングとトリガー ( notify_post()
API)
SpringBoard オプションのクエリと設定
WebInspector 機能の自動化
DeveloperDiskImage の機能:
スクリーンショットの撮影
場所をシミュレートする
プロセス管理
KDebug メッセージのスニッフィング ( strace機能++)
プロセス監視( top
ような)
アクセシビリティ機能
syslog とサインポストの両方を含む oslog のスニッフィング
バックアップ
PyPi からインストールできます。
python3 -m pip install -U pymobiledevice3
または、最新バージョンをソースから直接インストールします。
git clone [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip install -U -e 。
以下を~/.zshrc
に追加することで、利用可能なすべてのサブコマンドのオートコンプリートをインストールすることもできます。
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
現在、古い iOS バージョン (13 未満) で使用する場合は、openssl が明示的に必要です。
macOS の場合:
醸造インストールopenssl
Linux の場合:
sudo apt install openssl
Recovery または DFU モードでデバイスと対話するには、 libusb
がインストールされている必要があります ( restore
サブコマンドの処理に必要です)。
インストール手順は、実際のプラットフォームに応じて異なります。
macOS の場合:
# using homebrewbrew install libusb# using MacPortssudo port install libusb
Linux の場合:
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
Windows の場合:
最新リリースのバイナリをダウンロードするには、次の libusb Web サイトを使用します。
https://libusb.info/
CLI サブコマンドは、デバイス内での対話に使用されるプロトコル層によって大まかに分割されます。たとえば、DeveloperDiskImage から派生したすべての機能には、 developer
サブコマンドからアクセスできます。これは、存在しないすべての機能がそれを必要としないことも意味します。
これは主な CLI の使用法です。
Usage: pymobiledevice3 [OPTIONS] COMMAND [ARGS]... Interact with a connected iDevice (iPhone, iPad, ...) For more information please look at: https://github.com/doronz88/pymobiledevice3 Options: -h, --help Show this message and exit. Commands: activation Perform iCloud activation/deactivation or query the current state afc Manage device multimedia files amfi Enable/Disable developer-mode or query its state apps Manage installed applications backup2 Backup/Restore options bonjour Browse devices over bonjour companion List paired "companion" devices crash Manage crash reports developer Perform developer operations (Requires enable of Developer-Mode) diagnostics Reboot/Shutdown device or access other diagnostics services lockdown Pair/Unpair device or access other lockdown services mounter Mount/Umount DeveloperDiskImage or query related info notification Post/Observe notifications pcap Sniff device traffic power-assertion Create a power assertion processes View process list using diagnosticsd API profile Managed installed profiles or install SSL certificates provision Manage installed provision profiles remote Create RemoteXPC tunnels restore Restore an IPSW or access device in recovery mode springboard Access device UI syslog Watch syslog messages usbmux List devices or forward a TCP port webinspector Access webinspector services version Query pymobiledevice3 version
注:現在、これは macOS と Windows (iOS 17.3.1 まで) でのみ正式にサポートされていますが、新しいロックダウン トンネルを使用する iOS 17.4 以降のすべてのプラットフォームで完全にサポートされています。 Windows と iOS 17.0 ~ 17.3.1 を連携させるには、追加のドライバーをインストールする必要があります (ドライバーは提供されていません)。
iOS 17.0 以降、Apple は iOS デバイスで動作する新しい CoreDevice フレームワークを導入しました。このフレームワークは RemoteXPC プロトコルに依存しています。開発者サービスと通信するには、まず次の 2 つの形式のいずれかで信頼できるトンネルを作成する必要があります。
デバイスを自動的に検出して接続を確立するために、 tunneld
という名前のトンネルサーバーを起動します。
以下を実行します。
# Corellium インスタンスや AppleTV など、デバイスがリモート ペアリングをサポートしている場合は、# 最初にペアリングする必要があります。# 通常の iOS デバイスではこの手順は必要ありません python3 -m pymobiledevice3 リモート ペア# Windows では、特権シェルを使用します python3 - m pymobiledevice3 リモートトンネル
start-tunnel
使用して手動でトンネルを作成する
以下を実行します。
# Corellium インスタンスや AppleTV など、デバイスがリモート ペアリングをサポートしている場合は、# 最初にペアリングする必要があります# 通常の iOS デバイスでは、この手順は必要ありません python3 -m pymobiledevice3 リモート ペア# 注: Windows では、特権シェルを使用してくださいiOS 17.4 以降の次のコマンドでは、この接続タイプが必要な場合は、より高速なロックダウン トンネル sudo python3 -m pymobiledevice3 lockdown start-tunnel# を使用できます。 Wi-Fi 経由でも利用できるようにするには、itpython3 -m pymobiledevice3 lockdown wifi-connections on# を有効にします。# 古い iOS バージョンでは、代わりに以下を使用してください# WiFi トンネルを強制するために `-t wifi` を渡すこともできますsudo python3 -m pymobiledevice3 Remote start-tunnel
必要な接続の詳細を示す次の出力が表示されます。
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
このコマンドは新しい TUN/TAP デバイスを作成するという高い特権の操作であるため、高い特権で実行する必要があります。
現在、(ほぼ) すべての pymobiledevice3 は、トンネル経由でサービスに接続するための追加の--rsd
/ --tunnel
オプションを受け入れます。特に--tunnel
オプションは、開発者サービスの作業を簡素化するために、 InvalidServiceError
エラーが発生したときに常に暗黙的に試行されます。次のようにして、それらのいずれかを実行してみることができます。
# DVT サービスへのアクセス# --tunnel オプションは、空の文字列、または特定のデバイスの UDID を受け入れることができます# デフォルト以外のポートでのサービスでトンネリングされる場合、UDID には :PORT の接尾辞が付けられる場合があります python3 -m pymobiledevice3 developer dvt ls / --tunnel ''# または、単に `--tunnel` オプションなしで、トンネルが python3 -m を実行していると仮定しますpymobiledevice3 developer dvt ls /# または、手動のトンネル詳細を使用することもできますpython3 -m pymobiledevice3 developer dvt ls / --rsd fd7b:e5b:6f53::1 64337# また、他の「通常の」ロックダウン サービスにアクセスすることもできますpython3 -m pymobiledevice3 syslog ライブ --トンネル ''
pymobiledevice3
使用してデバイス上でできることはたくさんあります。これは、いくつかの一般的な操作の単なる要約です。
# 接続されているデバイスをリストするpymobiledevice3 usbmux list# bonjourpymobiledevice3 を使用して RemoteXPC デバイスを参照する bonjour rsd# すべての syslog 行を表示する (デバッグ メッセージを含む) pymobiledevice3 syslog live# 「SpringBoard」という単語を含むメッセージのみをフィルタリングする pymobiledevice3 syslog live -m SpringBoard# デバイスを再起動するpymobiledevice3 Diagnostics restart# devicepymobiledevice3 crash からすべてのクラッシュ レポートを取得しますpull /path/to/crashes# メディア ディレクトリを管理するpymobiledevice3 afc shell# インストールされているすべてのアプリケーションとその詳細をリストするpymobiledevice3 apps list# 特定のセットのみをクエリする os appspymobiledevice3 apps query BUNDLE_ID1 BUNDLE_ID2# HOST からデバイスへの TCP トンネルを作成するpymobiledevice3 usbmux forward HOST_PORT DEVICE_PORT# デバイスの完全バックアップを作成しますpymobiledevice3 backup2 backup --full DIRECTORY# 指定されたバックアップを復元しますpymobiledevice3 backup2 復元 DIRECTORY# 指定された IPSW によってソフトウェア アップデートを実行します file/url:pymobiledevice3 stop update -i /path/to/ipsw | url# 注: 次の webinspector サブコマンドでは、Web インスペクター機能をオンにする必要があります# 開いているタブでインタラクティブな JavaScript シェルを取得しますpymobiledevice3 webinspector js-shell# 現在開かれているタブのリストはデバイスのブラウザですpymobiledevice3 webinspector opens-tabs# 注: 次の webinspector サブコマンドリモート オートメーション機能もオンにする必要があります# 新しいリモート オートメーションでインタラクティブな JavaScript シェルを取得します tabpymobiledevice3 webinspector js-shell --automation# オートメーション セッションを起動して、指定された URL を表示しますpymobiledevice3 webinspector launch URL# Selenium のようなシェルを取得しますpymobiledevice3 webinspector shell# 注: 次のサブコマンドでは、DeveloperMode をオンにする必要があります。デバイスに PIN コードがない場合は、次のコマンドを使用して自動的にオンにすることができます。pymobiledevice3 amfi Enable-developer-mode# DDI をマウントします (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# 注: 次のサブコマンドは、両方の DeveloperMode が有効であることを前提としています。オンになり、DDI がマウントされました# 「緯度経度」の場所をシミュレートします (iOS < 17.0)pymobiledevice3 開発者シミュレート場所セット -- 緯度long# 「緯度経度」の位置をシミュレートします (iOS >= 17.0)pymobiledevice3 developer dvt Simulate-location set -- lat long# .GPX ファイルを再生しますpymobiledevice3 developer dvt Simulate-location play Route.gpx# -500 から 500 までの間のランダムなタイミング ノイズを追加しますGPX ファイルの 2 点間の時間に 500 ミリ秒pymobiledevice3 開発者 dvtシミュレート-場所の再生ルート.gpx 500# シミュレートをクリアしますlocation:pymobiledevice3 開発者 dvt Simulate-location clear# デバイスからスクリーンショットを取得します:pymobiledevice3 開発者 dvt スクリーンショット /path/to/screen.png# 詳細なプロセス リストを表示します (ppid、uid、guid、サンドボックスなどを含む) pymobiledevice3開発者 dvt sysmon プロセス シングル# スニッフィング oslogpymobiledevice3 開発者 dvt oslog# プロセスを強制終了pymobiledevice3 開発者 dvt kill PID#指定されたディレクトリ内のファイルを一覧表示します (chroot されていない) pymobiledevice3 developer dvt ls PATH# バンドル名でアプリを起動しますpymobiledevice3 developer dvt launch com.apple.mobilesafari# すべての KDebug イベントをスニッフィングして `strace` のような出力を取得します:pymobiledevice3 developer dvt core-profile-session parse-live# すべての KDebug イベントをファイルに取り込み、後で次のようなツールを使用して解析します。 [`pykdebugparser`](https://github.com/matan1008/pykdebugparser)、`fs_usage` など...pymobiledevice3 開発者 dvt core-profile-session save FILENAME# デバイスの拡張情報 (カーネル名、チップセットなど) を取得します...)pymobiledevice3 開発者 dvt device-information# 特定の PID のエネルギー消費量を監視するpymobiledevice3 開発者 dvtエネルギー PID1 PID2 ...
lockdownd
との通信の詳細を理解するには、または Python API を学習したい場合は、この記事を参照することをお勧めします。
iDevice プロトコル層を理解する
「貢献」を参照してください。
その他をご覧ください
ライブラリは、Windows プラットフォーム上の asyncio に WindowsSelectorEventLoopPolicy を使用します。その他のディスカッションを参照してください
この作品は GPL 3.0 に基づいてライセンスされており、以下の主要な貢献者の功績が認められています。
ヘクター・マーティン「マルカン」 [email protected]
マチュー・ルナール
doronz [email protected]
matan1008 [email protected]
ガイ・ソルトン
netanelc305 [email protected]