/* 4f/4f.c 09.09.2009 4f Krakow Labs Development -> 4f File Format Fuzzing Framework jbrown@KL UI Module -> 4f.tar.gz Associated Files & Information: http://www.krakowlabs.com/dev/fuz/4f/4f http://www.krakowlabs.com/dev/fuz/4f/4f.c.txt http://www.krakowlabs.com/dev/fuz/4f/core.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/core.h.txt http://www.krakowlabs.com/dev/fuz/4f/debug_linux.c.txt http://www.krakowlabs.com/dev/fuz/4f/oracle.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/oracle.h.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/bas.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/ccc.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/dev/per.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/m3u.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/pls.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/mul/pul.c.txt http://www.krakowlabs.com/dev/fuz/4f/mod/net/tor.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/bas.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/ccc.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/dev/per.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/m3u.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/pls.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/mul/pul.h.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/net/tor.h.txt http://www.krakowlabs.com/dev/fuz/4f/mod/example/exa.c.txt http://www.krakowlabs.com/dev/fuz/4f/include/mod/example/exa.h.txt http://www.krakowlabs.com/dev/fuz/4f/Makefile.txt http://www.krakowlabs.com/dev/fuz/4f/doc/4f_doc.txt http://www.krakowlabs.com/dev/fuz/4f/media/4f.jpeg http://www.krakowlabs.com/dev/fuz/4f/media/4f.avi http://www.krakowlabs.com/dev/fuz/4f/4f.tar.gz 4f/4f.c */ #include "include/core.h" int engine(char *tar, char *arg, int mod, char *cp, int tm, int cb, char *lgf, char *dir); void usage(char *prog); void counter(int *n); void list_modules(void); void list_oracle(void); void usage(char *prog) { printf("\n Krakow Labs Development -> 4f"); printf("\n File Format Fuzzing Framework"); printf("\n jbrown@KL\n"); printf("\nUSAGE: %s <-T /usr/bin/target> <-M #> [-N fuzz.conf]", prog); printf("\n [-A ARGS] [-R /output] [-L log.txt] [-C] [-D]\n"); printf("\nINFO: [-O Fuzzing Oracle] [-S Modules Available]\n\n"); exit(0); } void list_modules(void) { printf("\n [Modules Available]\n\n"); printf(" (0) Test Module\n\n"); printf(" (1) Development - BASIC Source\n"); printf(" (2) Development - C Source\n"); printf(" (3) Development - PERL Source\n\n"); printf(" (4) Multimedia - Extended M3U\n"); printf(" (5) Multimedia - Extended PLS\n"); printf(" (6) Multimedia - PulseAudio CONF\n\n"); printf(" (7) Networking - Bittorrent METAINFO\n\n"); exit(0); } void counter(int *n) { (*n)++; } int main(int argc, char *argv[]) { char *tar = NULL, *cp = NULL, opt, *lgf = NULL, *arg = NULL, *dir = NULL; int mod = 0, cb = 0, tm = 100000; while ((opt = getopt(argc, argv, "T:A:M:N:CD:L:R:OS")) != EOF) { switch(opt) { case 'T': tar = optarg; // target application (full path) break; case 'A': arg = optarg; // arguments for target application (all at once, example: "-a 1 -z 2") break; case 'M': mod = atoi(optarg); // module number (target file format) break; case 'N': cp = optarg; // configuration path (fuzzing config files) | default should be specified in each module header break; case 'C': cb = 1; // clean-up bit (on/off) | default = off break; case 'D': tm = atoi(optarg); // time (microseconds) before killing process | default = 100000 break; case 'L': lgf = optarg; // logging file | default = 4f.log break; case 'R': dir = optarg; // output directory | default = /tmp break; case 'O': list_oracle(); // list fuzzing oracle break; case 'S': list_modules(); // list available modules break; default: usage(argv[0]); break; } } if(tar == NULL) usage(argv[0]); engine(tar, arg, mod, cp, cb, tm, lgf, dir); return 0; }