HYPERPOM
基于 Apple Silicon 虚拟机监控程序的 AArch64 模糊测试库
Hyperpom 是一个构建于 Apple Silicon 虚拟机监控程序 之上的、基于覆盖率引导的变异模糊测试框架,专为轻松插桩和模糊测试 AArch64 用户态二进制文件而设计。
这个项目的初衷是创建一个高效、快速的模糊测试器,充分利用 Apple Silicon 的特性。然而,在现阶段,尽管模糊测试器可以运行,它仍然主要是一个概念验证,需要大量改进才能提供更好的功能、可用性和性能。
它可能足以满足你的使用场景,但请记住,你可能会遇到项目设计时未考虑到的限制。无论如何,欢迎提交 issue,我们会尽力解决你的问题。
rustup。rustup toolchain install nightly
编译时使用此通道,你可以:
rustup default nightly 将其设为默认通道;cargo 编译二进制文件时添加 +nightly。安装 Cmake,例如使用 brew:
brew install cmake
为了能够访问 Hypervisor 框架,二进制可执行文件必须被授予 虚拟机监控程序授权。
你可以使用 Hyperpom 仓库根目录下的 entitlements.xml 文件,通过以下命令将此项授权添加到位于 /path/to/binary 的二进制文件:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
创建一个 Rust 项目,并在 Cargo.toml 中将 Hyperpom 添加为依赖项。你可以从 crates.io 获取它……
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
……或者直接从 GitHub 仓库 获取。
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
在项目的根目录中创建一个名为 entitlements.txt 的文件,并添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
编写代码,然后构建项目。
cargo build --release
对二进制文件进行签名并授予虚拟机监控程序授权。
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
运行该二进制文件。
target/release/${PROJECT_NAME}
文档可在以下地址在线获取:https://docs.rs/hyperpom
或者,你可以使用 cargo 生成它:
cargo doc --open
文档包含有关使用框架及其内部机制的信息。如需深入了解,请参阅 Loader 章节,其中提供了如何使用模糊测试器以及如何为你的目标编写 harness 的示例。
提供了四个示例,帮助你更好地理解框架的运作方式并快速上手:
Executor 在虚拟机中运行任意代码。你也可以查看 tests。
要使用项目自带的 Makefile 运行测试,你首先需要安装 jq。你可以使用 brew 进行安装:
brew install jq
然后,你可以使用以下命令通过提供的 Makefile 运行测试:
make tests