/* 4f/core.c 09.09.2009 4f Krakow Labs Development -> 4f File Format Fuzzing Framework jbrown@KL Central 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/core.c */ #include "include/core.h" #include "include/oracle.h" int engine(char *tar, char *arg, int mod, char *cp, int cb, int tm, char *lgf, char *dir) { if(lgf == NULL) lgf = LOGFILE; if(dir == NULL) dir = OUTPDIR; if(mod == 0) test(tar, arg, cb, tm, lgf); if(mod == 1) bas_prepare(tar, arg, cb, tm, lgf, dir); if(mod == 2) ccc_prepare(tar, arg, cb, tm, lgf, dir); if(mod == 3) per_prepare(tar, arg, cb, tm, lgf, dir); if(mod == 4) m3u_prepare(tar, arg, cb, tm, lgf, dir); if(mod == 5) pls_prepare(tar, arg, cb, tm, lgf, dir); if(mod == 6) pul_prepare(tar, arg, cp, cb, tm, lgf, dir); if(mod == 7) tor_prepare(tar, arg, cb, tm, lgf, dir); return 0; } void process(int c, FILE **fp, char *ext, char *dir) { memset(ffn, 0, sizeof(ffn)); snprintf(ffn, sizeof(ffn), "%s/%d.%s", dir, c, ext); if((*fp = fopen(ffn, "w")) == NULL) perror("fopen"); } void process_conf(int c, FILE **fp, char *cp, char *dir) { if((*fp = fopen(cp, "w")) == NULL) perror("fopen"); } void execute(char *tar, char *arg, char *cp, int cb, int tm, char *lgf, char *ffn, char *fdsc) { char buf[256]; int stat; pid_t pid, pgid; memset(buf, 0, sizeof(buf)); pid = fork(); if(pid == 0) { setsid(); if(ptrace(PTRACE_TRACEME, NULL) != 0) perror("PTRACE_TRACEME"); if(cp != NULL) { if(execl(tar, tar, (char *)0) < 0) perror("execl"); } if(arg == NULL) { if(execl(tar, tar, ffn, (char *)0) < 0) perror("execl"); } if(arg != NULL) { if(execl(tar, tar, arg, ffn, (char *)0) < 0) perror("execl"); } } else { pgid = getpgid(pid); if(ptrace(PTRACE_CONT, pid, NULL, NULL) != 0) perror("PTRACE_CONT"); waitpid(pid, &stat, WNOHANG); debug_status(tar, lgf, ffn, fdsc, cb, pid, stat); usleep(tm); killpg(pid, SIGKILL); } } void test(char *tar, char *arg, int cb, int tm, char *lgf) { int i; fzof_gen(); for(i = 0; i <= 5; i++) { execute(tar, arg, NULL, cb, tm, lgf, fuzz[i].data, fuzz[i].desc); } } void list_oracle(void) { int i; printf("\n [Fuzzing Oracle]\n\n"); for(i = 0; i <= (FZTL-1); i++) { printf("[%d] %s\n", i+1, fuzz[i].desc); } printf("\n"); exit(0); }