是否有使用描述 IDA 调试器 API 的 SDK 在 IDA Pro 中开发调试器插件的好资源?这方面的一个例子是Sourceforge 上的IDA Pro ARM 调试器插件。似乎很少有项目能够做到这一点。具体来说,你如何在 IDA 中制作一个插件,将自己注册为可用的调试器之一,并允许在控制目标的同时单步执行 IDA 数据库?
创建 IDA Pro 调试器插件 - API 文档和示例?
逆向工程
艾达
调试器
idapro插件
2021-06-15 03:29:41
4个回答
到目前为止,没有一个答案能回答实际问题,所以这里是。
调试器插件与“普通”插件有两点不同:
- 它
PLUGIN_DBG
在插件的标志中。 - 在 init() 中,它必须将全局变量
dbg
设置为指向debugger_t
结构实现的指针。参见idd.hpp
定义。
例如,请参见plugins/debugger
SDK 以及最近更新的idados
插件。警告:制作调试器插件不适合胆小的人。
您可以在 此处查找C/C++ 中的IDA 插件手册。
此外,您还可以在SecurityTube 的Recon 2008 “BUILDING PLUGINS FOR IDA PRO”上观看 IDA-Pro Creator Ilfak Guilfanov 的演讲
还有 IDAPython 也可以创建小型自动化。
idapython套件中的debughook.py示例脚本说明了可以由调试器插件处理的所有调试事件。
示例脚本
这是一个非常简单的脚本,当您使用调试器跟踪它们时,它会为所有指令着色。
# Simple script that colorizes all instruction the debugger halts at or
# the user traces with the debugger in yellow. Instruction that are hit
# a ssecond time are colored in red.
from idaapi import *
from idc import *
class Colorizer(DBG_Hooks):
def __init__(self):
DBG_Hooks.__init__(self)
self.locations_ = set()
def colorize(self, ea):
if ea in self.locations_:
SetColor(ea, CIC_ITEM, 0x2020c0)
else:
SetColor(ea, CIC_ITEM, 0x80ffff)
self.locations_.add(ea)
def dbg_bpt(self, tid, ea):
self.colorize(ea)
return 0
def dbg_step_into(self):
self.colorize(GetRegValue("eip"))
try:
if debughook:
print("Removing previous hook ...")
debughook.unhook()
except:
pass
colorizer = Colorizer()
colorizer.hook()
一些笔记
如果在调试器回调之一中从进程内存中读取,则需要先调用 refresh_debugger_memory()(请参阅 idc.py 中 RefreshDebuggerMemory() 的文件注释)。如果可以,请避免打那个电话,因为它有点贵。
您可以通过 idautils 包中的 cpu 实例轻松访问所有寄存器:
print "EAX has the value: %X" % cpu.Eax
要从堆栈顶部读取当前值,请使用类似
print "TOS: %X" % Dword(cpu.Esp)
Chris Eagle的 IDA Pro Book 2nd edition在第 24 章中有一些关于通过 IDC 和 SDK 与调试器交互的信息,但更侧重于自动化。除此之外,可能会阅读正在执行此操作的其他插件的源代码,例如问题中引用的 ARM 调试器插件,并在 SDK 中挖掘 dbg.hpp 以查看它公开的内容。在 SDK 的 plugins/debugger 中似乎还提供了 IDA 调试器插件的源代码。我还没有看到编写专门记录的调试器插件。