Example #1
0
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))