mcpField
I
idapython

idapython

github.com/mrexodiaセキュリティ13.2k240 回インストール5 週間前に更新
リポジトリ

idapython について

idapythonは、最新の`ida_*`モジュールでIDAのリバースエンジニアリング作業をスクリプト化するSkillです。データベース分析、逆コンパイル、型や名前の操作、命令、クロスリファレンスのAPI例をまとめています。

主な機能

  1. 01作業に応じた`ida_*`モジュールの選択
  2. 02関数と命令の反復処理
  3. 03バイト列の読み取りとパッチ
  4. 04名前、型、構造体の操作
  5. 05関数の逆コンパイルとctree走査
  6. 06クロスリファレンスと文字列の確認

活用シーン

  1. 01IDAデータベース分析スクリプトの作成
  2. 02関数、命令、クロスリファレンスの列挙
  3. 03関数を逆コンパイルして変数や呼び出しを確認
  4. 04アドレスへの型適用やバイト列のパッチ

MCP 対応

READMEでは基数変換に`int_convert` MCPツールを使うよう記載されていますが、MCPサーバーへの接続や管理方法は説明されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mrexodia/ida-pro-mcp --skill idapython

インストール後、Claude Code で/idapythonを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

docs/
ida_auto.md
ida_auto.rst
ida_bitrange.md
ida_bitrange.rst
ida_bytes.md
ida_bytes.rst
ida_dbg.md
ida_dbg.rst
ida_dirtree.md
ida_dirtree.rst
ida_diskio.md
ida_diskio.rst
ida_entry.md
ida_entry.rst
ida_expr.md
ida_expr.rst
ida_fixup.md
ida_fixup.rst
ida_fpro.md
ida_fpro.rst
ida_frame.md
ida_frame.rst
ida_funcs.md
ida_funcs.rst
ida_gdl.md
ida_gdl.rst
ida_graph.md
ida_graph.rst
ida_hexrays.md
ida_hexrays.rst

詳細

IDAPython

最新の ida_* モジュールを使用してください。従来の idc モジュールは避けてください。

モジュール一覧

タスクモジュール主な項目
バイト/メモリida_bytesget_bytes、patch_bytes、get_flags、create_*
関数ida_funcsfunc_t、get_func、add_func、get_func_name
名前ida_nameset_name、get_name、demangle_name
型ida_typeinftinfo_t、apply_tinfo、parse_decl
デコンパイラーida_hexraysdecompile、cfunc_t、lvar_t、ctree ビジター
セグメントida_segmentsegment_t、getseg、add_segm
クロスリファレンスida_xrefxrefblk_t、add_cref、add_dref
命令ida_uainsn_t、op_t、decode_insn
スタックフレームida_frameget_frame、define_stkvar
反復処理idautilsFunctions()、Heads()、XrefsTo()、Strings()
UI/ダイアログida_kernwinmsg、ask_*、jumpto、Choose
データベース情報ida_idainf_get_*、inf_is_64bit()
解析ida_autoauto_wait、plan_and_wait
フローグラフida_gdlFlowChart、BasicBlock
レジスター追跡ida_regfinderfind_reg_value、reg_value_info_t

基本パターン

関数を反復処理する
for ea in idautils.Functions():
    name = ida_funcs.get_func_name(ea)
    func = ida_funcs.get_func(ea)
関数内の命令を反復処理する
for head in idautils.FuncItems(func_ea):
    insn = ida_ua.insn_t()
    if ida_ua.decode_insn(insn, head):
        print(f"{head:#x}: {insn.itype}")
クロスリファレンス
for xref in idautils.XrefsTo(ea):
    print(f"{xref.frm:#x} -> {xref.to:#x} type={xref.type}")
バイトを読み書きする
data = ida_bytes.get_bytes(ea, size)
ida_bytes.patch_bytes(ea, b"\x90\x90")
名前
name = ida_name.get_name(ea)
ida_name.set_name(ea, "new_name", ida_name.SN_NOCHECK)
関数をデコンパイルする
cfunc = ida_hexrays.decompile(ea)
if cfunc:
    print(cfunc)  # pseudocode
    for lvar in cfunc.lvars:
        print(f"{lvar.name}: {lvar.type()}")
ctree(デコンパイルされた AST)を走査する
class MyVisitor(ida_hexrays.ctree_visitor_t):
    def visit_expr(self, e):
        if e.op == ida_hexrays.cot_call:
            print(f"Call at {e.ea:#x}")
        return 0

cfunc = ida_hexrays.decompile(ea)
MyVisitor().apply_to(cfunc.body, None)
型を適用する
tif = ida_typeinf.tinfo_t()
if ida_typeinf.parse_decl(tif, None, "int (*)(char *, int)", 0):
    ida_typeinf.apply_tinfo(ea, tif, ida_typeinf.TINFO_DEFINITE)
構造体を作成する
udt = ida_typeinf.udt_type_data_t()
m = ida_typeinf.udm_t()
m.name = "field1"
m.type = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT32)
m.offset = 0
m.size = 4
udt.push_back(m)
tif = ida_typeinf.tinfo_t()
tif.create_udt(udt, ida_typeinf.BTF_STRUCT)
tif.set_named_type(ida_typeinf.get_idati(), "MyStruct")
文字列の一覧
for s in idautils.Strings():
    print(f"{s.ea:#x}: {str(s)}")
解析の完了を待つ
ida_auto.auto_wait()  # Block until autoanalysis completes

主な定数

定数値/用途
BADADDR無効なアドレスを示す値
ida_name.SN_NOCHECK名前の検証をスキップ
ida_typeinf.TINFO_DEFINITE型の適用を強制
o_reg、o_mem、o_imm、o_displ、o_nearオペランドの型
dt_byte、dt_word、dt_dword、dt_qwordデータ型
fl_CF、fl_CN、fl_JF、fl_JN、fl_Fコードのクロスリファレンス型
dr_R、dr_W、dr_Oデータのクロスリファレンス型

重要なルール

  1. 16 進数/10 進数を手動で変換しないでください — int_convert MCP ツールを使用してください
  2. 解析を待つ:結果を読み取る前に ida_auto.auto_wait() を呼び出してください
  3. スレッドセーフティ:IDA SDK の呼び出しはメインスレッドで実行する必要があります(@idasync を使用してください)
  4. 64 ビットアドレス:ea_t は常に 64 ビットになり得るものとして扱ってください

避けるべきパターン

避けること代わりに行うこと
idc.* 関数ida_* モジュールを使用する
アドレスのハードコード名前、パターン、またはクロスリファレンスを使用する
16 進数の手動変換int_convert ツールを使用する
メインスレッドをブロックする長時間の処理には execute_sync() を使用する
型を推測する逆アセンブル/デコンパイルから導き出す

詳細な API リファレンス

各モジュールの包括的なドキュメントについては、docs/<module>.md を参照してください:

  • 使用頻度:高:ida_bytes、ida_funcs、ida_hexrays、ida_typeinf、ida_name、idautils
  • 使用頻度:中:ida_segment、ida_xref、ida_ua、ida_frame、ida_kernwin
  • 特化用途:ida_dbg(デバッガー)、ida_nalt(netnode ストレージ)、ida_regfinder(レジスター追跡)

hex-rays.com の完全な RST ソースは docs/<module>.rst で入手できます。

コメント