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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/ea/xfg_analyzer
静态分析逆向工程二进制分析
GitHubea/xfg_analyzer

xfg_analyzer

一个使用暴力破解的 XFG 哈希来恢复精确函数原型的 Binary Ninja 插件

查看仓库
1622年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

通过暴力破解 XFG 哈希恢复函数原型

该仓库包含用于生成和查找扩展流保护(eXtended Flow Guard)哈希的脚本。

关于其工作原理的扩展文章可在《International Journal Of Proof Of Concept || GTFO》第 22 期中获取。

我在这个 PoC 上的工作得益于 Quarkslab 团队的极大简化,他们对微软编译器的相关部分进行了广泛的逆向工程。关于 XFG 哈希如何计算的深入分析可在此阅读:https://blog.quarkslab.com/how-the-msvc-compiler-generates-xfg-function-prototype-hashes.html

注意:这绝不是在“攻破”作为漏洞利用缓解措施的 XFG,而仅仅是利用其副作用来揭示没有符号的函数。

简而言之,Windows 上实现的 XFG 扩展并加强了控制流保护(Control Flow Guard)漏洞利用缓解措施,它将间接函数调用的可能目标不仅限制为有效的函数入口点,还限制为具有匹配签名的函数。为此,每个函数都会计算一个 XFG 哈希,并在运行时对其进行校验。哈希仅基于函数原型(即调用约定、参数及其类型)。因此,我们可以为已知类型预计算哈希,之后在未知二进制中查找函数对应的哈希。

如果查找成功,我们就能 100% 确定所有参数的确切数量和类型以及函数的返回值。这对于没有公开符号的二进制和函数来说极为有用。

我邀请您阅读 PoC||GTFO 中的完整文章,可从附近的镜像获取。

脚本如下:

  • gen_function_prototypes.py - 仅输出一个包含给定类型所有可能原型的文件
  • gen_hash_from_ast.py - 读取 .c 文件,解析并计算哈希,然后保存到数据库(用于处理由 gen_function_prototypes.py 生成的文件)
  • xfg_analyzer.py - Binary Ninja 插件,用于在二进制中搜索 XFG 哈希并在数据库中查找
  • find_hash.py - 用于在数据库中查找给定哈希的简单快捷方式

要使用这些脚本,您首先需要修改 gen_function_prototypes.py,添加针对目标特定的“原始类型”、结构体或枚举。此外,您还需要选择要暴力破解的参数数量。最多 3 个参数只需一分钟,最多 4 个参数则需要一天……

生成所有组合的函数原型后,您需要运行 gen_hash_from_ast.py,它将逐行解析先前生成的文件并生成对应的 XFG 哈希。 完成后,您将获得一个包含函数原型及其匹配 XFG 哈希的 SQLite 数据库。xfg_analyzer.py 中包含一个非常简单的 Binary Ninja 插件。当针对受 XFG 保护的二进制运行时,它会查找所有 XFG 哈希,在数据库中检索它们,如果找到匹配项,则将新的函数原型应用于已定义的函数。

请知悉,这只是一个 PoC。要使其真正实用,需要生成一个巨大的哈希数据库(可能使用 Windows 头文件中的所有结构体/枚举名称作为种子),并提供在线查询功能。此外,将此思路扩展到 C++ XFG 哈希将是一个非常有趣的项目。

欢迎以任何方式使用本仓库中的代码。如果您觉得它有用,我很乐意听到您的反馈。

  • ea
下载工具