Beispiel #1
0
 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)
Beispiel #2
0
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()
Beispiel #3
0
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()
Beispiel #4
0
"""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)