{"id":17219366,"url":"https://github.com/andreafioraldi/libafl-clean-history","last_synced_at":"2025-03-25T14:42:02.990Z","repository":{"id":62107370,"uuid":"557854434","full_name":"andreafioraldi/libafl-clean-history","owner":"andreafioraldi","description":null,"archived":false,"fork":false,"pushed_at":"2022-10-26T12:37:37.000Z","size":3434,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-30T13:26:20.689Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreafioraldi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"AFLplusplus","patreon":null,"open_collective":"AFLplusplusEU","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2022-10-26T12:37:15.000Z","updated_at":"2022-10-26T12:39:49.000Z","dependencies_parsed_at":"2022-10-26T14:00:27.210Z","dependency_job_id":null,"html_url":"https://github.com/andreafioraldi/libafl-clean-history","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreafioraldi%2Flibafl-clean-history","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreafioraldi%2Flibafl-clean-history/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreafioraldi%2Flibafl-clean-history/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreafioraldi%2Flibafl-clean-history/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreafioraldi","download_url":"https://codeload.github.com/andreafioraldi/libafl-clean-history/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245484663,"owners_count":20623128,"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-10-15T03:49:42.924Z","updated_at":"2025-03-25T14:42:02.964Z","avatar_url":"https://github.com/andreafioraldi.png","language":"Rust","funding_links":["https://github.com/sponsors/AFLplusplus","https://opencollective.com/AFLplusplusEU"],"categories":[],"sub_categories":[],"readme":"# LibAFL, the fuzzer library.\n\n \u003cimg align=\"right\" src=\"https://github.com/AFLplusplus/Website/raw/master/static/logo_256x256.png\" alt=\"AFL++ Logo\"\u003e\n\nAdvanced Fuzzing Library - Slot your own fuzzers together and extend their features using Rust.\n\nLibAFL is written and maintained by\n\n * [Andrea Fioraldi](https://twitter.com/andreafioraldi) \u003candrea@aflplus.plus\u003e\n * [Dominik Maier](https://twitter.com/domenuk) \u003cdominik@aflplus.plus\u003e\n * [s1341](https://twitter.com/srubenst1341) \u003cgithub@shmarya.net\u003e\n * [Dongjia Zhang](https://github.com/tokatoka) \u003ctoka@aflplus.plus\u003e\n\n## Why LibAFL?\n\nLibAFL gives you many of the benefits of an off-the-shelf fuzzer, while being completely customizable.\nSome highlight features currently include:\n- `fast`: We do everything we can at compile time, keeping runtime overhead minimal. Users reach 120k execs/sec in frida-mode on a phone (using all cores).\n- `scalable`: `Low Level Message Passing`, `LLMP` for short, allows LibAFL to scale almost linearly over cores, and via TCP to multiple machines.\n- `adaptable`: You can replace each part of LibAFL. For example, `BytesInput` is just one potential form input:\nfeel free to add an AST-based input for structured fuzzing, and more.\n- `multi platform`: LibAFL was confirmed to work on *Windows*, *MacOS*, *Linux*, and *Android* on *x86_64* and *aarch64*. `LibAFL` can be built in `no_std` mode to inject LibAFL into obscure targets like embedded devices and hypervisors.\n- `bring your own target`: We support binary-only modes, like Frida-Mode, as well as multiple compilation passes for sourced-based instrumentation. Of course it's easy to add custom instrumentation backends.\n\n## Overview\n\nLibAFL is a collection of reusable pieces of fuzzers, written in Rust.\nIt is fast, multi-platform, no_std compatible, and scales over cores and machines.\n\nIt offers a main crate that provide building blocks for custom fuzzers, [libafl](./libafl), a library containing common code that can be used for targets instrumentation, [libafl_targets](./libafl_targets), and a library providing facilities to wrap compilers, [libafl_cc](./libafl_cc).\n\nLibAFL offers integrations with popular instrumentation frameworks. At the moment, the supported backends are:\n\n+ SanitizerCoverage, in [libafl_targets](./libafl_targets)\n+ Frida, in [libafl_frida](./libafl_frida)\n+ QEMU user-mode, in [libafl_qemu](./libafl_qemu)\n\n## Getting started\n\n1. Install the Dependecies\n- The Rust development language.  \nWe highly recommend *not* to use e.g. your Linux distribition package as this is likely outdated. So rather install\nRust directly, instructions can be found [here](https://www.rust-lang.org/tools/install).\n\n- LLVM tools  \nThe LLVM tools are needed (newer than LLVM 11.0.0 but older than LLVM 15.0.0)\n\n- Cargo-make  \nWe use cargo-make to build the fuzzers in `fuzzers/` directory. You can install it with\n\n```\ncargo install cargo-make\n```\n\n2. Clone the LibAFL repository with\n\n```\ngit clone https://github.com/AFLplusplus/LibAFL\n```\n\n3. Build the library using\n\n```\ncargo build --release\n```\n\n4. Build the API documentation with\n\n```\ncargo doc\n```\n\n5. Browse the LibAFL book (WIP!) with (requires [mdbook](https://github.com/rust-lang/mdBook))\n\n```\ncd docs \u0026\u0026 mdbook serve\n```\n\nWe collect all example fuzzers in [`./fuzzers`](./fuzzers/).\nBe sure to read their documentation (and source), this is *the natural way to get started!*\n\nYou can run each example fuzzer with\n```\ncargo make run\n```\nas long as the fuzzer directory has `Makefile.toml` file.\n\nThe best-tested fuzzer is [`./fuzzers/libfuzzer_libpng`](./fuzzers/libfuzzer_libpng), a multicore libfuzzer-like fuzzer using LibAFL for a libpng harness.\n\n## Resources\n\n+ [Installation guide](./docs/src/getting_started/setup.md)\n\n+ [Online API documentation](https://docs.rs/libafl/)\n\n+ The LibAFL book (WIP) [online](https://aflplus.plus/libafl-book) or in the [repo](./docs/src/)\n\n+ Our research [paper](https://www.s3.eurecom.fr/docs/ccs22_fioraldi.pdf)\n\n+ Our RC3 [talk](http://www.youtube.com/watch?v=3RWkT1Q5IV0 \"Fuzzers Like LEGO\") explaining the core concepts\n\n+ Our Fuzzcon Europe [talk](https://www.youtube.com/watch?v=PWB8GIhFAaI \"LibAFL: The Advanced Fuzzing Library\") with a (a bit but not so much outdated) step-by-step discussion on how to build some example fuzzers\n\n+ The Fuzzing101 [solutions](https://github.com/epi052/fuzzing-101-solutions) \u0026 series of [blog posts](https://epi052.gitlab.io/notes-to-self/blog/2021-11-01-fuzzing-101-with-libafl/) by [epi](https://github.com/epi052)\n\n+ Blogpost on binary-only fuzzing lib libaf_qemu, [Hacking TMNF - Fuzzing the game server](https://blog.bricked.tech/posts/tmnf/part1/), by [RickdeJager](https://github.com/RickdeJager).\n\n## Contributing\n\nFor bugs, feel free to open issues or contact us directly. Thank you for your support. \u003c3\n\nEven though we will gladly assist you in finishing up your PR, try to\n- keep all the crates compiling with *stable* rust (hide the eventual non-stable code under [`cfg`s](https://github.com/AFLplusplus/LibAFL/blob/main/libafl/build.rs#L26))\n- run `cargo fmt` on your code before pushing\n- check the output of `cargo clippy --all` or `./clippy.sh`\n- run `cargo build --no-default-features` to check for `no_std` compatibility (and possibly add `#[cfg(feature = \"std\")]`) to hide parts of your code.\n\nSome of the parts in this list may be hard, don't be afraid to open a PR if you cannot fix them by yourself, so we can help.\n\n## Cite\n\nIf you use LibAFL for your academic work, please cite the following paper:\n\n```bibtex\n@inproceedings{libafl,\n author       = {Andrea Fioraldi and Dominik Maier and Dongjia Zhang and Davide Balzarotti},\n title        = {{LibAFL: A Framework to Build Modular and Reusable Fuzzers}},\n booktitle    = {Proceedings of the 29th ACM conference on Computer and communications security (CCS)},\n series       = {CCS '22},\n year         = {2022},\n month        = {November},\n location     = {Los Angeles, U.S.A.},\n publisher    = {ACM},\n}\n```\n\n#### License\n\n\u003csup\u003e\nLicensed under either of \u003ca href=\"LICENSE-APACHE\"\u003eApache License, Version\n2.0\u003c/a\u003e or \u003ca href=\"LICENSE-MIT\"\u003eMIT license\u003c/a\u003e at your option.\n\u003c/sup\u003e\n\n\u003cbr\u003e\n\n\u003csub\u003e\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in this crate by you, as defined in the Apache-2.0 license, shall\nbe dual licensed as above, without any additional terms or conditions.\n\u003c/sub\u003e\n\n\u003cbr\u003e\n\n\u003csub\u003e\nDependencies under more restrictive licenses, such as GPL or AGPL, can be enabled\nusing the respective feature in each crate when it is present, such as the\n'agpl' feature of the libafl crate.\n\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreafioraldi%2Flibafl-clean-history","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreafioraldi%2Flibafl-clean-history","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreafioraldi%2Flibafl-clean-history/lists"}