Avatar——目标

原文链接:https://github.com/avatartwo/avatar2/blob/master/handbook/0x02_targets.md

Targets

  

Avatar需要的第一个信息是分析工作需要的一个目标集。

from avatar2 import *

avatar = Avatar()

qemu = avatar.add_target(QemuTarget, name='qemu1')

这使一个Qemu目标对象实例化并给其一个助记名'qemu1',从现在开始我们可以使用变量qemu与该目标交互,或通过指定名字让Avatar在其上工作。

>>> from avatar2 import *
>>> avatar = Avatar()
>>> qemu = avatar.add_target(QemuTarget, name='qemu1')
>>> avatar.targets['qemu1'] == qemu
True

如果我们没有指定一个名字,其将被自动生成,可以利用target.name来读取

>>> from avatar2 import *
>>> avatar = Avatar()
>>> qemu = avatar.add_target(QemuTarget)
>>> qemu.name
'QemuTarget0'

需要记住的一点是,虽然一个目标可以在被创建后配置,但这必须在调用目标的init()方法之前进行.

from avatar2 import *

avatar = Avatar()

# 添加qemu并指定其gdbserver监听1234端口
qemu = avatar.add_target(QemuTarget, gdb_port=1234)

# 做其他事,诸如初始化内存范围等等
[...]

# 有效:改变gdbserver监听端口到2234
qemu.gdb_port = 2234

# 这将初始化qemu target
qemu.init()

# 无效:qemu和其gdbserver已经生成,这里改变gdb端口不会有效
qemu.gdb_port = 3234

总结一下,定义一个目标一开始看起来比较简单,但是恶魔总藏在细节之中:由于支持多种不同的目标,每个目标都接受自己的目标特定参数集合。所以,让我们看看目前Avatar²支持的不同targets,以及他们接受的参数。

GDBTarget

这可能是最直观的目标之一:它将简单连接到一个存在的gdb实例,通过TCP或基于串行参数的串行连接。因此,该gdbserver是在一个远程物理目标上运行或只是在Avatar²的主机系统上本地生成的并不重要。为了灵活的配置,可以在添加一个GDB目标时添加以下参数:

nametypedefaultpurpose
gdb_executablestr'gdb'将使用的可执行gdb的路径
gdb_additional_args[str][]c传递给gdb的额外参数列表
gdb_portint3333gdbserver连接到监听的端口
serialboolFalse通过串行还是TCP连接到gdbserver,允许使用gdb_serial参数
gdb_serial_devicestr'/dev/ttyACM0'我们想要连接的串行设备
gdb_serial_baudrateint38400串传输速率
gdb_serial_paritystr'none'

串行奇偶校验设置

OpenOCDTarget

OpenOCDTarget的目的是通过使用openocd获取JTAG从而连接到物理目标。当一个 Avatar²主机可以控制openocd,随后,它的目标使用到gdbserver的连接或到openocd的接口,后面的参数可以被OpenOCDTarget指定:

nametypedefaultpurpose
openocd_scriptstrNone强制路径到openocd脚本。该脚本通常控制实际的JTAG连接
additional_args[str][]

传给openocd的额外参数列表

telnet_portint4444openocd telnet服务端口
gdb_executablestr'gdb'将使用的可执行gdb路径
gdb_additional_args[str][]

传给gdb的额外参数列表

gdb_portint3333gdbserver被连接到监听的端口

QemuTarget

Qemu是一个全系统仿真器,为了avatar²它已经进行了修改,以允许仿真系统的完整的自由(硬件)配置,并允许将内存从Qemu内部传输到其他目标。由于这些都是非常有效的更改,qemutarget有几个不同的配置选项。

nametypedefaultpurpose
executablestr'qemu-system-'将使用的qemu可执行文件的路径,不需要体系结构的后缀。
架构后缀被阿凡达自动检测到。
additional_args[str][]传给qemu的额外参数列表
cpu_modelstrNoneqemu使用的一个特殊cpu模式
firmwarestrNoneqemu使用的一个kernel或类kernel固件的(可选)路径
qmp_portint3334qemu模拟器协议端口
entry_addressint0第一条执行指令地址
gdb_executablestr'gdb'将使用的可执行gdb路径
gdb_additional_args[str][]传给gdb的额外参数列表
gdb_portint3333gdbserver被连接到监听的端口

PandaTarget

PANDA是一个动态二进制分析平台,具有许多有用的特性,包括对一次执行的记录与重放, 一个在执行与重放时用于多种类分析任务的插件系统。由于PANDA自身基于qemu,avatar²的 PandaTarget直接从QemuTarget继承并接受了它所有的参数。然而,与上面描述的目标相比,它有各种各样的特定目标方法来在执行阶段驱动PANDA。

method-nameargumentspurpose
begin_recordrecord_name要求PANDA开始记录执行
end_record-要求PANDA结束正在进行的记录
begin_replayreplay_name重放记录的执行
end_replay-结束正在执行的重放
load_pluginplugin_name, plugin_args, file_name用特定的参数加载一个 PANDA插件
unload_pluginplugin_name根据特定名称卸载插件
list_plugins-列出已经加载的PANDA插件

For more information about these function, we suggest to have a look at our autodoc.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值