class Run(Binja): def __init__(self, files, apk): Binja.__init__(self) self.t = Terminal() self.logger = Logger() self.files = files self.apk = apk self.libs = list() self.rpc = None self.target_library = None self._init_binja() def _cmd_completer(self, name, text, line, begidx, endidx): fn = getattr(self, 'do_'+name) if not hasattr(fn.im_func, "_expected_args"): return [] a = [arg for arg in fn.im_func._expected_args if arg.startswith(text)] return a def _init_binja(self): """ Initialize the Binja module """ # Locals endpoint = "http://*****:*****@cmd_arguments(["list", "select"]) def do_libraries(self, *args): """ := libraries select """ # Locals arg0 = args[0] selection = None index = None try: if self.libs: if arg0 == "list": print("\n") for i, lib in enumerate(self.libs): print("\t--> [{}] {} ".format(i, lib[1].split("/")[-1])) print("\n") if arg0 == "select": print("\n") for i, lib in enumerate(self.libs): print("\t--> [{}] {} ".format(i, lib[1].split("/")[-1])) print("\n") selection = raw_input("[{}] Select library : ".format(datetime.now())) try: index = int(selection) except ValueError: index = -1 if selection: for i, lib in enumerate(self.libs): if selection in lib[1] or i == index: self.target_library = lib self.logger.binja_log("info", "Selected {} (!)".format(self.target_library[1].split("/")[-1])) break except Exception as e: BinjaError("library : {}".format(e)) def complete_symbols(self, *args): return self._cmd_completer("symbols", *args) def do_symbols(self, *args): """ := symbols """ # Locals elf = None try: if self.target_library: # Create a new ELFFile() instance elf = ELFFile(self.target_library[0]) for section in elf.iter_sections(): # Once we find the symbol table, print each symbol if isinstance(section, SymbolTableSection): self.logger.binja_log("info", "Found symbol table (!)") for i, symbol in enumerate(section.iter_symbols()): self.logger.binja_log("info", symbol.name) else: self.logger.binja_log("info", "Target library not selected (!)") except Exception as e: BinjaError("function : {}".format(e))