Efficient grammar-based fuzzer.
Project description
Syntax Symphony
Overview
Syntax Symphony is a powerful fuzzer designed to automatically generate test inputs for various applications based on user-defined grammars. The fuzzer leverages the grammar rules to create meaningful and diverse input data, facilitating robust testing of applications. In order to achieve high diversity and coverage of grammar rules, it uses k-coverage, as discussed by Havrikov et al.. This work has been greatly influenced by the concepts and ideas outlined in the Fuzzing Book.
With Syntax Symphony, you can enhance the quality and reliability of your software by generating a comprehensive set of test cases effortlessly. Start fuzzing today and make your software more robust against unexpected inputs!
Getting Started
Prerequisites
- Python 3.10 or higher
Installation
From PyPI
pip install syntax-symphony
From Source
- Clone the repository:
git clone
cd syntax_symphony
- We recommend creating a virtual environment to install the dependencies:
python -m venv venv
source venv/bin/activate
python -m pip install -r requirements.txt
- Install locally (add flag -e to install in editable mode):
pip install .
- To build the package:
python -m pip install build
python -m build
This should create the package in the dist/
directory.
CLI
Syntax Symphony provides a command-line interface (CLI) to interact with the fuzzer. The CLI allows you to specify the grammar file, the number of test cases to generate, and the output directory to save the generated test cases among others.
Example usage:
# Generate 100 test cases using the grammar file examples/expr_grammar.json
ssfuzz -g examples/expr_grammar.json -c 100
# Save the output in the directory out/
ssfuzz -g examples/expr_grammar.json -c 100 -d out
# Set the start symbol
ssfuzz -g examples/expr_grammar.json -c 100 --start begin
# Set the file extension
ssfuzz -g examples/expr_grammar.json -c 100 -e json
Full syntax:
ssfuzz [-h] -g FILE [-s SYMBOL] -c NUMBER [-d DIR] [-e EXT] [--max-depth NUMBER] [--min-depth NUMBER] [-k NUMBER]
Syntax Symphony Fuzzer
options:
-h, --help show this help message and exit
-g FILE, --grammar FILE
Path to the grammar file
-s SYMBOL, --start SYMBOL
Start symbol of the grammar (without <...>). Default: start
-c NUMBER, --count NUMBER
Number of strings to generate
-d DIR, --dir DIR Output directory for the generated strings. Default: output
-e EXT, --file-extension EXT
The file extension to be used for the produced documents. Default: txt
--max-depth NUMBER Maximum depth for the derivation trees. Default: 10
--min-depth NUMBER Minimum depth for the derivation trees. Default: 1
-k NUMBER, --kcov NUMBER
Number of strings to generate for k-cov. Default: 1
API
Syntax Symphony can also be used as a library in your Python projects. The API provides a simple interface to generate test inputs using the fuzzer.
Example usage:
from syntax_symphony.fuzzer import SyntaxSymphony
from syntax_symphony.grammar import Grammar
# Define the grammar
grammar = Grammar({
"<start>": ["<expr>"],
"<expr>": ["<term> + <expr>", "<term> - <expr>", "<term>"],
"<term>": ["<factor> * <term>", "<factor> / <term>", "<factor>"],
"<factor>": ["<number>", "(<expr>)"],
"<number>": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
})
# Create the fuzzer
fuzzer = SyntaxSymphony(grammar)
# Generate 10 test cases
for i in range(10):
test_case = fuzzer.fuzz()
print(test_case)
Contributing
We welcome contributions from the community. If you have ideas for improvements, new features, or bug fixes, please submit a pull request or open an issue on our GitHub repository.
License
This project is licensed under the MIT License. See LICENSE for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file syntax_symphony-0.1.0.tar.gz
.
File metadata
- Download URL: syntax_symphony-0.1.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f9dfcbc926c77ed79a040ea5b29cc47230d40b478e8e97b1f6e649090a3af26 |
|
MD5 | bbedbb06448a2e461c3870641c47c236 |
|
BLAKE2b-256 | e9276c6f338c94c6800833c51b00d48b249b543da26f714654bd7884565b2bf1 |
File details
Details for the file syntax_symphony-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: syntax_symphony-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a34b69afa988af1694bae1e197247cb105bcef2137bec11048b4fddcd35beca |
|
MD5 | 8eab0ca0b47049cd5f42ae044fd4460f |
|
BLAKE2b-256 | 8c88e994896b4aafc3e87b41e078c11152518ad965233bae401af594d66eb8a4 |