如何识别IDA Pro反汇编中的函数调用?


7

我正在对一些IDA生成以下反汇编的代码进行反向工程。这些特定的代码行仅用于说明目的。请注意,第三行不是通过名称而是通过地址来调用特定的函数。

mov rcx, [rsp+128h+var_D8] // reg CX gets the address at stack pointer+128h+var_D8 bytes 
mov r8, [rcx]     // the address at reg CX is stored to reg r8 
call qword ptr [r8 + 18h]  // at address rax+18h, call function defined by qword bytes 

我很想确定哪个函数被调用。我可以使用哪些机制,工具,技巧等来确定在调用qword ptr <address>中提到的哪个函数?我正在尝试其他反汇编程序。

从对我的previous question的回答中,这被称为“间接调用”或(也许是“虚拟函数调用”)。反汇编有很多这样的,那么我该如何解决它们?另外,IDA已经确定了数百个功能。在任何给定的间接呼叫(或虚拟呼叫)期间,我如何确定哪一个实际被呼叫?

8

找出问题的函数最简单的方法可能是动态分析。您可以通过在调试器中放置该指令的断点并检查寄存器来轻松完成此操作。

更通用的解决方案可能会涉及一些脚本来记录所有调用并将该信息添加到IDA数据库。 Funcap插件不,如果你正在寻找不完全是类似的东西:

这个脚本记录功能。使用IDA调试API跨越一个可执行文件调用(返回),与传递的所有参数一起。它将信息转储到文本文件中,并将其插入到IDA的内联注释中。这样,通常在分析恶意软件时遵循行为运行时分析的静态分析可以直接反馈运行时信息,例如函数参数中返回的解密字符串。