
ida_kernelcache上でC++サポートを強化するためのIDAPythonモジュール
iOSカーネルキャッシュのリバースエンジニアリングをはるかに便利にするIDAPythonモジュールです。
iOSカーネルキャッシュの大部分はC++で書かれており、明示的な直接呼び出しではなく多くの仮想テーブル参照を使用する複雑なバイナリコードにコンパイルされています。ida_kcppはida_kernelcacheのクラス階層再構築を活用します。IDBをマッピングし、バイナリ関数と元の仮想メソッドを同期します。これにより、C++仮想メソッド呼び出しをダブルクリックしてナビゲートし、そのxrefを見つけ、ライブリサーチ中にすべてを同期させ続けることで、iOSカーネルキャッシュ内を移動できるようになります。
ida_kcppはida_medigateに触発されていますが、iOSカーネルキャッシュの独自の構造を活かし、より強力で便利なリサーチ環境を提供します。

どちらもPyPIにはないため、それぞれのリポジトリのインストール手順に従ってください。
ida-setupを使用する場合:
ida-setup plugin install -e /path/to/ida-kcpp
または手動で:
ida_kernelcache と ida_kcpp が IDA の Python パスに含まれていることを確認します。~/.idapro/idapythonrc.py に追加することでも可能です:
import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
~/.idapro/plugins/ida_kcpp_plugin.py を ida_kcpp_plugin.py にシンボリックリンクするida_kernelcache がまだ実行されていない場合は、edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel を実行してください。Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... を実行します(警告のメッセージボックスがいくつか表示される場合がありますが、今は無視して構いません)。このステップでは、仮想関数名のプレフィックスをその関数が属するクラスに設定することで、仮想関数名をリネームします。また、すべての仮想関数をデコンパイルし、その this 引数を設定し、関連する ::vmethods メンバーをデコンパイルされた型への関数ポインタに変更します。このステップには時間がかかる場合があります...ida_kcpp は名前とプロトタイプを自動的に伝播し、IDA のナビゲーションの一部も変更するため、自動的には有効化されませんが、任意のタイミングで有効化または無効化できます。
edit >> Plugins >> Kernel Cache CPP >> Activate Plugin をクリックして ida_kcpp を有効化します(これにより Hexrays フックがインストールされ、ida_kernelcache.collect_class_info() も実行されます)。
Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin をクリックします。
仮想関数をリネームする際、マングル名(例: __ZNK10AppleA7IOP9method_86Ev_99)を編集することも、人間が読める名前(AppleA7IOP::method_86)に変更することもできます。後者は自動的にマングルされます。関連する ANCESTOR::vmethods メンバーもリネームされ、同じ仮想メソッドを実装するすべての仮想関数もリネームされます。
仮想関数プロトタイプの変更についても同様です。この場合、関連する ANCESTOR::vmethods メンバーのプロトタイプが、設定されたばかりの型への関数ポインタに変更され、this は ANCESTOR * として設定されます。また、ANCESTOR の DESCENDANTS における関連するすべての仮想メソッド実装のプロトタイプも変更され、その this は DESCENTANT * として設定されます。
::vmethods メンバーへの xref を追加します。ida_referee を使用することで、すべてのフィールド、特に ::vmethods メンバー(仮想呼び出し)の使用箇所をデコンパイラ内で追跡できます。
CTRL+SHIFT+Y ホットキーで、関連する ::vmethod メンバーの xrefs ウィンドウを直接開けるようにしました。IDA のバグにより、これは逆アセンブリウィンドウからのみ機能し、デコンパイラからは機能しません。デコンパイラ: 仮想関数呼び出しをダブルクリックすると、仮想メソッドの実装を選択できるウィンドウがポップアップ表示されます。

Local Types ビュー(Shift+F1):
Cmd+Enter を押しても実装に移動します(ダブルクリックよりクリーンな代替手段):: を含む構造体名をダブルクリックしてもジャンプしない IDA のバグを修正しました。Cellebrite Labs の Uriel Malin、Ievgen Solodovnykov、Omer Porzecanski によって作成されました。 macOS 上の Python 3.13 を備えた IDA 9.2 向けに開発およびテストされています