banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

《ゼロから始めるIDA逆向き学習》学習ノート-13(idapythonの紹介)

画像

ipyida のインストール#

ipyida のインストール方法は次のとおりです:ida 如何安装插件 - lca

ipython の使用方法#

インストールが完了したら、編集-プラグインから ipyida プラグインを選択し、開いた後の画面は次のようになります:

image

? を押すとヘルプ情報が表示され、esc を押すとヘルプ情報画面が終了し、tab キーを押すとコマンドが自動的に補完されます。例えば、imp と入力して tab を押すと import が補完され、import の後にスペースを入力してから tab を押すとインポートする必要のあるモジュールが表示されます。

image

モジュールをインポートした後、モジュールの後に?を付けるとモジュールの情報が表示されます。

idaapi?
idaapi?? # より詳細な情報を表示

image

% hist を入力すると、履歴コマンドが表示されます。% history -n を入力すると、履歴コマンドと行番号が表示されます。

image

% edit でテキストエディタを開くことができます。% edit x-y で指定された範囲のコマンドを書き込むことができます。

ida python の基本的な使用方法#

ida python は次の 3 つの独立したモジュールで構成されています:

  • idc
  • idaapi
  • idautils

ida python では大文字と小文字が区別され、命名規則はキャメルケースです。

idc.here()#

image

現在の命令のアドレスを取得する

idc.GetDisasm()#

image

現在のアセンブリ命令を取得する

idc.SegName()#

image

現在のセグメントを取得する

idc.MinEA&idc.MaxEx#

image

プログラムの最低アドレスと最高アドレスを取得する

ea = idc.here()
next_str = idc.NextHead(ea)
pre_instr = idc.prev_head(ea)

image

image

前(後)のアセンブリ命令のアドレスを取得する

SceenEA#

ディスアセンブリの現在のカーソル位置を表します

モジュールをインポートする必要がありますimport idaapi

image

ScreenEa 関数を使用すると、エラーが発生する場合があります。これは、Python のバージョンに関連している可能性があります。以下は Python3 のエラーの例です。

スクリプトコマンドを実行するには、まずスクリプトを作成します(Python3 環境で)。

image

次に、ファイル-ファイルを実行を選択してスクリプトを読み込み、実行します。実行結果は次のようになります。

image

idc.GetDisasm (start_ea) コマンドは、現在のカーソル位置の命令を出力します(Python3 環境で)。

image

カーソルを別の位置に移動すると、ea はカーソルの位置と値を再度検索します。

idc.GetOpnd () 関数を使用すると、命令の 1 番目または 2 番目のオペランドを出力できます。

image

現在のカーソル位置の関数名を取得する


import idc
import idaapi

ea = idc.ScreenEA()
func = idaapi.get_func(ea)
funcname = idc.GetFunctionName(func.startEA)

print funcname

image

現在の関数名を取得する

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

image

ブロックのすべての関数名を取得する

E = list(idautils.FuncItems(ea))
for e in E:
	print "%X"%e,idc.GetDisasm(e)

image

関数のすべての命令を出力する

image

ディスアセンブリビューの命令と比較する

WndProc にカーソルを移動すると、参照を表示できます。

image

CARTEL_BUENO関数にカーソルを移動し、X キーを押すと、wndproc関数CARTEL_BUENO関数を呼び出していることが表示されます。

image

coderefs () 関数を呼び出すことで、それを呼び出す関数名を取得できます。

image

image

CARTEL_BUENO の参照を取得する

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。