Skip to main content

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

  1. Clone the repository:
git clone
cd syntax_symphony
  1. 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
  1. Install locally (add flag -e to install in editable mode):
pip install .
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

syntax_symphony-0.1.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

syntax_symphony-0.1.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

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

Hashes for syntax_symphony-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5f9dfcbc926c77ed79a040ea5b29cc47230d40b478e8e97b1f6e649090a3af26
MD5 bbedbb06448a2e461c3870641c47c236
BLAKE2b-256 e9276c6f338c94c6800833c51b00d48b249b543da26f714654bd7884565b2bf1

See more details on using hashes here.

File details

Details for the file syntax_symphony-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for syntax_symphony-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8a34b69afa988af1694bae1e197247cb105bcef2137bec11048b4fddcd35beca
MD5 8eab0ca0b47049cd5f42ae044fd4460f
BLAKE2b-256 8c88e994896b4aafc3e87b41e078c11152518ad965233bae401af594d66eb8a4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page