aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2022-01-25 19:51:05 +0100
committerGitHub <noreply@github.com>2022-01-25 19:51:05 +0100
commited72b9ec1d685d7026efb2b7597ea3c1589c023d (patch)
treed28bf23f97ef3c43d75ec2450349ae2eeef84f4c
parent87f2789e98b2194dc3049a048d50e9c7cac6d82c (diff)
parent615a8ff986e2d456a4afa546f8b9418bf77c8792 (diff)
downloadafl++-ed72b9ec1d685d7026efb2b7597ea3c1589c023d.tar.gz
Merge pull request #1308 from schumilo/dev
add autodict capability to Nyx mode
-rw-r--r--nyx_mode/PACKER_VERSION2
m---------nyx_mode/packer0
-rw-r--r--src/afl-forkserver.c56
3 files changed, 57 insertions, 1 deletions
diff --git a/nyx_mode/PACKER_VERSION b/nyx_mode/PACKER_VERSION
index 0c9db1e3..43488114 100644
--- a/nyx_mode/PACKER_VERSION
+++ b/nyx_mode/PACKER_VERSION
@@ -1 +1 @@
-8842549
+76100c5
diff --git a/nyx_mode/packer b/nyx_mode/packer
-Subproject 8842549b5612a890258dcef812276cfdb62b76c
+Subproject 76100c52db96429350693a6c7284c5c6cbcb6b0
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 62110ad5..6a1fe858 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -425,6 +425,7 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
}
}
+ ck_free(x);
if (fsrv->nyx_runner == NULL) { FATAL("Something went wrong ..."); }
@@ -464,6 +465,61 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv,
}
+ /* autodict in Nyx mode */
+ if (!ignore_autodict) {
+ x = alloc_printf("%s/workdir/dump/afl_autodict.txt", fsrv->out_dir_path);
+ int nyx_autodict_fd = open(x, O_RDONLY);
+ ck_free(x);
+
+ if (nyx_autodict_fd >= 0) {
+ struct stat st;
+ if (fstat(nyx_autodict_fd, &st) >= 0) {
+ u32 f_len = st.st_size;
+ u8 *dict = ck_alloc(f_len);
+ if (dict == NULL) {
+ FATAL("Could not allocate %u bytes of autodictionary memory", f_len);
+ }
+
+ u32 offset = 0, count = 0;
+ u32 len = f_len;
+
+ while (len != 0) {
+
+ rlen = read(nyx_autodict_fd, dict + offset, len);
+ if (rlen > 0) {
+
+ len -= rlen;
+ offset += rlen;
+
+ } else {
+
+ FATAL(
+ "Reading autodictionary fail at position %u with %u bytes "
+ "left.",
+ offset, len);
+ }
+
+ }
+
+ offset = 0;
+ while (offset < (u32)f_len &&
+ (u8)dict[offset] + offset < (u32)f_len) {
+
+ fsrv->add_extra_func(fsrv->afl_ptr, dict + offset + 1,
+ (u8)dict[offset]);
+ offset += (1 + dict[offset]);
+ count++;
+
+ }
+
+ if (!be_quiet) { ACTF("Loaded %u autodictionary entries", count); }
+ ck_free(dict);
+
+ }
+ close(nyx_autodict_fd);
+ }
+ }
+
return;
}