1

在 IDA Pro 6.1 中,我有一个 dll,它对“CreateFileA”和“CreateFileW”函数 API 有 20 次调用。

我想自动为所有 CreateFileA/CreateFileW 指定断点。

我可以为所有外部参照手动完成,但这很乏味。有没有办法直接为 CreateFileA/CreateFileW 调用指定断点?

非常感谢 :)

4

4 回答 4

1

您可以在 CreateFile 的第一条指令处设置断点,或者您可以使用 IDAPython 来创建断点。

遍历所有指令/调用并查找对适当函数的调用。

add_bpt() 我相信是电话,

于 2013-03-15T18:29:56.347 回答
1

这是我写的一个脚本来完成你想要的。它在调用指定函数的位置设置软断点。

// Script used to set a breakpoint at the callsite
// of the specified function using cross-references.
#include <idc.idc>

static SetBreakpoint(location)
{
  // Sets a breakpoint to be activated when
  // the debugger runs over the address.
  AddBptEx(location, 0, BPT_SOFT);
}

static CrossReferenceSource(source)
{
  // Find the linear address of the source
  // location to start xref'ing from.
  auto sourcefn = LocByName(source);
  auto iterfn = DfirstB(sourcefn);

  if (sourcefn != BADADDR && iterfn != BADADDR)
  {

    do
    {
      Message("Setting breakpoint @ 0x%08x\n", iterfn);
      SetBreakpoint(iterfn);
      iterfn = DnextB(sourcefn, iterfn);
    } while(iterfn != BADADDR);
}
}

static main()
{
  auto source = "FunctionName";

  Message("--- Setting breakpoints at cross-reference ---\n");
  CrossReferenceSource(source);
  Message("--- Finished settings breakpoints --\n");
}

将“FunctionName”替换为您的函数名称,并在 IDA 的“执行脚本”窗口中运行它,可通过File > Script command

一个已知的限制是它不能识别间接交叉引用(例如使用寄存器调用)。

于 2017-02-20T03:05:44.847 回答
0

如果 CreateFileA/W 都是导入的(即,在 .idata 部分中定义的外部变量),你能不能只选择有问题的符号并按 F2(添加断点)?出现的断点设置对话框允许您指定硬件断点模式,在这种情况下,我们希望将其限制为读取(因为解析导入时将在启动时写入符号的值),这应该只发生在 '调用 ds:CreateFileA' 实例。

IDA 帮助中的一些断点说明:

  • 创建超过 4 个硬件断点是不可能的
  • 请注意,硬件断点发生在指令执行之后,而软件断点发生在指令之前。
于 2013-08-05T04:24:53.970 回答
0

据我所知,根据 kornman00,“CreateFile”是从 dll 导入的。其实是直接从Kernel32.dll导入的,不知道怎么用的可以看这里。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx

因此,为了做你正在寻找的东西,最好的方法是直接进入它,在 kernel32.CreateFileA 或 kernel32.CreateFileW 中设置断点。差异只是应用程序使用 Ansichar 还是 Widechar。

显然,为了做到这一点,您需要启动调试过程,因为必须先为您的应用程序加载 kernel32,然后才能在那里设置断点。

如果您感到困惑,我的建议是“在更简单的调试器中加载二进制文件”并尝试弄清楚我们之前向您解释过的内容

于 2015-07-21T17:45:54.130 回答