MCPcopy Create free account
hub / github.com/AngoraFuzzer/Angora

github.com/AngoraFuzzer/Angora @1.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.3.0 ↗ · + Follow
2,674 symbols 5,735 edges 266 files 309 documented · 12% updated 3y ago1.3.0 · 2022-04-13★ 95338 open issues

Browse by type

Functions 2,190 Types & classes 484
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Angora

License Build Status

Angora is a mutation-based coverage guided fuzzer. The main goal of Angora is to increase branch coverage by solving path constraints without symbolic execution.

Published Work

Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.

Building Angora

Build Requirements

  • Linux-amd64 (Tested on Ubuntu 16.04/18.04 and Debian Buster)
  • Rust stable (>= 1.31), can be obtained using rustup
  • LLVM 4.0.0 - 12.0.1 : run PREFIX=/path-to-install ./build/install_llvm.sh.

Environment Variables

Append the following entries in the shell configuration file (~/.bashrc, ~/.zshrc).

export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH

Fuzzer Compilation

The build script will resolve most dependencies and setup the runtime environment.

./build/build.sh

System Configuration

As with AFL, system core dumps must be disabled.

echo core | sudo tee /proc/sys/kernel/core_pattern

Test

Test if Angora is builded successfully.

cd /path-to-angora/tests
./test.sh mini

Running Angora

Build Target Program

Angora compiles the program into two separate binaries, each with their respective instrumentation. Using autoconf programs as an example, here are the steps required.

# Use the instrumenting compilers
CC=/path/to/angora/bin/angora-clang \
CXX=/path/to/angora/bin/angora-clang++ \
LD=/path/to/angora/bin/angora-clang \
PREFIX=/path/to/target/directory \
./configure --disable-shared

# Build with taint tracking support 
USE_TRACK=1 make -j
make install

# Save the compiled target binary into a new directory
# and rename it with .taint postfix, such as uniq.taint

# Build with light instrumentation support
make clean
USE_FAST=1 make -j
make install

# Save the compiled binary into the directory previously
# created and rename it with .fast postfix, such as uniq.fast

If you fail to build by this approach, try wllvm and gllvm described in Build a target program.

Also, we have implemented taint analysis with libdft64 instead of DFSan (Use libdft64 for taint tracking).

Fuzzing

./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]

For more information, please refer to the documentation under the docs/ directory.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 1,138
Function 1,052
Class 460
Enum 21
Interface 3

Languages

C++73%
Rust17%
Python5%
C4%

Modules by API surface

llvm_mode/dfsan_rt/sanitizer_common/scripts/cpplint.py120 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_platform_limits_posix.cc110 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_win.cc86 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_common.h86 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_linux.cc83 symbols
llvm_mode/dfsan_rt/dfsan/dfsan_custom.cc76 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_coverage_libcdep.cc73 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_mac.cc67 symbols
llvm_mode/pass/DFSanPass.cc62 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_deadlock_detector.h44 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_bitvector.h44 symbols
llvm_mode/dfsan_rt/sanitizer_common/sanitizer_allocator_primary64.h43 symbols

For agents

$ claude mcp add Angora \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page