安装 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 由下面的三个独立模块组成,分别是:
- 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()
函数可以输出指令的第一个或第二个操作数。
获取当前光标位置的函数名
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 参照。