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
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)
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
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
def test_normalize_items_empty_list(): assert normalize_lief_items([]) == []
def test_normalize_items_from_strings(): functions = ['printf', '__libc_start_main'] assert normalize_lief_items(functions) == functions