def disassembleFile(file_path, base_addr, map_file=False): print("now analyzing {}".format(file_path)) loader = FileLoader(file_path, map_file=map_file) file_content = loader.getData() disasm = Disassembler(config) start = time.clock() try: disassembly = disasm.disassemble(file_content, base_addr, timeout=config.TIMEOUT) report = disasm.getDisassemblyReport(disassembly) report["filename"] = os.path.basename(file_path) print(disassembly) except Exception as exc: print("-> an error occured (", str(exc), ").") report = {"status":"error", "meta": {"traceback": traceback.format_exc(exc)}, "execution_time": time.clock() - start} return report
def open(file): fl = FileLoader(file, True) dis = Disassembler(Config) smda._set_eng(fl,dis) return smda
def disassembleFile(self, file_path, pdb_path=""): loader = FileLoader(file_path, map_file=True) base_addr = loader.getBaseAddress() file_content = loader.getData() start = time.clock() try: self.disassembler.setFilePath(file_path) self.disassembler.addPdbFile(pdb_path, base_addr) disassembly = self.disassemble(file_content, base_addr, timeout=self.config.TIMEOUT) report = self.getDisassemblyReport(disassembly) report["filename"] = os.path.basename(file_path) print(disassembly) except Exception as exc: print("-> an error occured (", str(exc), ").") report = { "status": "error", "meta": { "traceback": traceback.format_exc(exc) }, "execution_time": time.clock() - start } return report
def setUpClass(cls): super(SmdaIntegrationTestSuite, cls).setUpClass() disasm = Disassembler(config) # load encrypted Asprox with open( os.path.join(config.PROJECT_ROOT, "tests", "asprox_0x008D0000_xored"), "rb") as f_binary: binary = f_binary.read() decrypted_asprox = bytearray() for index, byte in enumerate(binary): if isinstance(byte, str): byte = ord(byte) decrypted_asprox.append(byte ^ (index % 256)) cls.asprox_binary = decrypted_asprox cls.asprox_disassembly = disasm.disassembleBuffer( bytes(decrypted_asprox), 0x8D0000) # load encrypted Cutwail with open(os.path.join(config.PROJECT_ROOT, "tests", "cutwail_xored"), "rb") as f_binary: binary = f_binary.read() decrypted_cutwail = bytearray() for index, byte in enumerate(binary): if isinstance(byte, str): byte = ord(byte) decrypted_cutwail.append(byte ^ (index % 256)) cls.cutwail_binary = decrypted_cutwail # run FileLoader and disassemble as file loader = FileLoader("/", map_file=True) loader._loadFile(decrypted_cutwail) file_content = loader.getData() binary_info = BinaryInfo(file_content) binary_info.raw_data = loader.getRawData() binary_info.file_path = "" binary_info.base_addr = loader.getBaseAddress() binary_info.bitness = loader.getBitness() binary_info.code_areas = loader.getCodeAreas() cls.cutwail_disassembly = disasm._disassemble(binary_info) cls.cutwail_unmapped_disassembly = disasm.disassembleUnmappedBuffer( decrypted_cutwail)
def disassembleFile(self, file_path, pdb_path=""): loader = FileLoader(file_path, map_file=True) file_content = loader.getData() binary_info = BinaryInfo(file_content) binary_info.raw_data = loader.getRawData() binary_info.file_path = file_path binary_info.base_addr = loader.getBaseAddress() binary_info.bitness = loader.getBitness() binary_info.code_areas = loader.getCodeAreas() start = datetime.datetime.utcnow() try: self.disassembler.addPdbFile(binary_info, pdb_path) smda_report = self._disassemble(binary_info, timeout=self.config.TIMEOUT) if self.config.STORE_BUFFER: smda_report.buffer = file_content except Exception as exc: LOGGER.error("An error occurred while disassembling file.") # print("-> an error occured (", str(exc), ").") smda_report = self._createErrorReport(start, exc) return smda_report