Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Virtuailor — 用于在IDA Pro中自动创建C++虚表的IDAPython工具 | Kitploit
工具/GitHubGitHub/0xgalz/virtuailor
静态分析动态分析 (沙盒)逆向工程调试器二进制分析
GitHub0xgalz/virtuailor

Virtuailor

用于在IDA Pro中自动创建C++虚表的IDAPython工具

查看仓库
1.4k1396年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Virtuailor - 用于C++虚表重构的IDAPython工具

Virtuailor 是一个 IDAPython 工具,用于重构为 Intel 架构(包括 32 位和 64 位代码)以及 AArch64(新增!)编写的 C++ 代码中的虚表。

该工具由两部分组成:静态部分和动态部分。

首先是静态部分,包含以下功能:

  • 检测间接调用。
  • 使用条件断点(挂钩代码)挂钩间接调用的值赋值。

其次是动态部分,包含以下功能:

  • 创建虚表结构。
  • 重命名函数和虚表地址。
  • 为汇编间接调用添加结构体偏移。
  • 从间接调用添加交叉引用到其虚函数(多个交叉引用)。
  • 对于 AArch64 - 尝试修复未定义的虚表及相关虚函数(支持固件)。

如何使用?

Virtuailor 现在支持从 IDA 7.0 到最新版本(7.5)的 IDA 版本,如果你使用的 IDA 版本低于 7.4,则需要切换到 beforeIDA-7.4 分支,master 分支支持最新的可用版本(7.5)。

  1. 默认情况下,Virtuailor 会在代码中的所有地址中查找虚调用。 如果你想将代码限制在特定的地址范围内,没问题,只需编辑 Main 文件,在变量 start_addr_range 和 end_addr_range 中添加你想要的目标范围:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. 可选(但强烈推荐),创建你的 idb 快照。只需按 ctrl+shift+t 并创建快照即可。

  2. 按 File->Run script...,然后转到 Virtuailor 文件夹并选择运行 Main.py,你可以看到下面的 gif 以获得更清晰和直观的解释。 How to use

现在 GUI 会提供一个选项让你选择目标范围,如果你想针对整个二进制文件,只需在起始和结束地址中保持默认值并按 OK。

之后,断点会放置在你的代码中,你所要做的就是使用 IDA 调试器执行代码,进行任何你想要的操作,并观察虚表如何被构建!对于 AArch64,你可以设置一个远程 gdb 服务器并使用 IDA 调试器进行调试。

如果你不再需要断点,只需转到 IDA 中的断点列表标签页,按需删除断点即可。

我还想特别指出,这是该工具的第二个版本,同时支持 32 位和 64 位以及 aarch64,可能在某些情况下会有少量断点被遗漏,如果出现这种情况,请提交 issue 并联系我,这样我就能改进代码并帮助修复。提前感谢!:)

输出和通用功能

虚表结构

Virtuailor 从被命中的虚调用所使用的虚表中创建结构。虚表函数根据 BP 操作码中使用的相关寄存器从内存中提取。

vtable example 由于我想要在 IDA 中的结构与数据段中的虚表之间建立关联,BP 会将数据段中的虚表地址名称更改为结构名称。如下图所示: vtable example

虚函数名称也会被更改,但排除名称不是默认 IDA 名称的情况(具有符号的函数或用户更改过的函数),在这些情况下,函数名称将保持不变,并以其当前名称添加到虚表结构中。

选择的名称使用以下模式构建:

  • vtable_
  • vfunc_ 名称的其余部分要么是段起始处的偏移量,这主要是因为现在大多数二进制文件都是 PIE 和 PIC 的,因此强制启用了 ASLR(而不是使用完整地址名称,后者在 64 位环境中也相当长)。 虚表结构还有一个注释“Was called from offset: XXXX”,这个偏移量是段起始处的偏移量。

向汇编添加结构

创建虚表后,Virtuailor 还会在创建的结构和汇编之间添加连接,如下图所示: BP after an execution, Example 2

附注:BP 中使用的结构偏移仅与最后一次调用相关,为了更好地理解所有已进行的虚调用,添加了交叉引用功能,如下一节所述。

虚函数的交叉引用

在静态逆向 C++ 时,很难看出谁调用了谁,这是因为大多数调用都是间接调用,然而运行 Virtuailor 后,每个被间接调用的函数现在都有了指向这些位置的交叉引用。

下面的 gif 展示了添加的交叉引用及其间接函数调用:

xref

过往演讲与讲座

该工具曾在 RECon Brussels、Troopers 和 Warcon 上展示。演示视频可通过以下链接观看:https://www.youtube.com/watch?v=Xk75TM7NmtA

致谢

REcon Brussels、Troopers、Warcon 团队,Nana,@tmr232,@matalaz,@oryandp,@talkain,@shiftreduce

许可证

该插件采用 GNU GPL v3 许可证。

下载工具