Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
wtf — 分布式、代码覆盖率引导的基于快照的模糊测试工具,适用于Windows和Linux上的用户态和内核态目标,具有模拟器和虚拟机管理器后端。 | Kitploit
工具/GitHubGitHub/0vercl0k/wtf
动态分析 (沙盒)漏洞分析漏洞利用模糊测试二进制分析
GitHub0vercl0k/wtf

wtf

分布式、代码覆盖率引导的基于快照的模糊测试工具,适用于Windows和Linux上的用户态和内核态目标,具有模拟器和虚拟机管理器后端。

查看仓库
1.8k1541091个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

what the fuzz

一个分布式的、代码覆盖率引导的、跨平台的基于快照的模糊测试器,专为攻击运行在Microsoft Windows和Linux用户模式(实验性!)上的用户模式或内核模式目标而设计。

概述

what the fuzz(简称 wtf)是一个分布式的、代码覆盖率引导的、可定制的、跨平台的基于快照的模糊测试器,专为攻击运行在Microsoft Windows或Linux(实验性,参见 linux_mode)上的用户模式或内核模式目标而设计。目标的执行可以在带有 bochscpu 的模拟器内进行(最慢,最精确),在使用 Windows Hypervisor Platform APIs 的 Windows VM 内,或在使用 KVM APIs 的 Linux VM 内(最快)。

它在广泛的软件中发现了内存损坏漏洞:IDA Pro,一款流行的 AAA游戏,Windows内核,Microsoft RDP客户端,NVIDIA GPU显示驱动程序 等。

编译后的二进制文件可以从 CI artifacts 或 Releases 部分获取,适用于Windows和Linux。

如果你想了解更多关于它的历史或如何在真实目标上使用它,建议阅读以下文章以入门 🔥

  • 构建一个新的快照模糊测试器并模糊测试 IDA
  • 使用基于快照的模糊测试器模糊测试现代UDP游戏协议 作者 Markus Gaasedelen
  • 使用 "what the fuzz" 模糊测试 RDPEGFX 作者 Colas Le Guernic,Jérémy Rubert 和 匿名
  • 网络协议模糊测试之旅 – 深度剖析Microsoft IMAP客户端协议 作者 Wayne Chin Yick Low
  • Trail Of Bits 测试手册 中的 快照模糊测试 部分
  • 攻击EDR 第4部分:模糊测试Defender的扫描与模拟引擎(mpengine.dll) 作者 Manuel Feifel

用法

尝试这些功能的最佳方式是使用 fuzzer_hevd / fuzzer_tlv_server 模块。你可以下载 target-hevd.7z / target-tlv_server.7z 存档并将其解压到 targets/ 目录中。这些存档包含每个目标预期的目录树:

  • inputs 是存放输入测试用例的文件夹,
  • outputs 是存放当前最小集文件的文件夹,
  • coverage 是存放 .cov 文件的文件夹,
  • crashes 是存放崩溃文件的文件夹,
  • state 是存放内存转储(mem.dmp)、CPU状态(regs.json)以及符号存储(symbol-store.json)的文件夹。符号存储是一个简单的JSON文件,在Linux系统上用于指定断点位置,因为这些平台不支持符号/dbgeng。wtf 在每次在Windows上运行目标时会在运行时生成此文件。

以下假设你已经下载了最新版本附带的 target-hevd.7z 文件,并将其解压到你的 wtf 克隆的 targets 目录中。你应该有 wtf/targets/hevd,其中包含 inputs / outputs 等目录。

启动服务器节点

服务器本质上是大脑,负责跟踪所有状态:聚合的代码覆盖率、语料库,它生成测试用例并将其分发给客户端。

以下是启动本地服务器节点的方法:```text wtf.exe master --name hevd --max_len=1028 --runs=10000000

`max_len` 选项用于限制生成的测试用例的大小,`runs` 指定生成的测试用例数量,`address` 定义 **wtf** 需要监听的地址,`target` 是包含我们上述目录树结构的目录(用户也可以选择使用 `--input` / `--output` / `--crashes` 覆盖这些目录),`name` 指定你的模糊测试模块名称,以便主控节点在你定义了生成器函数时调用它。

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/4a03fc75eed3ed5a92f7f10def697dbf220ae36b0701f05b37759eb432fc0fd9.webp">
</p>

### 模糊测试节点

客户端节点运行由服务器生成并分发的测试用例,并将结果(代码覆盖率、结果等)反馈给服务器。

以下是启动一个使用 *bochscpu* 后端的客户端节点的方法:```text
wtf.exe fuzz --name hevd --limit 10000000

fuzz子命令需要与name选项一起使用,以指定要使用的fuzzer模块,backend用于指定执行后端,limit用于指定每个测试用例最多执行的指令数(根据后端的不同,该选项的含义有所不同)。

运行测试用例

如果您想要运行一个测试用例(或包含多个测试用例的文件夹),可以使用run子命令。

以下是运行crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0测试用例的方法:``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/49b3ca8582d6314724e5615c687472499d5f8f41d04c9543c0a6a070c51f56f8.webp">
</p>

### 精简语料库

要精简语料库,你需要使用一个服务器节点和尽可能多的客户端节点,就像进行模糊测试任务一样。只需将 `runs` 选项设置为 0 即可。

以下是将 `outputs` 中的语料库精简到 `minset` 目录的方法(同时展示了如何覆盖 `inputs` 和 `outputs` 目录):```
wtf.exe master --name hevd --max_len=1028 --runs=0 --inputs=outputs --outputs=minset

生成执行跟踪

在执行后端中进行内省的主要机制是生成执行跟踪。bochscpu 是执行此操作最快的后端,因为在其他后端退出VMX模式的代价非常高。

以下是针对测试用例 crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 生成执行跟踪的方法:``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 --trace-type=rip

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/340b4b251e378eaf21c6f5ffdd4f013bd2cef89f23a604cffd0ebf897d27c71f.webp">
</p>

要符号化执行轨迹,应使用 [symbolizer-rs](https://github.com/0vercl0k/symbolizer-rs)。以下是如何符号化上述生成的 `crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0.trace` 执行轨迹:```
symbolizer-rs.exe --trace crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0.rip.trace

生成 Tenet 追踪

如果你发现自己需要更多的上下文感知能力,bochscpu 后端允许你生成可加载到 Tenet 追踪探索器中的执行追踪。下文中,我从 memmove 中的一个崩溃开始,回溯以找出源指针的来源(用户模式!):``` wtf.exe run --name hevd --limit 10000000 --input crashes\crash-0xfffff764b91c0000-0x0-0xffffbf84fb10e780-0x2-0x0 --trace-type=tenet

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/34df2f5ca8f378db664d3f01bcbefdd43409e300d256d50e3f4f630eb06cc7be.webp">
</p>

### 生成代码覆盖率追踪

要生成代码覆盖率追踪,您只需使用 `run` 子命令并带上 `--trace-type=cov` 选项。

以下是您如何为 `minset` 文件夹内的所有文件生成代码覆盖率追踪,并将它们存储在 `coverage-traces` 文件夹中的方法:```
wtf.exe run --name hevd --input minset --trace-path=coverage-traces --trace-type=cov

这些追踪结果无法直接加载到 lighthouse 中,因为它们尚未被符号化。

以下是你如何对 coverage-traces 文件夹内的所有文件进行符号化,并将结果写入 coverage-traces-symbolized:``` symbolizer-rs.exe --trace coverage-traces -o coverage-traces-symbolized --style modoff

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/8a3c3ca18571abef16a9f87f736fe4d52ac102f41095eab4db32533cb5b198b4.webp">
</p>

最后,你可以在 [lighthouse](https://github.com/gaasedelen/lighthouse) 中加载这些文件:

<p align='center'>
<img src="https://assets.kitploit.com/production/public/readmes/4699/35d9c25c3d26abf5761fec9e7848ba09d090c7aab32322a740732d82e85964e8.webp">
</p>

此外,如果你不关心单独的代码覆盖率,master 分支维护了一个 `coverage.cov` 文件,其中包含了已被执行的唯一聚合代码覆盖率。这使得在模糊测试期间快速检查全局代码覆盖率变得非常容易。

## 它是如何工作的?

**wtf** 通过 *执行后端* 运行用户态和内核态,并依赖用户在目标中插入测试用例。与其他传统的模糊测试工具不同,**wtf** 并不承担大部分繁重的工作;用户需要自己完成。用户需要非常了解被测试目标,并且接入一个新目标是一个需要时间的迭代过程。不过,如果你准备好进行黑客操作,它提供了很大的灵活性 :)

接入目标的通常工作流程如下:
下载工具