2014-02-26 33 views
0

我想破解到一个EXE来找到某些功能的执行情况,并在一个注入的DLL中执行操作。 该exe是一种屏幕保护程序,幸运的是非常简单,所以它使用重要的字符串来标识代码段。ida专业虚拟功能实际声明

我的两难处境是,'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亲我已经成功追踪了非常函数调用,但我无法找到实际的虚拟功能实现。

因此,这里是我的问题:

1 - 我懵了关于这个问题,作为一个新手在拆卸:有没有办法真正找到一个虚函数的实现? Ida清楚地显示了“函数窗口”中的各种'subs',但里面有几百个函数,我希望找到一个虚拟函数声明的更好方法。

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

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

谢谢。

+0

这真的是一个如此困难的课题吗?难怪我在谷歌上也找不到任何东西。 –

回答

0

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

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

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