IDA Proximity 查看器找不到明显的路径?

逆向工程 艾达
2021-07-06 21:36:38

使用 IDA 6.2(以及 IDA 6.4),我正在尝试使用 Proximity 查看器来查找 2 个函数之间的路径,如此处的hexblog 文章所述

使用Xrefs From/To(旧选项)它显示了清晰的路径:AllocateVolume-> VolumeSortCmp->CompareVolumeComponents如下面的屏幕截图所示

除了add namehide childs选项不存在于邻近浏览器的上下文菜单(如博客中所述)中,如下面屏幕截图所示 find path菜单确实列CompareVolumeComponents在打开的对话框中(因此它对可访问的内容有一些了解)。

然而,当我按下搜索时,我期望一个漂亮干净的图表(再次在博客中显示并添加为下面的参考)仅显示 3 个相关节点,但似乎没有任何更改接近浏览器布局,因为我仍然看到 30 个节点.

Hexblog 浓缩Find path示例结果 hexblog 浓缩示例结果

我的结果 在此处输入图片说明

近距离查看器是否出现故障或是否超出了我的期望?或者我在这里做错了什么?

2个回答

我认为问题在于对 Proximity Viewer 的工作方式的误解。查找路径时,它不会清除图中的所有其他节点:它只是查找路径并将所需的节点添加到图中。如果只想查看 AllocateVolume 和 CompareVolumeComponents 之间的节点,请执行以下操作:

  1. 导航到 AllocateVolume 并按“-”。
  2. 右键单击中心节点 AllocateVolume 并选择“折叠子项”,然后选择“折叠父项”。
  3. 然后,在邻近视图中右键单击此节点外并选择“添加名称”。
  4. 找到“CompareVolumeComponents”并添加它。
  5. 在这一步之后,右键单击 AllocateVolume 节点,选择“Find Path”并选择唯一的其他可用节点。

如果一切顺利,您将获得一个图形,其中仅包含显示从 AllocateVolume 到 CompareVolumeComponents 的路径所需的函数。如果没有,Proximity Viewer 的当前代码可能存在一些问题(在这种情况下,请联系 Hex-Rays 的支持人员进行修复)。此外,您可能想查看 SDK 中的“调用图”插件:查找路径的算法几乎相同,您可能会了解为什么它不起作用。

作为旁注,稍微解释一下 PV 的工作原理:该算法不像 (Q)WinGraph32 (IIRC) 那样只考虑调用/jmps 的路径,而是在有数据引用时考虑路径。如果函数 A 以任何方式引用函数 B,则邻近查看器将显示该引用(带有灰色边缘而不是蓝色边缘)。顺便说一句,我是写它的人。

您的屏幕截图显示的不是邻近浏览器。这是旧的 Wingraph32 东西,它已经随 IDA 的 5.x 版本一起提供了。有关实物的外观,请参阅附图:

近距离浏览器 (直接链接到全尺寸图像

您可以在View-> Open subviews->下找到它Proximity browser

请记住,如果您仍然使用 6.2,则可能会有 Qt 版本 ( idaq.exe) 和旧的 Windows GUI 版本 ( idag.exe)。您需要前者让邻近浏览器正常工作。