我正在尝试分析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如何检测功能?
我应该信任哪个人?
答案 0 :(得分:0)
在没有所有信息(汇编指令,已识别的相关代码的交叉引用等)的情况下,我们只剩下各种常规和高级解释。包括一些更具体的细节可能会得到更详细和具体的答案。
分析功能边界是反汇编程序必须解决的任务之一。这意味着反汇编程序通常采用不同类型的启发式方法(巧妙地)猜测功能的开始和结束位置。 IDA最大的优势之一(尤其是在早期)是它的交互性-用户具有修复,调整和修改自动分析结果的能力。
由于这是一项艰巨的任务,因此不同的IDA版本可能会由于逻辑上的修复和改进而略有不同。在您的情况下,这些改进/修正实际上使最终结果恶化而不是加以改善。重要的是要注意,一个示例并不意味着相关的改进就是一个错误。
被混淆的代码很难正确分析,并且很好地表明了试图阻止对功能结构进行成功分析的尝试。