OverHAuL (Harness Automation with LLMs) is a system for automatically generating libFuzzer-compatible harnesses for C projects using ReAct-style LLM agents. It iteratively builds harnesses tailored for effective fuzzing through tool-assisted reasoning — all without manual intervention. OverHAuL's goal is to make fuzzing accessible and immediate, reducing friction and accelerating the path to safer software.
- Python >=3.10
-
Clone the repository and cd into it:
git clone https://github.com/kchousos/overhaul.git; cd overhaul
-
Create a virtual environment (optional):
python3.10 -m venv .venv; source .venv/bin/activate # for bash
-
Install the project:
pip install .
-
Add an OpenAI API key in
.env, such as:# cat .env OPENAI_API_KEY=<API-key-here>
Or export it as an environment variable:
export OPENAI_API_KEY=<API-key-here>
-
Execute the main script:
overhaul <repo-link>
The cloned repo with the newly generated harness can be found in the output/ directory.
$ overhaul --help
usage: overhaul [-h] [-c COMMIT] [-m MODEL] [-f FILES [FILES ...]] [-o OUTPUT_DIR] repo
Generate fuzzing harnesses for C/C++ projects
positional arguments:
repo Link of a project's git repo, for which to generate a harness.
options:
-h, --help show this help message and exit
-c COMMIT, --commit COMMIT
A specific commit of the project to check out
-m MODEL, --model MODEL
LLM model to be used. Available: o3-mini, o3, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini
-f FILES [FILES ...], --files FILES [FILES ...]
File patterns to include in analysis (e.g. *.c *.h)
-o OUTPUT_DIR, --output-dir OUTPUT_DIR
Directory to clone the project into. Defaults to output
This project was developed as part of my BSc Thesis, under the supervision of Prof. Thanassis Avgerinos. The thesis is hosted online.