
IDA 9.X向けiOS Syscall Explorer
AArch64 バイナリ内の SVC 命令をスキャンし、X16 レジスタから BSD システムコール番号を解決して、すべての結果をリッチなドッキング可能な UI で表示する IDA Pro スクリプトです。システムコールごとの出現箇所ナビゲーションと、ライブの man ページドキュメント取得に対応しています。
IDA Pro 9.x での iOS / macOS リバースエンジニアリング向けに構築されています。 これを開発した唯一の目的は、改ざん防止対策が施された iOS プラットフォームをシステムコールのレベルまでリバースエンジニアリングする際に、コンソールへシステムコールを出力することに飽きて、見栄えの良い表示とライブドキュメントの取得を同時に実現する何かが欲しかったためです。
この ReadMe 全体は AI 生成であり、スクリプトの大部分も同様です。私がベースを書き、その後 Claude Opus 4.7 に魔法をかけてもらって、美しいユーザーインターフェースとともにすべてをまとめ上げました。
SVC #0x80 命令を検出し、最大 8 命令前まで遡って MOV X16, #num の設定を解決します0x5、5)、または関数名で検索。ドロップダウンからカテゴリでもフィルタリング可能Enter キーで IDA 内のそのアドレスにジャンプman.freebsd.org から完全な man 2 ページを取得(Darwin は BSD 由来)。結果はセッションごとにキャッシュされますCtrl+F で検索ボックスにフォーカス。選択した出現箇所で Enter を押すとそこへ移動します| 要件 | バージョン |
|---|---|
| IDA Pro | 9.x(9.3 でテスト済み) |
| Python | IDA に同梱 |
| PySide6 | IDA 9 に同梱 |
requests | 任意 — man ページ取得にのみ必要 |
PyQt5 フォールバック — このスクリプトは、古いバージョン向けの IDA の PyQt5 シムでも動作します。
requests を IDA の Python 環境にインストールするには、IDA の Python コンソールで次を実行します:
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install", "requests"])
syscall_ios.py をマシン上の任意の場所にコピーします。アナライザーパネルが自動的に開き、スキャンが開始されます。
File → Script file… → syscall_ios.py
または、IDA の Script command(Shift+F2)を使用して、直接貼り付けて実行します。

色は IDA Pro 自身の逆アセンブルハイライトパレットに合わせているため、出力はネイティブな見た目になります。
JSON エクスポート は次のようなファイルを生成します:
[
{
"name": "read",
"number": 3,
"number_hex": "0x3",
"address": "0x1001a4bc",
"rva": "0x4bc",
"function": "sub_1001A0000",
"category": "File I/O"
},
...
]
内蔵テーブルは、Darwin/XNU BSD レイヤー(0x2000000 クラス)の 556 のシステムコール をカバーしており、以下を含みます:
read、write、open、mmap、socket、…)csops、guarded_open_np、memorystatus_control、kevent_qos、…)pid_hibernate、abort_with_payload、necp_*、os_fault_with_payload、…)psynch_mutexwait、psynch_cvwait、、…)異なるトラップクラスを通る Mach トラップと libsystem ラッパーは含まれません — これは BSD クラス(X16 = 0x2000000 | num を伴う SVC #0x80)のみを対象としています。
SVC 命令から最大 8 命令以内の MOV X16, #imm を後方にスキャンして解決されます。間接ロード(例: LDR X16, [...])は UNKNOWN と表示されます。SLIDE 定数は、表示されるアドレスには影響しません — ライブの lldb セッションとの関連付けを行うためのコメント参照として保持されています。| カテゴリ | 色 | IDA での相当 |
|---|
| ファイル I/O | #4EC9B0 | 型 / 構造体 |
| ネットワーク | #569CD6 | キーワード |
| メモリ | #DCDCAA | 関数名 |
| プロセス | #CE9178 | 文字列リテラル |
| スレッド | #9CDCFE | 変数 |
| IPC | #C586C0 | 列挙型 / マクロ |
| セキュリティ | #F44747 | エラー / 警告 |
| 時刻 | #6A9955 | コメント |
| その他 | #858585 | — |
bsdthread_*workq_open、workq_kernreturn、kqueue_workloop_ctl、…)audit_*、__mac_*)