You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 36ed224bac
Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a)
1 year ago
..
Makefile Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
README.md Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
TODO Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
afl-untracer.c Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ghidra_get_patchpoints.java Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
ida_get_patchpoints.py Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
libtestinstr.c Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago
patches.txt Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a) 1 year ago

README.md

afl-untracer - fast fuzzing of binary-only libraries

Introduction

afl-untracer is an example skeleton file which can easily be used to fuzz a closed source library.

It requires less memory and is x3-5 faster than QEMU mode, however, it is way more course grained and does not provide interesting features like compcov or cmplog.

Supported is so far Intel (i386/x86_64) and AARCH64.

How-to

Modify afl-untracer.c

Read and modify afl-untracer.c, then make. To adapt afl-untracer.c to your needs, read the header of the file and then search and edit the STEP 1, STEP 2 and STEP 3 locations.

Generate patches.txt file

To generate the patches.txt file for your target library use the ida_get_patchpoints.py script for IDA Pro or ghidra_get_patchpoints.java for Ghidra.

The patches.txt file has to be pointed to by AFL_UNTRACER_FILE.

To easily run the scripts without needing to run the GUI with Ghidra:

/opt/ghidra/support/analyzeHeadless /tmp/ tmp$$ -import libtestinstr.so -postscript ./ghidra_get_patchpoints.java
rm -rf /tmp/tmp$$

The file is created at ~/Desktop/patches.txt

Fuzzing

Example (after modifying afl-untracer.c to your needs, compiling and creating patches.txt):

LD_LIBRARY_PATH=/path/to/target/library AFL_UNTRACER_FILE=./patches.txt afl-fuzz -i in -o out -- ./afl-untracer

(or even remote via afl-network-proxy).

Testing and debugging

For testing/debugging you can try:

make DEBUG=1
AFL_UNTRACER_FILE=./patches.txt AFL_DEBUG=1 gdb ./afl-untracer

and then you can easily set breakpoints to "breakpoint" and "fuzz".

Background

This idea is based on UnTracer and modified by Trapfuzz. This implementation is slower because the traps are not patched out with each run, but on the other hand gives much better coverage information.