在使用描述IDA调试器API的SDK的IDA Pro中开发调试器插件方面,有什么好的资源?一个示例是Sourceforge上的IDA Pro ARM调试器插件。似乎很少有项目能够做到这一点。具体来说,您如何在IDA中制作一个插件,将其注册为可用的调试器之一,并允许在控制目标的同时逐步通过IDA数据库?

#1 楼

到目前为止,没有一个答案可以回答实际的问题。

调试器插件与“正常”插件有两点不同:


插件标志中的PLUGIN_DBG。在init()中,必须将全局变量dbg设置为指向debugger_t结构实现的指针。有关定义,请参见idd.hpp

有关示例,请参见SDK中的plugins/debugger,以及最近更新的idados插件。警告:制作调试器插件不适合胆小的人。

#2 楼

您可以在此处查找C / C ++中的IDA插件手册。

此外,您还可以在SecurityTube的Recon 2008“为IDA PRO构建插件”中观看IDA-Pro Creator Ilfak Guilfanov的谈话。 br />
还有IDAPython也可以创建小型自动化。

评论


我已经拥有有关IDA插件编写的资源-我正在寻找描述IDA调试器API的资源。

– dingo_kinznerhook
13年4月22日在20:04

@DenisLaskov:三年半前,当我参加IDA培训时,Elias告诉我们,Python现在也可以用来编写插件和加载器,因此“小型自动化”有点轻描淡写了;)

– 0xC0000022L♦
13年4月22日在23:04

@ 0xC0000022L :)您完全正确,我忘了在'automation'周围加上引号:)

–丹尼斯·拉斯科夫(Denis Laskov)
13年4月23日在3:58

#3 楼

idapython套件中的debughook.py示例脚本说明了可以由调试器插件处理的所有调试事件。当您使用调试器跟踪它们时。首先调用refresh_debugger_memory()(请参阅idc.py中有关RefreshDebuggerMemory()的文件注释)。如果可以,请避免该调用,因为它有点贵。

您可以通过idautils包中的cpu实例轻松访问所有寄存器: br />要从堆栈顶部读取当前值,请使用诸如

# 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()


#4 楼

克里斯·伊格尔(Chris Eagle)的IDA Pro Book第二版在第24章中提供了有关通过IDC和SDK与调试器进行交互的一些信息,但更多地关注自动化。除此之外,还可以阅读其他正在执行此操作的插件的源代码,例如问题中引用的ARM调试器插件,并在SDK中的dbg.hpp中进行挖掘以了解其公开内容。该SDK的plugins / debugger中也提供了IDA调试器插件的来源。我还没有看到编写专门记录的调试器插件。