3个版本
0.1.2 | 2022年11月15日 |
---|---|
0.1.1 | 2022年11月14日 |
0.1.0 | 2022年11月14日 |
#387 in 硬件支持
26 每月下载量
475KB
6K SLoC
HYPERPOM
基于Apple Silicon虚拟机的高效AArch64模糊测试库
目录
Hyperpom 是一个基于 Apple Silicon 虚拟机的高效模糊测试框架,它能够轻松地对 AArch64 用户空间二进制文件进行测试。
⚠️ 免责声明
这个项目的初衷是创建一个高效、快速的模糊测试器,以利用 Apple Silicon 的特性。然而,在这个阶段,虽然模糊测试器可以工作,但它仍然主要是一个概念验证,需要大量的改进来提供更好的功能、可用性和性能。
它可能足够满足您的需求,但请记住,您可能会遇到在项目设计时没有考虑到的限制。无论如何,欢迎您提出问题,我们会尽力解决您的问题。
入门
先决条件
rustup toolchain install nightly
-
在编译时使用此频道,您可以选择以下任一方式
- 使用
rustup default nightly
设置为默认频道; - 或者在每次使用
cargo
编译二进制文件时添加+nightly
。
- 使用
-
使用例如
brew
安装 Cmake。
brew install cmake
自签名二进制文件和虚拟机授权
要访问虚拟机框架,必须授予二进制可执行文件 虚拟机授权。
证书链
要将此权限添加到您的项目,您首先需要一个证书链来签名您的二进制文件,这可以通过以下说明创建。
- 打开钥匙串访问应用程序。
- 转到钥匙串访问 > 证书助理 > 创建证书。
- 填写名称字段,此值将在以后用于识别我们要签名的证书,并将被称为
${CERT_NAME}
。 - 将身份类型设置为
Self-Signed Root
。 - 将证书类型设置为
Code Signing
。 - 点击创建。
您现在可以使用以下命令签名二进制文件并添加权限
codesign --entitlements entitlements.xml -s ${CERT_NAME} /path/to/binary
注意: entitlements.xml
文件在Hyperpom存储库的根目录下可用。
编译流程
创建一个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 --entitlements entitlements.xml -s ${CERT_NAME} target/release/${PROJECT_NAME}
运行二进制文件。
target/release/${PROJECT_NAME}
文档
文档可在以下地址在线查看:https://docs.rs/hyperpom
或者,您可以使用cargo
生成它
cargo doc --open
文档包含有关使用框架及其内部信息。对于深入指南,请参阅Loader
章节,它提供了如何使用模糊器和利用目标的示例。
示例
提供了四个示例,以便您更好地了解框架的工作方式并开始使用
- simple_executor:展示了如何使用
Executor
在虚拟机中运行任意代码。 - simple_tracer:在跟踪其指令的同时运行程序。
- simple_fuzzer:模糊一个简单的程序。
- upng_fuzzer:uPNG库的模糊器。
您还可以查看测试。
运行测试
要使用项目提供的Makefile
运行测试,您首先需要安装jq
。您可以使用brew
进行安装
brew install jq
然后,您可以使用提供的Makefile
使用以下命令运行测试
CERT_KEYCHAIN=${CERT_NAME} make tests
作者
依赖项
~58MB
~1.5M SLoC