ida pro虚函数实际声明

时间:2014-02-26 12:46:03

标签: function virtual disassembly ida

我正在尝试入侵exe以找到某些函数的实现并在注入的dll中执行操作。 exe是一种屏幕保护程序,幸运的是非常简单,所以它使用重要的字符串来识别代码段。

我的困境是其中一个功能'getaxis'是一个虚函数。我知道这要归功于字符串窗口和字符串上的其他告密信息(Audioplayer.Tracklist :: GetAxis),我追溯到rdata部分

.data:01E204B0 off_1E204B0     dd offset aAudioplayer_to ; DATA XREF: _call_vfuncr
.data:01E204B0                                         ; _call_vfunc+26r
.data:01E204B0                                         ; "Audioplayer.Tracklist::Internal_GetTrack"
...

使用ida pro我已经成功跟踪了函数调用,但我无法找到实际的虚函数实现。

所以这是我的问题:

1-我对这个问题一无所知,是一个反汇编的新手:有没有办法真正找到虚函数的实现? Ida清楚地显示了“函数窗口”中的各种“子”,但是那里有几百个函数,我希望有更好的方法来查找虚函数的声明。

2-子名称和虚函数之间是否存在关联。我无法找到任何。

那么如何在反汇编代码中找到实际的虚函数声明呢? 这有可能吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您知道使用什么编译器/语言来生成此程序吗?我只熟悉大多数C ++实现如何生成vftables。 "了解你的敌人"是逆向工程的关键。

从它的外观来看,那些' _call_vfunc'函数可以是某些其他语言的编译器(比如一些随机的Pascal编译器,或其他)的某种实现细节,其可能需要保留这样的元数据。当在用于vftable的任何内容中使用pure / nullptr条目时,call_vfunc可能会抛出错误,因此使用/引用该字符串。

如果使用call_vfunc执行所有虚函数调用,则可以挂钩所述函数并记录最终使用的vftable地址。除非这是一个过于复杂的屏幕保护程序,否则不应该使用过多的vftables。如果IDAPython有任何调试器API,您可以在使用IDA进行调试时通过Python脚本进行所有日志记录。