【问题标题】:ida pro virtual function actual declarationida pro虚函数实际声明
【发布时间】:2014-03-29 07:24:54
【问题描述】:

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

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

.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- 子名称和虚函数之间是否存在关联。我找不到任何东西。

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

谢谢。

【问题讨论】:

  • 这门课真的这么难吗?难怪我在谷歌上也找不到任何东西。

标签: function virtual disassembly ida


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2012-11-09
    • 2015-06-04
    • 1970-01-01
    • 2011-05-26
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多