ipyida のインストール#
ipyida のインストール方法は次のとおりです:ida 如何安装插件 - lca
ipython の使用方法#
インストールが完了したら、編集-プラグイン
から ipyida プラグインを選択し、開いた後の画面は次のようになります:
? を押すとヘルプ情報が表示され、esc を押すとヘルプ情報画面が終了し、tab キーを押すとコマンドが自動的に補完されます。例えば、imp と入力して tab を押すと import が補完され、import の後にスペースを入力してから tab を押すとインポートする必要のあるモジュールが表示されます。
モジュールをインポートした後、モジュールの後に?を付けるとモジュールの情報が表示されます。
idaapi?
idaapi?? # より詳細な情報を表示
% hist を入力すると、履歴コマンドが表示されます。% history -n を入力すると、履歴コマンドと行番号が表示されます。
% edit でテキストエディタを開くことができます。% edit x-y で指定された範囲のコマンドを書き込むことができます。
ida python の基本的な使用方法#
ida python は次の 3 つの独立したモジュールで構成されています:
- idc
- idaapi
- idautils
ida python では大文字と小文字が区別され、命名規則はキャメルケースです。
idc.here()#
現在の命令のアドレスを取得する
idc.GetDisasm()#
現在のアセンブリ命令を取得する
idc.SegName()#
現在のセグメントを取得する
idc.MinEA&idc.MaxEx#
プログラムの最低アドレスと最高アドレスを取得する
ea = idc.here()
next_str = idc.NextHead(ea)
pre_instr = idc.prev_head(ea)
前(後)のアセンブリ命令のアドレスを取得する
SceenEA#
ディスアセンブリの現在のカーソル位置を表します
モジュールをインポートする必要がありますimport idaapi
ScreenEa 関数を使用すると、エラーが発生する場合があります。これは、Python のバージョンに関連している可能性があります。以下は Python3 のエラーの例です。
スクリプトコマンドを実行するには、まずスクリプトを作成します(Python3 環境で)。
次に、ファイル-ファイルを実行
を選択してスクリプトを読み込み、実行します。実行結果は次のようになります。
idc.GetDisasm (start_ea) コマンドは、現在のカーソル位置の命令を出力します(Python3 環境で)。
カーソルを別の位置に移動すると、ea はカーソルの位置と値を再度検索します。
idc.GetOpnd () 関数を使用すると、命令の 1 番目または 2 番目のオペランドを出力できます。
現在のカーソル位置の関数名を取得する
import idc
import idaapi
ea = idc.ScreenEA()
func = idaapi.get_func(ea)
funcname = idc.GetFunctionName(func.startEA)
print funcname
現在の関数名を取得する
import idc
import idautils
ea = idc.ScreenEA()
start = idc.SegStart(ea)
end = idc.SegEnd(ea)
for funcea in idautils.Functions(start,end):
name = idc.GetFunctionName(funcea)
print name
ブロックのすべての関数名を取得する
E = list(idautils.FuncItems(ea))
for e in E:
print "%X"%e,idc.GetDisasm(e)
関数のすべての命令を出力する
ディスアセンブリビューの命令と比較する
WndProc にカーソルを移動すると、参照を表示できます。
CARTEL_BUENO関数
にカーソルを移動し、X キーを押すと、wndproc関数
がCARTEL_BUENO関数
を呼び出していることが表示されます。
coderefs () 関数を呼び出すことで、それを呼び出す関数名を取得できます。
CARTEL_BUENO の参照を取得する