Changes between Initial Version and Version 1 of zzuf/tutorial


Ignore:
Timestamp:
05/18/2008 12:14:42 AM (16 years ago)
Author:
Sam Hocevar
Comment:

starting a zzuf tutorial

Legend:

Unmodified
Added
Removed
Modified
  • zzuf/tutorial

    v1 v1  
     1= Zzuf tutorial =
     2
     3'''WARNING''': this tutorial requires `zzuf` version 0.11 or later.
     4
     5== Basics ==
     6
     7Let’s start with a simple command that reads data from a file. We choose `hd`, the hexadecimal dump command, and tell it to read 32 bytes from `/dev/zero`:
     8
     9{{{
     10% hd -vn 32 /dev/zero
     1100000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     1200000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     1300000020
     14%
     15}}}
     16
     17Now let’s fuzz `hd`’s input using `zzuf`. It’s completely straightforward: just prepend `zzuf` to the commandline.
     18
     19{{{
     20% zzuf hd -vn 32 /dev/zero
     2100000000  00 00 02 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     2200000010  00 00 00 00 00 02 00 00  00 00 00 00 00 00 00 00  |................|
     2300000020
     24%
     25}}}
     26
     27We see that two `00` values have been changed to `02`s. `zzuf` '''intercepted''' `hd`'s opening of `/dev/zero` and automatically '''corrupted''' the bytes it read at random. Let’s do it again:
     28
     29{{{
     30% zzuf hd -vn 32 /dev/zero
     3100000000  00 00 02 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     3200000010  00 00 00 00 00 02 00 00  00 00 00 00 00 00 00 00  |................|
     3300000020
     34%
     35}}}
     36
     37We get exactly the same output. This is a very important property of `zzuf`: its behaviour is '''reproducible'''.
     38
     39== Altering the fuzzing ratio ==
     40
     41The '''fuzzing ratio''' is the proportion of bits that `zzuf` changes. It is specified with the '''`-r` flag'''. The default fuzzing ratio is 0.004, meaning "fuzz 0.4% of the bits". 32 bytes is 256 bits, and 0.4% of 256 bits is approximately 1. `zzuf` should have fuzzed 1 bit, but since it fuzzes bits at random, 2 bits is not surprising.
     42
     43Let’s try fuzzing more bits, for instance 5% of the bits, using '''`-r` 0.05''':
     44
     45{{{
     46% zzuf -r 0.05 hd -vn 32 /dev/zero
     4700000000  00 01 00 00 00 00 44 00  04 80 00 40 21 00 0a 20  |......D....@!.. |
     4800000010  40 20 00 04 00 00 02 00  00 00 00 00 00 00 00 00  |@ ..............|
     4900000020
     50%
     51}}}
     52
     53We see that 15 bits have been changed. 5% of 256 bits is 12.8, so here again the behaviour is as expected.
     54
     55Now let’s fuzz fewer bits, for instance 0.1%, using '''`-r` 0.001''':
     56
     57{{{
     58% zzuf -r 0.001 hd -vn 32 /dev/zero
     5900000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     6000000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
     6100000020
     62%
     63}}}
     64
     65No bits have been changed, because 0.1% of 256 is 0.256, so there were few chances that the bits would be changed at all.
     66
     67Very high fuzzing ratios can be specified, for instance 50%, using '''`-r` 0.5''':
     68
     69{{{
     70% zzuf -r 0.5 hd -vn 32 /dev/zero 
     7100000000  c0 a0 20 b0 ad 40 07 c2  8a 14 30 1b 83 21 1a 69  |.. ..@....0..!.i|
     7200000010  11 28 05 07 30 00 70 01  43 08 62 c8 6d 45 e4 1a  |.(..0.p.C.b.mE..|
     7300000020
     74%
     75}}}