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.1.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

syntax_symphony-0.1.1-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file syntax_symphony-0.1.1.tar.gz.

File metadata

  • Download URL: syntax_symphony-0.1.1.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for syntax_symphony-0.1.1.tar.gz
Algorithm Hash digest
SHA256 14093c2ce66f6fbf312c22e40fd8b2caac79dd7328162aa4c925022512e2c387
MD5 75d5c9b83b5e0b0895ce5bdfde8946e6
BLAKE2b-256 fbbac033c43da98ba5782a34c1f2fb1487b3778282b9bb3a3ecbcc67e44bd1dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for syntax_symphony-0.1.1.tar.gz:

Publisher: publish_to_pypi.yml on StanimirIglev/syntax-symphony

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for syntax_symphony-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 de0f7c1880eac58b1678648251acc1610ce1ca113f17d508fe5c3f9b26391d7a
MD5 e0a2f24c70d87f353526a2668261ee0e
BLAKE2b-256 c29e3dc81c3899998cd69c9d38ee0b5750200d1dddc5705180aa152289ff2575

See more details on using hashes here.

Provenance

The following attestation bundles were made for syntax_symphony-0.1.1-py3-none-any.whl:

Publisher: publish_to_pypi.yml on StanimirIglev/syntax-symphony

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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