{"id":13546099,"url":"https://github.com/impalabs/hyperpom","last_synced_at":"2025-04-05T18:12:12.077Z","repository":{"id":63054977,"uuid":"541963156","full_name":"Impalabs/hyperpom","owner":"Impalabs","description":"AArch64 fuzzer based on the Apple Silicon hypervisor ","archived":false,"fork":false,"pushed_at":"2023-11-23T16:17:05.000Z","size":4109,"stargazers_count":193,"open_issues_count":1,"forks_count":16,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T17:13:16.866Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Impalabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-27T07:43:24.000Z","updated_at":"2025-03-28T12:20:04.000Z","dependencies_parsed_at":"2025-01-27T16:48:24.854Z","dependency_job_id":null,"html_url":"https://github.com/Impalabs/hyperpom","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Impalabs%2Fhyperpom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Impalabs%2Fhyperpom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Impalabs%2Fhyperpom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Impalabs%2Fhyperpom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Impalabs","download_url":"https://codeload.github.com/Impalabs/hyperpom/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247378152,"owners_count":20929297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T12:00:31.517Z","updated_at":"2025-04-05T18:12:12.042Z","avatar_url":"https://github.com/Impalabs.png","language":"Rust","funding_links":[],"categories":["Vulnerability Assessment"],"sub_categories":["Fuzzing"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"300\" height=\"300\" src=\"./hyperpom.svg\" alt=\"hyperpom logo\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cb style=\"font-size: 2em\"\u003eHYPERPOM\u003c/b\u003e\n  \u003cbr/\u003e\n  \u003cspan style=\"font-size: 1.5em\"\u003eAArch64 fuzzing library based on the Apple Silicon hypervisor\u003c/b\u003e\n\u003c/p\u003e\n\n\u003chr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/impalabs/hyperpom?style=for-the-badge\u0026color=ff9901\" alt=\"shields.io license\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/v/release/impalabs/hyperpom?style=for-the-badge\u0026color=f38702\" alt=\"shields.io version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-MacOS%20on%20Apple%20Silicon-e77600?style=for-the-badge\" alt=\"shields.io platform\" /\u003e\n  \u003cbr/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/rust-nightly-da6500?style=for-the-badge\" alt=\"shields.io rust version\" /\u003e\n  \u003ca href=\"https://crates.io/crates/hyperpom\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/hyperpom?color=cd5300\u0026style=for-the-badge\" alt=\"shields.io crates.io\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://docs.rs/hyperpom\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs.rs-rustdoc-bf4200?style=for-the-badge\" alt=\"shields.io crates.io\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003chr/\u003e\n\n## Table of contents\n\n * [Disclaimer](#warning-disclaimer)\n * [Getting Started](#getting-started)\n   * [Prerequisites](#prerequisites)\n   * [Self-Signed Binaries and Hypervisor Entitlement](#self-signed-binaries-and-hypervisor-entitlement)\n   * [Compilation Workflow](#compilation-workflow)\n * [Documentation](#documentation)\n * [Examples](#examples)\n * [Running the Tests](#running-the-tests)\n * [Authors](#authors)\n\n\nHyperpom is a coverage-guided mutation-based fuzzing framework built on top of the [Apple Silicon Hypervisor](https://developer.apple.com/documentation/hypervisor/apple_silicon). It has been designed to easily instrument and fuzz AArch64 userland binaries.\n\n## :warning: Disclaimer\n\nThe idea behind this project was to create an efficient and fast fuzzer that would leverage Apple Silicon's features. However, at this stage, while the fuzzer works, it is still mostly a proof of concept and requires tons of enhancement to provide better features, usability and performances.\n\nIt might be enough for your use cases, but keep in mind that you might encounter limitations that weren't factored in while designing the project. In any case, feel free to open an issue and we'll try to address your problem.\n\n## Getting Started\n\n### Prerequisites\n\n 1. Install Rust and `rustup` using the [official guide](https://www.rust-lang.org/tools/install).\n 2. Install the [nightly channel](https://rust-lang.github.io/rustup/concepts/channels.html).\n\n```\nrustup toolchain install nightly\n```\n\n 3. To use this channel when compiling you can either:\n\n    - set it as default using `rustup default nightly`;\n    - or add `+nightly` everytime you compile a binary with `cargo`.\n\n 4. Install Cmake, using `brew` for example:\n\n```console\nbrew install cmake\n```\n\n### Self-Signed Binaries and Hypervisor Entitlement\n\nTo be able to reach the Hypervisor Framework, a binary executable has to have been granted the [hypervisor entitlement](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_hypervisor).\n\nYou can add this entitlement to a binary located at `/path/to/binary` by using the `entitlements.xml` file found at the root of the Hyperpom repository and the following command:\n\n```\ncodesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary\n```\n\n### Compilation Workflow\n\nCreate a Rust project and add Hyperpom as a dependency in `Cargo.toml`. You can either pull it from [crates.io](https://crates.io/crates/hyperpom) ...\n\n```toml\n# Check which version is the latest, this part of the README might not be updated\n# in future releases.\nhyperpom = \"0.1.0\"\n```\n\n... or directly from the [GitHub repository](https://github.com/impalabs/hyperpom).\n\n```toml\nhyperpom = { git=\"https://github.com/impalabs/hyperpom\", branch=\"master\" }\n```\n\nCreate a file called `entitlements.txt` in the project's root directory and add the following:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n    \u003ckey\u003ecom.apple.security.hypervisor\u003c/key\u003e\n    \u003ctrue/\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\nWrite code and then build the project.\n\n```\ncargo build --release\n```\n\nSign the binary and grant the hypervisor entitlement.\n\n```\ncodesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}\n```\n\nRun the binary.\n\n```\ntarget/release/${PROJECT_NAME}\n```\n\n## Documentation\n\nThe documentation is available online at the following address: [https://docs.rs/hyperpom](https://docs.rs/hyperpom)\n\nAlternatively, you can generate it using `cargo`:\n\n```\ncargo doc --open\n```\n\nThe documentation contains information on using the framework and its internals. For an in-depth guide, have a look at the `Loader` chapter, which provides examples on how to use the fuzzer and harness your targets.\n\n## Examples\n\nFour examples are provided to give you a better understanding of how the framework operates and get you started:\n\n * [simple_executor](examples/simple_executor): showcases how to run arbitrary code in a VM using an `Executor`.\n * [simple_tracer](examples/simple_tracer): runs a program while tracing its instructions.\n * [simple_fuzzer](examples/simple_fuzzer): fuzzes a simple program.\n * [upng_fuzzer](examples/upng_fuzzer): fuzzer for the [uPNG](https://github.com/elanthis/upng/) library.\n\nYou can also have a look at the [tests](tests/tests.rs).\n\n## Running the Tests\n\nTo run tests using the `Makefile` provided with the project, you'll first need to install [`jq`](https://stedolan.github.io/jq/download/). You can do so using `brew`:\n\n```\nbrew install jq\n```\n\nYou can then run the tests with the provided `Makefile` using the following command:\n\n```\nmake tests\n```\n\n## Authors\n\n* [**Maxime Peterlin**](https://twitter.com/lyte__) - hyperpom@impalabs.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpalabs%2Fhyperpom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimpalabs%2Fhyperpom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpalabs%2Fhyperpom/lists"}