如何在ollydbg中查看堆数据?

逆向工程 ollydbg C 记忆
2021-06-26 00:10:45

我有一个 C 编译的二进制文件,它通过HeapAlloc(). 我希望能够使用 Ollydbg 看到堆中分配的动态数组,以便能够跟踪它并查看它是如何被修改的。

到目前为止,我已经尝试过:

  1. 插入一个唯一的字符串,例如r00tr00tr00tr00t...r00t通过二进制**
  2. 转到内存视图 (ALT+M)
  3. 搜索 (CTRL+B) ASCII: r00t

我总是找不到它。我是新手,所以我采取的步骤是正确的吗?如果没有,我如何在堆中找到字符串?

** 这是用程序的正常流程注入的,它接受来自用户的数据。假设它是一个要为 instanc 输入的序列号,它被放置在堆中使用HeapAlloc

1个回答

有两个 ollydbg 插件可以帮助您查看堆数据。

1- Pedram Amini 的 Heap Vis
您可能已经注意到 OllyDBG 中“查看”菜单下的“堆”选项。该功能仅在基于 Windows 95 的操作系统下可用,并且应该显示分配的内存块列表。Olly Heap Vis 插件的编写目的是在所有现代 Windows 操作系统(例如 Windows 2000、XP 和 2003)上提供此功能以及更多功能。 OllyDbg Heap Vis 插件公开以下功能:

  • 查看堆
  • 搜索堆
  • 跳转到堆块
  • 创建堆可视化

在此处输入图片说明 http://www.openrce.org/downloads/details/1/Heap_Vis

2- OllyHeapTrace 由 Stephen
Less 编写 OllyHeapTrace(写于 2008 年)是 OllyDbg(1.10 版)的插件,用于跟踪进程正在执行的堆操作。它将监视多个堆的堆分配和释放,以及创建或销毁堆和重新分配等操作。所有参数以及返回值都被记录下来,并且对于每个被跟踪的堆,跟踪用独特的颜色突出显示。

此插件的主要目的是帮助调试堆溢出,您希望能够控制堆布局以覆盖特定结构,例如块头、临界区结构或某些特定于应用程序的数据。通过跟踪在您可以控制的操作(例如打开连接、发送数据包、关闭连接)期间执行的堆操作,您可以开始预测堆操作,从而控制堆布局。

在此处输入图片说明 https://github.com/stephenfewer/OllyHeapTrace