我知道这个论坛上的许多用户都是IDA Pro的专家(开发人员)。因此,我正在初步探究IDA Pro指向分析背后的一些高级想法。

根据我的个人经验(我在IDA Pro 6.95二进制代码研究中经常使用IDA Pro 6.95), IDA Pro中实施的指向分析既不健全也不完整。我正在设想利用一些启发式方法来推断代码和数据指针中设置的值。

所以这是我的问题:


任何人都可以阐明IDA-Pro中的指向算法吗?我了解IDA-Pro是一种商业软件,因此非常希望能有一个高级的想法。
考虑到我们有相当数量的间接调用,需要使用IDA Pro构建调用图的最佳实践是什么?被埋葬。

分析平台可以是ARM上的ELF二进制文件,与x86相比,它似乎相对容易一些。

评论

顺便说一句:请让我知道是否更合适,将这个问题发布到IDA-Pro内部论坛中,谢谢。

什么是“指向分析”?一些定义可能对不熟悉该术语的人有用,也许是您所指的“不健全或不完整”的一些示例?

@IgorSkochinsky,您好,感谢您的来信。因此,基本上我提到的“指向”分析试图推断指针中可能的值。例如,我们有一个间接调用* eax,然后通过某种方式推断eax可能包含两个可能的值0x8040204和0x8060208,我们知道如何在此调用位置构造调用图边缘。

wikiwand.com/en/Pointer_analysis虽然指向分析可以分析代码指针和数据指针,但我所谈论的是代码指针,指向某些函数的指针,而那些函数将被间接称为

IDA做某事的最好方法:使用IDA撤消IDA。我是认真的。为了解决各种IDA错误,并了解如何通过IDA SDK实现我在IDC中看到的内容,我不得不大量反转IDA引擎。

#1 楼

指针分析的主题是理论静态分析的重要组成部分。关于指针分析的文章和学术文章很多,这是一个研究很深入的领域。

除了理论研究之外,即使是熟练和训练有素的逆向工程师也常常很难解决这个问题。在某些情况下,不执行或模拟相关代码就几乎不可能检索指针。

因此,正如您所说,对于IDA Pro来说,提供“健全而完整的”解决方案并不是不可能的。一项琐碎的任务。这实际上不是反汇编程序的任务,这凸显了这一点。

关于您的特定问题:




谁能阐明一下在IDA-Pro中的指向算法?我了解IDA-Pro是一种商业软件,因此非常希望能有一个高级的想法。




据我所知,IDA的指针分析相当基本的。仅在直接分配了注册电话并且没有太多异味分析的情况下,注册电话才得到解决。重要的是要记住,IDA不是二进制静态分析工具,IDA是反汇编程序(和反编译程序)。污点分析,约束解决,调用图分析等通常可以通过专门为这些目的设计的工具来更好地完成。话虽如此,IDA确实努力包括启发式技术来帮助这类事情。



使用IDA Pro构建调用图的最佳实践是什么,考虑到我们需要进行大量的间接调用。




因此,如果您大多数情况下,IDA并不是构建调用图的最佳工具。集中于那些呼叫目标难以解决或要考虑很多约束的情况。

有更好的静态二进制分析工具,以及关于RE.SO的一些问题。我个人最喜欢的可能是愤怒。

我建议您在继续之前花时间研究理论主题以及可用的工具和方法。

评论


抱歉,这不是您要找的答案

– NirIzr
18-10-16在8:05

@Nirlzr。我正在寻找有关IDA-Pro指向分析的一些更原则性的描述。但是我担心它是否确实存在,考虑到它是一种近源商业工具。 ASAICS,是的,这只是一些启发式方法,“只有在直接分配注册呼叫并且没有太多异味分析的情况下,才能解决注册呼叫。”我同意你的看法。

– lllllllllllll
18-10-16在13:58