def common(self, file): p = os.path.dirname(os.path.realpath(__file__)) explorer = executor.Executor(p + '/binary/' + file) angr_project = explorer.project mem_memory, reg_memory = factory.get_range_fully_symbolic_memory( angr_project) return explorer.run(mem_memory=mem_memory, reg_memory=reg_memory, verbose=False)
import sys from executor import executor from memory import factory from memory import range_fully_symbolic_memory from utils import parse_args if __name__ == '__main__': t, file = parse_args(sys.argv) explorer = executor.Executor(file) angr_project = explorer.project if t == 0: mem_memory, reg_memory = factory.get_angr_symbolic_memory(angr_project) elif t == 1: mem_memory, reg_memory = factory.get_range_fully_symbolic_memory( angr_project) mem_memory.verbose = False explorer.run(mem_memory=mem_memory, reg_memory=reg_memory) if t == 1 and range_fully_symbolic_memory.profiling_enabled: range_fully_symbolic_memory.print_profiling_time_stats()
def main(mode, number_of_seeds, numbers_of_versions, output_dir, seed, testmode, transformation_type): logging.debug('Executing...') # Change the directory os.chdir(os.path.dirname(sys.argv[0])) # First we read and parse the config file. config_file = configparser.ConfigParser() config_file.read('config.ini') config_obj = config.Config(config_file) if transformation_type: config_obj.semantic_mod['type'] = transformation_type # Convert the nr_of_versions option or argument into a list of numbers numbers_of_versions = numbers_of_versions if numbers_of_versions else config_obj.default[ 'nr_of_versions'] numbers_of_versions = [x for x in numbers_of_versions.split(',')] # If multiple seeds were requested we start at the first seed and continue until we have # the number of requested seeds. Every run is saved to a separate directory. The starting # seed can be overriden when a specific other seed was requested. If no multiple seeds # were requested we run once and use no separate directories. seed = seed if seed else int(config_obj.semantic_mod['seed']) seeds = range(seed, seed + number_of_seeds) if number_of_seeds else [seed] output_dir_config = output_dir if output_dir else config_obj.default[ 'output_directory'] shutil.rmtree(output_dir_config, True) for seed in seeds: config_obj.semantic_mod['seed'] = str(seed) # For every item we will execute an executor flow. for number_of_versions in numbers_of_versions: # We set the number of versions config_obj.default['nr_of_versions'] = number_of_versions # Set and create the output directory output_dir = os.path.join( output_dir_config, str(seed) if len(seeds) > 1 else '', str(number_of_versions) if len(numbers_of_versions) > 1 else '') config_obj.default['output_directory'] = output_dir shutil.rmtree(output_dir, True) os.makedirs(output_dir) # We create an executor to start the semantic renewability flow. executor_flow = executor.Executor(config_obj) print('************************ Generating ' + str(number_of_versions) + ' version(s) for seed ' + str(seed) + ' **********************') try: result = True executor_flow.execute(mode, testmode) except KeyboardInterrupt: raise except: result = False traceback.print_exc() pass # Output result print('************************ Result for seed ' + str(seed) + ': ' + str(result) + ' ************************') print()
"""Explore a binary using angr or memsight symbolic execution engine.""" import sys import logging import utils from executor import executor from memory import factory if __name__ == '__main__': # logging.getLogger('angr').setLevel(logging.DEBUG) # logging.getLogger('simuvex').setLevel(logging.DEBUG) logging.getLogger('angr.analyses.veritesting').setLevel(logging.DEBUG) t, fname = utils.parse_args(sys.argv) explorer = executor.Executor(fname) angr_project = explorer.project if t == 0: mem_memory, reg_memory = factory.get_angr_symbolic_memory(angr_project) elif t == 1: mem_memory, reg_memory = factory.get_range_fully_symbolic_memory( angr_project) mem_memory.verbose = False explorer.explore(mem_memory=mem_memory, reg_memory=reg_memory)