summaryrefslogtreecommitdiff
path: root/tools/ffuzzer
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-10-16 19:57:03 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-10-16 19:57:03 (GMT)
commita30fc1056877860593c19498738775c0ac43794d (patch)
tree3b63f6a7c99d494756b470f5b476f9b0c211fa83 /tools/ffuzzer
parent3a2dcf9f1e6718b0a45feed8eefadb71be66f4ac (diff)
Defined a basic system based on Melkor to stress the disassembler and the Python bindings.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@598 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'tools/ffuzzer')
-rw-r--r--tools/ffuzzer/ffuzzer.sh66
-rw-r--r--tools/ffuzzer/process.py31
2 files changed, 97 insertions, 0 deletions
diff --git a/tools/ffuzzer/ffuzzer.sh b/tools/ffuzzer/ffuzzer.sh
new file mode 100644
index 0000000..aab0705
--- /dev/null
+++ b/tools/ffuzzer/ffuzzer.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+MAX_FORMATS=20
+
+export PYTHONPATH=$(readlink -f "$PWD/../../plugins/pychrysa/.libs")
+
+if [ ! -e "$PYTHONPATH/pychrysalide.so" ]; then
+ echo '[!] PyChrysalide module not found, exiting...'
+ exit 1
+else
+ echo "[i] PyChrysalide module found in $PYTHONPATH."
+fi
+
+which melkor 2>&1 > /dev/null
+
+if [ "$?" -ne 0 ]; then
+ echo '[!] melkor not found, exiting...'
+ exit 1
+else
+ echo '[i] melkor found!'
+fi
+
+if [ -z "$FFUZZ_TEMPLATE" ]; then
+ echo '[!] $FFUZZ_TEMPLATE is not set, exiting...'
+ exit 1
+else
+ echo "[i] Using $FFUZZ_TEMPLATE as template."
+fi
+
+WORKING_DIR="orcs_$(basename $FFUZZ_TEMPLATE)"
+rm -rf $WORKING_DIR
+
+melkor -A -n $MAX_FORMATS -l 15 -q $FFUZZ_TEMPLATE
+
+ulimit -c unlimited
+
+cd $WORKING_DIR
+
+chmod a+x *
+chmod a-x Report_*
+
+core_count=0
+
+for f in `find . -type f -perm +111`; do
+
+ target=`basename $f`
+
+ echo "[*] Processing '$WORKING_DIR/$target'..."
+
+ python3-dbg ../process.py $target > /dev/null
+
+ if [ "$?" -eq 0 ]; then
+ echo ' --> disassembly done!'
+ fi
+
+ if [ -e core ]; then
+ echo ' --> renaming core...'
+ mv core $target.core
+ core_count=$((core_count + 1))
+ fi
+
+done
+
+echo '[i] Done.'
+
+echo "[i] Got $core_count core(s) for $MAX_FORMATS input files."
diff --git a/tools/ffuzzer/process.py b/tools/ffuzzer/process.py
new file mode 100644
index 0000000..c1bf2b7
--- /dev/null
+++ b/tools/ffuzzer/process.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python3-dbg
+# -*- coding: utf-8 -*-
+
+from gi.repository import Gtk
+from pychrysalide.analysis import LoadedBinary
+from pychrysalide.analysis.contents import FileContent
+
+import sys
+
+for arg in sys.argv[1:]:
+
+ fc = FileContent(arg)
+
+ print(' --> file content:', fc)
+
+ binary = LoadedBinary(fc)
+
+ print(' --> loaded binary:', binary)
+
+ if binary is not None:
+
+ def disassembly_is_done(obj, binary):
+ Gtk.main_quit()
+
+ binary.connect('disassembly-done', disassembly_is_done, binary)
+
+ binary.analyse()
+
+ # Attente de la réception du signal
+ # Cf. http://stackoverflow.com/questions/28873688/python-how-to-block-in-pygtk-while-waiting-for-timeout-add-callback
+ Gtk.main()