* Wrote a manpage. Phew.
This commit is contained in:
parent
728cfe90bf
commit
c95059bb66
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
SUBDIRS = src
|
SUBDIRS = src
|
||||||
DIST_SUBDIRS = $(SUBDIRS) test
|
DIST_SUBDIRS = $(SUBDIRS) test doc
|
||||||
|
|
||||||
EXTRA_DIST = bootstrap AUTHORS
|
EXTRA_DIST = bootstrap AUTHORS
|
||||||
AUTOMAKE_OPTIONS = foreign dist-bzip2
|
AUTOMAKE_OPTIONS = foreign dist-bzip2
|
||||||
|
|||||||
@ -43,6 +43,7 @@ CFLAGS="${CFLAGS} -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wstrict-protot
|
|||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
Makefile
|
Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
|
doc/Makefile
|
||||||
test/Makefile
|
test/Makefile
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
6
doc/Makefile.am
Normal file
6
doc/Makefile.am
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# $Id: Makefile.am 871 2006-09-25 15:58:33Z sam $
|
||||||
|
|
||||||
|
EXTRA_DIST = zzuf.1
|
||||||
|
|
||||||
|
man_MANS = zzuf.1
|
||||||
|
|
||||||
206
doc/zzuf.1
Normal file
206
doc/zzuf.1
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
.TH zzuf 1 "2006-12-22" "zzuf"
|
||||||
|
.SH NAME
|
||||||
|
zzuf \- multiple purpose fuzzer
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B zzuf
|
||||||
|
[
|
||||||
|
.B \-vqdh
|
||||||
|
] [
|
||||||
|
.B \-r
|
||||||
|
.I ratio
|
||||||
|
] [
|
||||||
|
.B \-s
|
||||||
|
.I seed[:stop]
|
||||||
|
] [
|
||||||
|
.B \-F
|
||||||
|
.I children
|
||||||
|
]
|
||||||
|
.PD 0
|
||||||
|
.IP
|
||||||
|
.PD
|
||||||
|
[
|
||||||
|
.B \-B
|
||||||
|
.I bytes
|
||||||
|
] [
|
||||||
|
.B \-T
|
||||||
|
.I seconds
|
||||||
|
]
|
||||||
|
.PD 0
|
||||||
|
.IP
|
||||||
|
.PD
|
||||||
|
[
|
||||||
|
.B \-i
|
||||||
|
.I include
|
||||||
|
] [
|
||||||
|
.B \-e
|
||||||
|
.I exclude
|
||||||
|
]
|
||||||
|
.I COMMAND [ARGS]...
|
||||||
|
.RI
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B Zzuf
|
||||||
|
is a transparent application input fuzzer. It works by intercepting
|
||||||
|
file operations and changing random bits in the program's input.
|
||||||
|
.B Zzuf's
|
||||||
|
behaviour is deterministic, making it easy to reproduce bugs.
|
||||||
|
.RI
|
||||||
|
.SH USAGE
|
||||||
|
.B Zzuf
|
||||||
|
will run an application specified on its command line, one or several times,
|
||||||
|
with optional arguments, and will report the application's behaviour on
|
||||||
|
the standard output.
|
||||||
|
|
||||||
|
If you want to specify arguments for your application, put a
|
||||||
|
.B \-\-
|
||||||
|
marker before them on the command line, or
|
||||||
|
.B zzuf
|
||||||
|
will try to interpret them as arguments for itself.
|
||||||
|
.RI
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-r, \-\-ratio <ratio>
|
||||||
|
Specify the amount of bits that will be randomly fuzzed. A value of 0
|
||||||
|
will not fuzz anything. A value of 0.05 will fuzz 5% of the open files'
|
||||||
|
bits. A value of 1.0 or more will fuzz all the bytes, theoretically making
|
||||||
|
the input files undiscernible from random data. The default fuzzing ratio
|
||||||
|
is 0.004 (fuzz 0.4% of the files' bits).
|
||||||
|
.TP
|
||||||
|
.B \-s, \-\-seed <seed>
|
||||||
|
.PD 0
|
||||||
|
.TP
|
||||||
|
.B \-s, \-\-seed <start:stop>
|
||||||
|
.PD
|
||||||
|
Specify the random seed to use for fuzzing, or an interval of random seeds.
|
||||||
|
Running
|
||||||
|
.B zzuf
|
||||||
|
twice with the same random seed will fuzz the files exactly the same way,
|
||||||
|
even with a different target application. The purpose of this is to use
|
||||||
|
simple utilities such as
|
||||||
|
.B cat
|
||||||
|
or
|
||||||
|
.B cp
|
||||||
|
to generate a file that causes the target application to crash.
|
||||||
|
|
||||||
|
If an interval is specified,
|
||||||
|
.B zzuf
|
||||||
|
will run the application several times, each time with a different seed, and
|
||||||
|
report the behaviour of each run.
|
||||||
|
.TP
|
||||||
|
.B \-F, \-\-fork <children>
|
||||||
|
Specify the number of simultaneous children that can be run. This option is
|
||||||
|
only useful if the
|
||||||
|
.B \-s
|
||||||
|
flag is used with an interval argument.
|
||||||
|
.TP
|
||||||
|
.B \-B, \-\-max\-bytes <n>
|
||||||
|
Automatically terminate child processes that output more than
|
||||||
|
.B <n>
|
||||||
|
bytes on the standard output and standard error channels. This is useful to
|
||||||
|
detect infinite loops.
|
||||||
|
.TP
|
||||||
|
.B \-T, \-\-max\-time <n>
|
||||||
|
Automatically terminate child processes that run for more than
|
||||||
|
.B <n>
|
||||||
|
seconds. This is useful to detect infinite loops or processes stuck in other
|
||||||
|
situations.
|
||||||
|
.TP
|
||||||
|
.B \-q, \-\-quiet
|
||||||
|
Hide the output of the fuzzed application. This is useful if the application
|
||||||
|
is very verbose but only its exit code is really useful to you.
|
||||||
|
.TP
|
||||||
|
.B \-i, \-\-include <regex>
|
||||||
|
Only fuzz files whose name matches the
|
||||||
|
.B <regex>
|
||||||
|
regular expression. Use this for instance if your application reads
|
||||||
|
configuration files in many places and you do not want them to be fuzzed.
|
||||||
|
.TP
|
||||||
|
.B \-e, \-\-exclude <regex>
|
||||||
|
Do not fuzz files whose name matches the
|
||||||
|
.B <regex>
|
||||||
|
regular expression. This option supersedes anything that is specified by the
|
||||||
|
.B \-\-exclude
|
||||||
|
flag. Use this for instance if you do not know for sure what files your
|
||||||
|
application is going to read, but do not want it to fuzz files in the
|
||||||
|
.B /etc
|
||||||
|
directory.
|
||||||
|
.TP
|
||||||
|
.B \-d, \-\-debug
|
||||||
|
Activate the display of debug messages.
|
||||||
|
.TP
|
||||||
|
.B \-h, \-\-help
|
||||||
|
Display a short help message and exit.
|
||||||
|
.TP
|
||||||
|
.B \-v, \-\-version
|
||||||
|
Output version information and exit.
|
||||||
|
.RI
|
||||||
|
.SH EXAMPLES
|
||||||
|
Fuzz the input of the
|
||||||
|
.B cat
|
||||||
|
program using default settings:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
.B % zzuf cat /etc/motd
|
||||||
|
|
||||||
|
.fi
|
||||||
|
Fuzz 1% of the input bits of the
|
||||||
|
.B cat
|
||||||
|
program using seed 94324:
|
||||||
|
.nf
|
||||||
|
|
||||||
|
.B % zzuf -s 94324 -r 0.01 cat /etc/motd
|
||||||
|
|
||||||
|
.fi
|
||||||
|
Fuzz the input of the
|
||||||
|
.B convert
|
||||||
|
program, using file
|
||||||
|
.B foo.jpeg
|
||||||
|
as the original input and restricting fuzzing to filenames matching the
|
||||||
|
regular expression
|
||||||
|
.B "foo[.]jpeg"
|
||||||
|
(because
|
||||||
|
.B convert
|
||||||
|
will also open its own configuration files and we do not want
|
||||||
|
.B zzuf
|
||||||
|
to fuzz them):
|
||||||
|
.nf
|
||||||
|
|
||||||
|
.B % zzuf -i "foo[.]jpeg" convert -- foo.jpeg -format tga /dev/null
|
||||||
|
|
||||||
|
.fi
|
||||||
|
Fuzz the input of
|
||||||
|
.BR vlc ,
|
||||||
|
using file
|
||||||
|
.B movie.avi
|
||||||
|
as the original input, and generate
|
||||||
|
.B fuzzy-movie.avi
|
||||||
|
which is a file that can be fed to
|
||||||
|
.B vlc
|
||||||
|
to reproduce the same behaviour without using
|
||||||
|
.BR zzuf :
|
||||||
|
.fn
|
||||||
|
|
||||||
|
.B % zzuf -s 87423 -r 0.01 vlc movie.avi
|
||||||
|
|
||||||
|
.B % zzuf -s 87423 -r 0.01 cp movie.avi fuzzy-movie.avi
|
||||||
|
|
||||||
|
.B % vlc fuzzy-movie.avi
|
||||||
|
|
||||||
|
.fi
|
||||||
|
.RI
|
||||||
|
.SH BUGS
|
||||||
|
Only the most common file operations are implemented as of now:
|
||||||
|
.BR open (),
|
||||||
|
.BR read (),
|
||||||
|
.BR fopen (),
|
||||||
|
.BR fseek (),
|
||||||
|
etc. One important unimplemented function is
|
||||||
|
.BR fopen ().
|
||||||
|
|
||||||
|
Network fuzzing is not implemented. It is not yet possible to insert or
|
||||||
|
drop bytes from the input, to fuzz according to the file format, or to do
|
||||||
|
all these complicated operations. They are planned, though.
|
||||||
|
.RI
|
||||||
|
.SH AUTHOR
|
||||||
|
.B Zzuf
|
||||||
|
and this manual page were written by Sam Hocevar <sam@zoy.org>. There is a
|
||||||
|
webpage available at http://sam.zoy.org/zzuf/
|
||||||
Loading…
x
Reference in New Issue
Block a user