A version that supports Aflplusplus and antlr grammar can be found here.
We tested PolyGlot
on Ubuntu 18.04
.
git clone https://github.com/s3team/Polyglot && cd Polyglot
sudo apt install -y make python g++ bison flex clang-format clang
Makefile
to choose the language you want to testmake
AFL_replate_mutate/afl-fuzz
afl-gcc/afl-g++/afl-clang/afl-clang++
in AFL_replace_mutate
to compile the program you want to fuzz.Before we run the fuzzer, we need to set some values in semantic.json
. Here are some important values that you should set:
InitFileDir
: This should be an absolute path of your init seed file dir. It can be the same as/different from your path of input.BuiltinObjFile
: If you want to use the build-in functions/variables/class for semantic validation, set this path (not a single file). Refer to grammar/solidity_grammar/semantic.json
for an example. To run the fuzzer, we just run it like normal afl-fuzz
:
afl-fuzz -i path/to/inputs -o path/to/outputs -- prog [args @@]
You should collect your own seed inputs for the fuzzer.
To do
One Engine to Fuzz ‘em All: Generic Language Processor Testing with Semantic Validation
Yongheng Chen, Rui Zhong(co-first author), Hong Hu, Hangfan Zhang, Yupeng Yang, Dinghao Wu and Wenke Lee. In Proceedings of the 41st IEEE Symposium on Security and Privacy (Oakland 2021).
Rui Zhong: reversezr33@gmail.com
Hangfan Zhang: hbz5148@psu.edu
Yupeng Yang: yype@foxmail.com