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

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

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

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

工具目录

分类

查看所有分类
Loading categories
uniFuzzer — 基于 Unicorn 和 LibFuzzer 的闭源二进制模糊测试工具 | Kitploit
工具/GitHubGitHub/pagalaxylab/unifuzzer
嵌入式系统安全物联网安全模糊测试二进制分析
GitHubpagalaxylab/unifuzzer

uniFuzzer

基于 Unicorn 和 LibFuzzer 的闭源二进制模糊测试工具

查看仓库
346576年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

uniFuzzer

uniFuzzer 是一款基于 Unicorn 和 LibFuzzer 对闭源二进制程序进行模糊测试的工具。目前支持对 ARM/MIPS 架构的 32 位 LSB ELF 文件进行模糊测试,这类文件常见于物联网设备中。

中文介绍

特性

  • 只需很少的 hack 且易于构建
  • 可以针对任意指定的函数或代码片段
  • 基于覆盖率引导的模糊测试,速度可观
  • 自动解析并加载依赖项
  • 通过 PRELOAD 覆盖库函数

构建

  1. 逆向目标二进制文件,找到适合模糊测试的函数。
  2. 在 callback 目录下创建一个 .c 文件,其中应包含以下回调函数:
  • void onLibLoad(const char *libName, void *baseAddr, void *ucBaseAddr):每次在 Unicorn 中加载依赖库时调用。
  • int uniFuzzerInit(uc_engine *uc):所有二进制文件加载到 Unicorn 后调用。可在此处设置栈/堆/寄存器。
  • int uniFuzzerBeforeExec(uc_engine *uc, const uint8_t *data, size_t len):每轮模糊测试执行前调用。
  • int uniFuzzerAfterExec(uc_engine *uc):每轮模糊测试执行后调用。
  1. 运行 make,生成名为 uf 的模糊测试工具。

运行

uniFuzzer 使用以下环境变量作为参数:

  • UF_TARGET:目标 ELF 文件的路径
  • UF_PRELOAD:预加载库的路径。请确保该库与目标具有相同的架构。
  • UF_LIBPATH:依赖库所在的路径。多个路径用 : 分隔。

然后使用以下命令开始模糊测试:

root@kitploit:~
UF_TARGET=<target> [UF_PRELOAD=<preload>] UF_LIBPATH=<libPath> ./uf

演示

这里提供一个基本用法的演示。演示包含以下文件:

  • demo-vuln.c:这是待模糊测试的目标,其中包含一个名为 vuln() 的简单函数,存在栈/堆溢出漏洞。
  • demo-libcpreload.c:用于 PRELOAD 挂钩,定义了一个空的 printf() 以及简化的 malloc()/free()。
  • callback/demo-callback.c:定义了针对演示中的 vuln() 函数进行模糊测试所需的回调函数。

首先,请安装 mipsel 的 gcc(Debian 上为 gcc-mipsel-linux-gnu 包)来构建演示:

root@kitploit:~
# 目标二进制
# '-Xlinker --hash-style=sysv' 告知 gcc 使用 'DT_HASH' 而非 'DT_GNU_HASH' 进行符号查找
# 因为当前 uniFuzzer 不支持 'DT_GNU_HASH'
mipsel-linux-gnu-gcc demo-vuln.c -Xlinker --hash-style=sysv -no-pie -o demo-vuln

# 预加载库
mipsel-linux-gnu-gcc -shared -fPIC -nostdlib -Xlinker --hash-style=sysv demo-libcpreload.c -o demo-libcpreload.so

你也可以直接使用文件 demo-vuln 和 demo-libcpreload.so,它们已用上述命令编译好。

接下来,运行 make 构建 uniFuzzer。请注意,如果你自己编译了 MIPS 演示,那么某些地址可能与预编译的不同,需要相应更新 demo-callback.c。

最后,确保 MIPS 的 libc 库已就绪。在 Debian 上,安装 libc6-mipsel-cross 包后,库位于 /usr/mipsel-linux-gnu/lib/,这就是 UF_LIBPATH 应指向的位置:

root@kitploit:~
UF_TARGET=<path to demo-vuln> UF_PRELOAD=<path to demo-libcpreload.so> UF_LIBPATH=<lib path for MIPS> ./uf

Hack on Unicorn

由于这个 问题,Unicorn 会清除 QEMU 的 JIT 缓存,这会降低模糊测试的速度,因为目标二进制文件在每轮执行时都需要重新进行 JIT 编译。

我们可以按照该问题中的说明注释掉 tb_flush(env); 以提升性能。

TODO

  • 支持系统调用
  • 支持其他架构和二进制格式
  • 支持 GNU_HASH
  • 支持 IFUNC
  • 集成环境设置并提供 API
下载工具