banner
lca

lca

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

《從零開始學IDA逆向》學習筆記-13(idapython簡介)

image

安裝 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 由下面的三個獨立模塊組成,分別是:

  • 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()函數可以輸出指令的第一個或第二個操作數。

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 參照。

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。