0

我正在尝试分析 IDA Pro 中 x86 .so 库中的函数。我在一台机器上有 IDA Pro 7.1,在另一台机器上有 IDA Pro 6.8。两个版本之间的函数长度和相应的控制流图(Graph View 和 WinGraph32)是不同的。

在 6.8 中,功能要大得多,并以通常的序言开始

push ebp
mov ebp, esp

但在 7.1 中,函数结束得更早,并且 6.8 仍然认为是相同函数的其余内存空间被拆分为其他函数。但是,这些函数没有通常的序言。

可能值得注意的是,我正在分析的函数可能会被混淆,因此序言/结尾指令序列可能会被其他内容替换。这会影响 IDA Pro 检测函数的方式吗?

我应该相信哪一个?

4

1 回答 1

0

如果没有所有信息(汇编指令、识别的相关代码的交叉引用等),我们只剩下不同的一般和高级解释。包括一些更具体的细节可能会提供更详细和具体的答案。

分析函数边界是反汇编程序必须解决的任务之一。这意味着反汇编程序通常使用不同类型的启发式方法来(巧妙地)猜测函数的开始和结束位置。IDA 的最大优势之一(尤其是在早期)是它的交互性——用户能够修复、调整和修改自动分析结果。

由于这是一项艰巨的任务,由于逻辑上的修复和改进,不同的 IDA 版本可能会有细微的差异。在您的情况下,这些改进/修复实际上会恶化最终结果而不是改善它。重要的是要注意一个例子并不意味着相关的改进是一个错误。

被混淆的代码更难正确分析,也很好地表明了试图阻止对函数结构进行成功分析的尝试。

于 2018-07-18T12:42:44.650 回答