IDAPython
IDAPython是Gergely Erfelyi开发的一个插件,在IDA中集成了python解释器,并且IDAPython还具有IDA SDK大部分功能,所以它能比IDC写出功能更加强大的脚本。但是IDAPython能够参考的文档较少。
我们可以通过IDA目录下python子目录关于IDAPython的三个模块进行学习。
实例
代码来自《揭秘家用路由器0day漏洞挖掘技术》。
#源代码 IDAPython处理危险函数交叉引用
def getFuncAddr(fname):
return LocByName(fname)
def judgeAduit(addr):
'''
not safe function handler
'''
MakeComm(addr,"### AUDIT HERE ###")
SetColor(addr,CIC_ITEM,0X0000ff) #set background to red
def flagCalls(funcname):
'''
not safe function finder
'''
count=0
fAddr=ger_func(fAddr)
if not func is None:
fname=Name(func.startEA)
items=FuncItems(func.startEA)
for i in items:
for xref in XrefsTo(i,0):
if xref.type=fl_CN or xref.type==fl_CF:
count+=1
Message("%s[%d] calls 0x%08x from =>%08x\n"%(fname,count,xref.frm,i))
judgeAduit(xref.frm)
else:
Warning("No function named '%s' found at location %x"%(funcname,fAddr))
if __name__='__main__':
'''
handle all not safe functions
'''
flagCalls('strcpy')