Hopper 开源项目使用教程
1. 项目介绍
Hopper 是一个用于自动生成库模糊测试用例的工具,通过解释性模糊测试将库模糊测试问题转化为解释器模糊测试问题,从而能够探索大量 API 使用情况。Hopper 的主要特点包括:
- 无需任何模糊驱动程序的解释性 API 调用
- 类型感知的参数变异
- 自动学习 API 间的约束条件
- 支持二进制代码插桩
2. 项目快速启动
2.1 环境准备
- Linux-amd64 (测试环境:Ubuntu 20.04 和 Debian Buster)
- Rust 稳定版 (>= 1.60)
- Clang (>= 5.0)
2.2 安装 Hopper
首先,克隆 Hopper 项目到本地:
git clone https://github.com/FuzzAnything/Hopper.git
cd Hopper
然后,运行构建脚本:
./build.sh
构建完成后,Hopper 的可执行文件将位于项目的 install
目录中。你可以将该目录添加到系统的 PATH
变量中,以便在任何地方使用 Hopper。
2.3 使用 Docker 构建
如果你更喜欢使用 Docker 来构建和运行 Hopper,可以使用以下命令:
docker build -t hopper .
docker run --name hopper_dev --privileged -v /path-to-lib:/fuzz -it --rm hopper /bin/bash
2.4 编译库
以 cJSON
库为例,使用 Hopper 进行编译:
hopper compile --header /cJSON.h --library /libcjson.so --output output
编译完成后,你可以在 output
目录中找到生成的文件。
3. 应用案例和最佳实践
3.1 模糊测试 cJSON 库
假设你已经编译了 cJSON
库,可以使用以下命令启动模糊测试:
hopper fuzz output --func-pattern cJSON_*
3.2 自定义函数模式
你可以通过 --func-pattern
参数来指定要测试的函数。例如,仅测试 cJSON_parse
函数:
hopper fuzz output --func-pattern @cJSON_parse
3.3 使用自定义规则
你还可以通过 --custom-rules
参数来定义自定义规则文件,以更精细地控制模糊测试的行为。
hopper fuzz output --custom-rules path-to-file
4. 典型生态项目
Hopper 可以与以下开源项目结合使用,以增强模糊测试的效果:
- AFL (American Fuzzy Lop): 用于生成和优化模糊测试用例。
- LLVM: 用于源代码级别的插桩和优化。
- E9Patch: 用于二进制代码插桩。
通过结合这些工具,Hopper 可以更全面地覆盖库的 API 使用情况,发现潜在的安全漏洞。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考