diff --git a/.gitattributes b/.gitattributes index e1be89594c9a73ac4f5c10d49d524b4e85c1d86a..44299651b869558456c5bade015caa50bc4cab95 100644 --- a/.gitattributes +++ b/.gitattributes @@ -42,14 +42,15 @@ examples/memcpy.c -text examples/myhanoi.c -text examples/print_ptr.c -text examples/recover_example.c -text +tools/db/drop_my_tables.sh -text tools/db/pdb.create.tbl -text tools/db/pdb.createprogram.tbl -text tools/db/pdb.drop.tbl -text -tools/db/pdb_create_program_tables -text -tools/db/pdb_info -text -tools/db/pdb_register -text -tools/db/pdb_setup -text -tools/db/pdb_teardown -text +tools/db/pdb_create_program_tables.sh -text +tools/db/pdb_info.sh -text +tools/db/pdb_register.sh -text +tools/db/pdb_setup.sh -text +tools/db/pdb_teardown.sh -text tools/do_concolic.sh -text tools/generate_exe.sh -text tools/generate_io_baseline.sh -text diff --git a/examples/Makefile b/examples/Makefile index 410262d9507c49c88fab5920ef442f9b009c914c..9d8cd4afbe9689f81b46c1ca9408b9779ec234fa 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -63,6 +63,7 @@ clean: rm -Rf peasoup_executable_directory.* rm -f strata.log.* rm -f *.sym + if [ ! "X" = "X"${PGUSER} ]; then sh ../tools/db/drop_my_tables.sh; sh ../tools/db/pdb_setup.sh; fi concclean: rm -Rf concolic.files_* diff --git a/tools/db/drop_my_tables.sh b/tools/db/drop_my_tables.sh new file mode 100755 index 0000000000000000000000000000000000000000..abd8299f2fb3d64299ebf279cc301c6530508660 --- /dev/null +++ b/tools/db/drop_my_tables.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +psql << 'EOF' +CREATE LANGUAGE plpgsql; +CREATE OR REPLACE FUNCTION drop_tables(username IN VARCHAR) RETURNS void AS $$ +DECLARE + statements CURSOR FOR + SELECT tablename FROM pg_tables + WHERE tableowner = username; +BEGIN + FOR stmt IN statements LOOP + EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(stmt.tablename) || ' CASCADE;'; + END LOOP; +END; +$$ +LANGUAGE plpgsql; +EOF + +psql -c "SELECT drop_tables('$PGUSER');" diff --git a/tools/db/pdb.create.tbl b/tools/db/pdb.create.tbl index 2260f6d2331dc078b49ccc17521e0b56aaf963e7..c8d5863155f9b3c560b13e27da350c7b0c8b730a 100644 --- a/tools/db/pdb.create.tbl +++ b/tools/db/pdb.create.tbl @@ -1,21 +1,41 @@ -CREATE TABLE program_info +CREATE TABLE doip ( - program_id SERIAL PRIMARY KEY, - name text NOT NULL CHECK (name <> ''), - orig_program_id integer DEFAULT -1 + doip_id SERIAL PRIMARY KEY, + confidence integer, + tool_name text, + comment text +); + + +CREATE TABLE variant_info +( + schema_version_id integer DEFAULT 1, + variant_id SERIAL PRIMARY KEY, + name text NOT NULL CHECK (name <> ''), + orig_variant_id integer DEFAULT -1, + address_table_name text, + function_table_name text, + instruction_table_name text, + doip_id integer DEFAULT -1 + ); CREATE TABLE file_info ( file_id SERIAL PRIMARY KEY, - orig_file_id integer DEFAULT -1, url text NOT NULL CHECK (url <> ''), hash text, - arch text + arch text, + type text DEFAULT 'ELF-Static', + doip_id integer DEFAULT -1 + ); -CREATE TABLE program_dependency +CREATE TABLE variant_dependency ( - program_id integer REFERENCES program_info, - file_id integer REFERENCES file_info + variant_id integer REFERENCES variant_info, + file_id integer REFERENCES file_info, + doip_id integer DEFAULT -1 + ); + diff --git a/tools/db/pdb.createprogram.tbl b/tools/db/pdb.createprogram.tbl index 60ac1e4ffefe87adba60207c9fa6fc60d1b8cf5e..0ebc5af83741d6ab3ccbc6b4a7041c7a4734ea8e 100644 --- a/tools/db/pdb.createprogram.tbl +++ b/tools/db/pdb.createprogram.tbl @@ -1,25 +1,30 @@ CREATE TABLE #PROGNAME#_address ( - address_id SERIAL PRIMARY KEY, - file_id integer REFERENCES file_info, - vaddress_offset text + address_id SERIAL PRIMARY KEY, + file_id integer REFERENCES file_info, + vaddress_offset integer, + doip_id integer DEFAULT -1 ); CREATE TABLE #PROGNAME#_function ( - function_id SERIAL PRIMARY KEY, - file_id integer REFERENCES file_info, - name text, - stack_frame_size integer + function_id SERIAL PRIMARY KEY, + file_id integer REFERENCES file_info, + name text, + stack_frame_size integer, + doip_id integer DEFAULT -1 ); CREATE TABLE #PROGNAME#_instruction ( + instruction_id SERIAL PRIMARY KEY, address_id integer REFERENCES #PROGNAME#_address, - parent_function_id integer REFERENCES #PROGNAME#_function, + parent_function_id integer, file_id integer REFERENCES file_info, - orig_address_id integer REFERENCES #PROGNAME#_address, - fallthrough_address_id integer REFERENCES #PROGNAME#_address, - target_address_id integer REFERENCES #PROGNAME#_address, - data text + orig_address_id integer, + fallthrough_address_id integer, + target_address_id integer, + data bytea, + comment text, + doip_id integer DEFAULT -1 ); diff --git a/tools/db/pdb_create_program_tables b/tools/db/pdb_create_program_tables.sh similarity index 54% rename from tools/db/pdb_create_program_tables rename to tools/db/pdb_create_program_tables.sh index b4cc56b2f1ddfc8c4400adfd572a190c9f2e93e1..956efec29d0c68fc66c8df4adcc1d5c63e7ece8e 100755 --- a/tools/db/pdb_create_program_tables +++ b/tools/db/pdb_create_program_tables.sh @@ -1,3 +1,5 @@ +#!/bin/sh + # # pdb_create_program_tables <programName> # @@ -7,7 +9,9 @@ PROGRAM_NAME=$1 DB_SCRIPT=$$.script.tmp -cat pdb.createprogram.tbl | sed "s/#PROGNAME#/$PROGRAM_NAME/g" > $DB_SCRIPT +PROGRAM_NAME=`echo $PROGRAM_NAME | sed "s/[\.;+\\-\ ]/_/g"` + +cat $PEASOUP_HOME/tools/db/pdb.createprogram.tbl | sed "s/#PROGNAME#/$PROGRAM_NAME/g" > $DB_SCRIPT psql -f $DB_SCRIPT diff --git a/tools/db/pdb_info b/tools/db/pdb_info.sh similarity index 54% rename from tools/db/pdb_info rename to tools/db/pdb_info.sh index bad326780d9ff51a833c64e69be51bd7a669a4df..2762d2b5d1f47eb44a1dafc4f6d160fba4e32137 100755 --- a/tools/db/pdb_info +++ b/tools/db/pdb_info.sh @@ -1 +1,3 @@ +#!/bin/sh + psql -c "\d" diff --git a/tools/db/pdb_register b/tools/db/pdb_register.sh similarity index 77% rename from tools/db/pdb_register rename to tools/db/pdb_register.sh index df4704e9f12093ace64711324c37d0ebf9d32f65..23f25235b0db6e17530d0f1c58cf17a5592798eb 100755 --- a/tools/db/pdb_register +++ b/tools/db/pdb_register.sh @@ -1,3 +1,5 @@ +#!/bin/sh + # # pdb_register <peasoup_program_name> <peasoup_program_directory> # @@ -18,7 +20,7 @@ usage() log_error() { echo "pdb_register: ERROR: $1" - exit 1 + exit -1 } log_message() @@ -51,21 +53,21 @@ fi MD5HASH=`md5sum $FILENAME | cut -f1 -d' '` #============================================ -# Update program_info table +# Update variant_info table #============================================ # -q: quiet mode # -t: tuple only # -c: run command -PROGRAM_ID=`psql -q -t -c "INSERT INTO program_info (name) VALUES ('$PROGRAM_NAME') RETURNING program_id;" | sed "s/^[ \t]*//"` +PROGRAM_ID=`psql -q -t -c "INSERT INTO variant_info (schema_version_id,name,address_table_name,function_table_name,instruction_table_name) VALUES ('1', '$PROGRAM_NAME', '${PROGRAM_NAME}_ADDRESS', '${PROGRAM_NAME}_function', '${PROGRAM_NAME}_instruction') RETURNING variant_id;" | sed "s/^[ \t]*//"` if [ ! $? -eq 0 ]; then log_error "Failed to register program" fi # Update original program id -psql -q -t -c "UPDATE program_info SET orig_program_id = '$PROGRAM_ID' WHERE program_id = '$PROGRAM_ID';" +psql -q -t -c "UPDATE variant_info SET orig_variant_id = '$PROGRAM_ID' WHERE variant_id = '$PROGRAM_ID';" #============================================ # Update file_info table @@ -73,12 +75,11 @@ psql -q -t -c "UPDATE program_info SET orig_program_id = '$PROGRAM_ID' WHERE pro FILE_ID=`psql -q -t -c "INSERT INTO file_info (url, arch, hash) VALUES ('$URL', '$ARCH', '$MD5HASH') RETURNING file_id;" | sed "s/^[ \t]*//"` -# Update original file id -psql -q -t -c "UPDATE file_info SET orig_file_id = '$FILE_ID' WHERE file_id = '$FILE_ID';" - log_message "To do: if shared libs, then need to add them to this table" #============================================ # Update program_dependency table #============================================ -FILE_ID=`psql -q -t -c "INSERT INTO program_dependency (program_id, file_id) VALUES ('$PROGRAM_ID', '$FILE_ID')"` +FILE_ID=`psql -q -t -c "INSERT INTO variant_dependency (variant_id, file_id) VALUES ('$PROGRAM_ID', '$FILE_ID')"` + +exit $PROGRAM_ID diff --git a/tools/db/pdb_setup b/tools/db/pdb_setup deleted file mode 100755 index f0b03379d859df9968f512857a58a7be9fe986ae..0000000000000000000000000000000000000000 --- a/tools/db/pdb_setup +++ /dev/null @@ -1 +0,0 @@ -psql -f pdb.create.tbl diff --git a/tools/db/pdb_setup.sh b/tools/db/pdb_setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..7d489a04658a83b8ee3762e469f9931309ec6563 --- /dev/null +++ b/tools/db/pdb_setup.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql -f $PEASOUP_HOME/tools/db/pdb.create.tbl diff --git a/tools/db/pdb_teardown b/tools/db/pdb_teardown deleted file mode 100755 index 415274aa95c2b0d29be975546727e029f057e94e..0000000000000000000000000000000000000000 --- a/tools/db/pdb_teardown +++ /dev/null @@ -1 +0,0 @@ -psql -f pdb.drop.tbl diff --git a/tools/db/pdb_teardown.sh b/tools/db/pdb_teardown.sh new file mode 100755 index 0000000000000000000000000000000000000000..4c48331df85cce345f5003370c809da6eaadf4d0 --- /dev/null +++ b/tools/db/pdb_teardown.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +psql -f $PEASOUP_HOME/tools/db/pdb.drop.tbl diff --git a/tools/ps_analyze.sh b/tools/ps_analyze.sh index e5a738f7125068f0d6cfe7aab1d6577e3a3cca63..250ab5bafd652b21b3360c1fb434c5ef554e84e5 100755 --- a/tools/ps_analyze.sh +++ b/tools/ps_analyze.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh -x # This script depends on having the following environment variables defined # STRATA - The path to the strata installation # An example of these environment variables and their settings are listed in @@ -71,6 +71,49 @@ echo Running IDA Pro static analysis phase ... $SMPSA_HOME/SMP-analyze.sh a.ncexe echo Done. + +# +# Populate IR Database +# +if [ ! "X" = "X"$PGUSER ]; then + echo "Registering with IR database: program: $orig_exe server:$PGHOST db:$PGDATABASE" + + DB_PROGRAM_NAME=`echo $orig_exe.$$ | sed "s/[\.;+\\-\ ]/_/g"` + + MD5HASH=`md5sum a.ncexe | cut -f1 -d' '` + $PEASOUP_HOME/tools/db/pdb_register.sh $DB_PROGRAM_NAME $current_dir # register the program. + varid=$? + + $PEASOUP_HOME/tools/db/pdb_create_program_tables.sh $DB_PROGRAM_NAME # create the tables for the program. + + echo "RUNNING MEDS2PDB:" + date + time $SECURITY_TRANSFORMS_HOME/tools/meds2pdb/meds2pdb $DB_PROGRAM_NAME a.ncexe $MD5HASH a.ncexe.annot # import meds information + date + + if [ $varid > 0 ]; then + $SECURITY_TRANSFORMS_HOME/libIRDB/test/clone.exe $varid # create a clone + cloneid=$? + + if [ $cloneid > 0 ]; then + $SECURITY_TRANSFORMS_HOME/libIRDB/test/fill_in_cfg.exe $cloneid # finish the initial IR + $SECURITY_TRANSFORMS_HOME/libIRDB/test/fix_calls.exe $cloneid # fix call insns so they are OK for spri emitting + $SECURITY_TRANSFORMS_HOME/libIRDB/test/ilr.exe $cloneid # perform ILR + $SECURITY_TRANSFORMS_HOME/libIRDB/test/generate_spri.exe $cloneid a.ncexe.aspri # generate the spri code + fi + fi + echo ------------------------------------------------------------------------------- + echo --------- Orig Variant ID is $varid ------------------------ + echo ------------------------------------------------------------------------------- + echo --------- Cloned Variant ID is $cloneid ------------------------ + echo ------------------------------------------------------------------------------- + +fi + + +# +# Run concolic engine +# echo Running concolic testing to generate inputs ... #$PEASOUP_HOME/tools/do_concolic.sh a --iterations 25 --logging tracer,instance_times,trace $PEASOUP_HOME/tools/do_concolic.sh a --iterations 25 --logging tracer,trace,inputs @@ -86,7 +129,6 @@ echo Done. #----------------------------------------- # Start P1 transform #----------------------------------------- -# #echo Starting the P1 transform #date #$PEASOUP_HOME/tools/p1xform.sh $newdir > p1xform.out 2> p1xform.err