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

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。