Esempio n. 1
0
    def _analyze_elf(self, file_object):
        elf_dict = {}
        try:
            parsed_binary = lief.parse(file_object.file_path)
            binary_json_dict = json.loads(
                lief.to_json_from_abstract(parsed_binary))
            if parsed_binary.exported_functions:
                binary_json_dict['exported_functions'] = normalize_lief_items(
                    parsed_binary.exported_functions)
            if parsed_binary.imported_functions:
                binary_json_dict['imported_functions'] = normalize_lief_items(
                    parsed_binary.imported_functions)
            if parsed_binary.libraries:
                binary_json_dict['libraries'] = normalize_lief_items(
                    parsed_binary.libraries)
            modinfo_data = self.filter_modinfo(parsed_binary)
            if modinfo_data:
                elf_dict['modinfo'] = modinfo_data

        except (AttributeError, TypeError, lief.bad_file):
            logging.error(f'Bad file for lief/elf analysis {file_object.uid}.',
                          exc_info=True)
            return elf_dict

        self.get_final_analysis_dict(binary_json_dict, elf_dict)
        self._convert_address_values_to_hex(elf_dict)

        return elf_dict, parsed_binary
Esempio n. 2
0
 def create_tags(self, parsed_bin, file_object):
     all_libs = self._get_symbols_version_entries(
         normalize_lief_items(parsed_bin.symbols_version))
     all_libs.extend(normalize_lief_items(parsed_bin.libraries))
     all_funcs = self._get_relevant_imp_functions(
         normalize_lief_items(parsed_bin.imported_functions))
     for entry in self._get_tags(all_libs, all_funcs):
         self.add_analysis_tag(file_object=file_object,
                               tag_name=entry,
                               value=entry,
                               color=self._get_color_codes(entry),
                               propagate=False)
Esempio n. 3
0
    def _analyze_elf(self, file_object):
        elf_dict = {}
        try:
            parsed_binary = lief.parse(file_object.file_path)
            binary_json_dict = json.loads(lief.to_json_from_abstract(parsed_binary))
            if parsed_binary.exported_functions:
                binary_json_dict['exported_functions'] = normalize_lief_items(parsed_binary.exported_functions)
            if parsed_binary.imported_functions:
                binary_json_dict['imported_functions'] = normalize_lief_items(parsed_binary.imported_functions)
            if parsed_binary.libraries:
                binary_json_dict['libraries'] = normalize_lief_items(parsed_binary.libraries)
        except (TypeError, lief.bad_file) as error:
            logging.error('Bad file for lief/elf analysis {}. {}'.format(file_object.get_uid(), error))
            return elf_dict

        self.get_final_analysis_dict(binary_json_dict, elf_dict)
        return elf_dict, parsed_binary
Esempio n. 4
0
def test_normalize_items_from_objects():
    class Function:
        def __init__(self, name):
            self.name = name

        def __str__(self):
            return self.name

    functions = ['printf', '__libc_start_main']
    assert normalize_lief_items([Function(name) for name in functions]) == functions
Esempio n. 5
0
def test_normalize_items_empty_list():
    assert normalize_lief_items([]) == []
Esempio n. 6
0
def test_normalize_items_from_strings():
    functions = ['printf', '__libc_start_main']
    assert normalize_lief_items(functions) == functions