Skip to content

Latest commit

 

History

History
250 lines (181 loc) · 7.13 KB

README.md

File metadata and controls

250 lines (181 loc) · 7.13 KB

Contributors Forks Stargazers Issues LinkedIn


A TV screen with static

FuzzTheWorld

A fuzzing suite for C/C++ programs, written in Rust.

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. Contact
  7. Acknowledgments

About The Project

This fuzzing suite combines LLVM coverage instrumentation with random input generation to effectively test C/C++ programs. By leveraging Rust's safety guarantees and performance, it provides robust fuzzing capabilities with detailed coverage analysis. The suite automatically tracks execution paths, identifies crashes, and generates comprehensive reports, making it a valuable tool for finding potential vulnerabilities and bugs in C/C++ code.

Features

  • Random input generation with configurable parameters
  • LLVM-based coverage tracking
  • Coverage visualization with plotters
  • LCOV report generation
  • Crash detection and reproduction
  • Support for ASan (Address Sanitizer)

(back to top)

Built With

  • Rust

(back to top)

Getting Started

The following instructions are for Arch Linux, if you are using a different platform, please adjust accordingly.

Prerequisites

  • Install Rust Toolchain
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs 
  • Instal git, LLVM tools, Clang
    sudo pacman -S git llvm clang

Installation

git clone 
cd fuzz_suite
cargo build

(back to top)

Usage

Place your C/C++ program in the examples directory:

examples/
  your_program/
    src/
      main.c

Run the fuzzer:

cargo run

The fuzzer will:

  • Compile your program with coverage instrumentation
  • Generate and test random inputs
  • Track code coverage
  • Detect and save crashes
  • Generate coverage reports and visualizations

Example Output Structure

examples/your_program/
├── bin/              # Compiled binaries
├── coverage/         # Coverage data and reports
│   ├── coverage.lcov
│   └── coverage_over_time.png
├── crashes/          # Crash-inducing inputs
└── src/             # Source files

(back to top)

Roadmap

  • Lexical Fuzzing
    • Basic Fuzzing
    • Track Code Coverage
    • Mutation-Based Fuzzing
    • Greybox Fuzzing
    • Search-Based Fuzzing
    • Mutation Analysis
  • Syntactic Fuzzing
    • Grammar Fuzzing
    • Efficient Grammar Fuzzing
    • Systematic Grammar Coverage
    • Parsing Inputs
    • Probabilistic Grammar Fuzzing
    • Fuzzing with Generators
    • Greybox Grammar Fuzzing
    • Reduce Failure-Inducing Inputs
  • Semantic Fuzzing
    • Fuzzing with Constraints
    • Grammar Mining
    • Tracking Information Flow
    • Concolic Fuzzing
    • Symbolic Fuzzing
    • Mining Function Specifications

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Top contributors:

contrib.rocks image

(back to top)

Contact

Your Name - @nicholicaron - nicholicaron@gmail.com

Project Link: https://github.com/nicholicaron/FuzzTheWorld

(back to top)

Acknowledgments

(back to top)