libprotobuf-mutator_fuzzing_learning
Learn how to combine libprotobuf-mutator with libfuzzer & AFL++
Environment Settings
- Ubuntu Linux 18.04 64 bit
- Clang 9.0.0
Install Clang/LLVM & libfuzzer
- Follow the step in this article and add the toolchain's apt repository in Ubuntu.
sudo apt-get install clang-9 libfuzzer-9-dev
Install libprotobuf-mutator
Follow the step in libprotobuf-mutator's readme
Install dependencies
sudo apt-get update
sudo apt-get install protobuf-compiler libprotobuf-dev binutils cmake \
ninja-build liblzma-dev libz-dev pkg-config autoconf libtool
Compile and test everything:
cd libprotobuf-mutator
mkdir build
cd build
cmake .. -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DLIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF=ON
ninja check # test
ninja # build
sudo ninja install # install
Notice
Use the following cmake command to buildlibprotobuf-mutator-libfuzzer.so.0
andlibprotobuf-mutator.so.0
shared library
cmake .. -GNinja -DCMAKE_C_COMPILER=clang-9 \
-DCMAKE_CXX_COMPILER=clang++-9 \
-DCMAKE_BUILD_TYPE=Debug \
-DLIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF=ON \
-DBUILD_SHARED_LIBS=ON
To build static library that can be linked into shared library, use the following
cmake
command:
cmake .. -GNinja -DCMAKE_C_COMPILER=clang-9 \
-DCMAKE_CXX_COMPILER=clang++-9 \
-DCMAKE_BUILD_TYPE=Debug \
-DLIB_PROTO_MUTATOR_DOWNLOAD_PROTOBUF=ON \
-DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC"
Learning
- Simple protobuf example
- libprotobuf + libfuzzer
- libprotobuf + libfuzzer ( custom mutator )
- How to combine libprotobuf-mutator and AFL++
- Handling input samples from AFL++ in custom mutator
Reference
- libprotobuf-mutator
- Deconstructing LibProtobuf/Mutator Fuzzing
- Custom Proto Mutation
- AFL++ custom mutator
- afl-libprotobuf-mutator