Beispiel #1
0
 def optionChanged(self, option, old, new):
     if option in ['all', 'badbytes']:
         for binary in self.__binaries:
             if binary.loaded:
                 if self.__options.badbytes:
                     self.__gadgets[binary] = ropper.filterBadBytes(binary.gadgets, self.__options.badbytes)
                 else:
                     self.__gadgets[binary] = binary.gadgets
                 if not self.__options.all:
                     self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary])
Beispiel #2
0
 def optionChanged(self, option, old, new):
     if option in ['all', 'badbytes']:
         for binary in self.__binaries:
             if binary.loaded:
                 if self.__options.badbytes:
                     self.__gadgets[binary] = ropper.filterBadBytes(binary.gadgets, self.__options.badbytes)
                 else:
                     self.__gadgets[binary] = binary.gadgets
                 if not self.__options.all:
                     self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary])
Beispiel #3
0
    def __searchGadgets(self, binary):
        r = Ropper(self.__cprinter)
        gadgets = r.searchGadgets(binary, depth=self.__options.depth, gtype=GadgetType[self.__options.type.upper()])
        binary.loaded = True
        binary.gadgets = gadgets
        self.__gadgets[binary] = ropper.filterBadBytes(gadgets, self.__options.badbytes)
        if not self.__options.all:
            self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary])

        return self.__gadgets[binary]
Beispiel #4
0
    def __searchGadgets(self, binary):
        r = Ropper(self.__cprinter)
        gadgets = r.searchGadgets(binary, instructionCount=self.__options.inst_count, gtype=GadgetType[self.__options.type.upper()])
        binary.loaded = True
        binary.gadgets = gadgets
        self.__gadgets[binary] = ropper.filterBadBytes(gadgets, self.__options.badbytes)
        if not self.__options.all:
            self.__cprinter.printInfo('deleting double gadgets...')
            self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary], self.__printProgress)

        return self.__gadgets[binary]
Beispiel #5
0
    def __searchGadgets(self, binary):
        r = Ropper(self.__searchGadgetCallback)
        gadgets = r.searchGadgets(binary, instructionCount=self.__options.inst_count, gtype=GadgetType[self.__options.type.upper()])
        binary.loaded = True
        binary.gadgets = gadgets
        self.__gadgets[binary] = ropper.filterBadBytes(gadgets, self.__options.badbytes)
        if not self.__options.all:
            self.__cprinter.printInfo('deleting double gadgets...')
            self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary], self.__printProgress)

        return self.__gadgets[binary]
Beispiel #6
0
    def __loaddb(self, dbpath):
        if not dbpath.endswith('.db'):
            dbpath = dbpath+'.db'
        if not os.path.exists(dbpath):
            raise RopperError('db does not exist: '+dbpath)

        dao = GadgetDAO(dbpath, self.__cprinter)

        self.binary.gadgets = dao.load(self.binary)
        self.binary.loaded = True

        self.__gadgets[self.binary] = ropper.deleteDuplicates(ropper.filterBadBytes(self.binary.gadgets, self.__options.badbytes))
Beispiel #7
0
    def __loaddb(self, dbpath):
        if not dbpath.endswith('.db'):
            dbpath = dbpath + '.db'
        if not os.path.exists(dbpath):
            raise RopperError('db does not exist: ' + dbpath)

        dao = GadgetDAO(dbpath, self.__cprinter)

        self.binary.gadgets = dao.load(self.binary)
        self.binary.loaded = True

        self.__gadgets[self.binary] = ropper.deleteDuplicates(
            ropper.filterBadBytes(self.binary.gadgets))
Beispiel #8
0
    def __loaddb(self, dbpath):
        if not dbpath.endswith('.db'):
            dbpath = dbpath+'.db'
        if not os.path.exists(dbpath):
            raise RopperError('db does not exist: '+dbpath)

        dao = GadgetDAO(dbpath, self.__cprinter)

        self.binary.gadgets = dao.load(self.binary)
        self.binary.loaded = True
        if not self.__options.all:
            self.__gadgets[self.binary] = ropper.deleteDuplicates(ropper.filterBadBytes(self.binary.gadgets, self.__options.badbytes), self.__printProgress)
        else:
            self.__gadgets[self.binary] = self.binary.gadgets
Beispiel #9
0
    def __searchGadgets(self, binary):
        r = Ropper(self.__cprinter)
        gadgets = r.searchGadgets(
            binary,
            depth=self.__options.depth,
            gtype=GadgetType[self.__options.type.upper()])
        binary.loaded = True
        binary.gadgets = gadgets
        self.__gadgets[binary] = ropper.filterBadBytes(gadgets,
                                                       self.__options.badbytes)
        if not self.__options.all:
            self.__gadgets[binary] = ropper.deleteDuplicates(
                self.__gadgets[binary])

        return self.__gadgets[binary]
Beispiel #10
0
    def __searchGadgets(self, binary):
        r = Ropper(self.__searchGadgetCallback)
        gadgets = r.searchGadgets(binary, instructionCount=self.__options.inst_count, gtype=GadgetType[self.__options.type.upper()])
        binary.loaded = True

        if self.__options.cfg_only:
            if isinstance(binary, PE):
                optHeader = binary._binary.imageNtHeaders.header.OptionalHeader
                characteristics = optHeader.DllCharacteristics
                cfgFlag = ImageDllCharacteristics.CONTROL_FLOW_GUARD
                if characteristics & cfgFlag == cfgFlag:
                    # do some filtering here
                    self.__cprinter.printInfo('deleting CFG invalid gadgets...')
                    gadgets = ropper.cfgFilterGadgets(gadgets, callback=self.__printCfgFilterProgress)

        binary.gadgets = gadgets
        self.__gadgets[binary] = ropper.filterBadBytes(gadgets, self.__options.badbytes)
        if not self.__options.all:
            self.__cprinter.printInfo('deleting double gadgets...')
            self.__gadgets[binary] = ropper.deleteDuplicates(self.__gadgets[binary], self.__printProgress)

        return self.__gadgets[binary]