示例#1
0
    def test_jmpreg(self):
        ropper = Ropper()
        regs=['rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 4)
        self.assertEqual(gadget.lines[0][0], 0x19bb)

        regs=['rcx','rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 7)

        self.assertEqual(gadget.imageBase, 0x100000000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x100000000)

        with self.assertRaises(RopperError):
            regs=['invalid']
            ropper.searchJmpReg(self.file, regs)
示例#2
0
    def test_badbytes(self):
        r = Ropper()

        badbytes = "adfd"
        gadgets = r.searchGadgets(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0x1ADFD)

        badbytes = "52f8"
        gadgets = r.searchPopPopRet(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        self.assertNotEqual(gadgets[0].lines[0][0], 0x52F8)

        badbytes = "b1c7"
        gadgets = r.searchJmpReg(self.file, ["rsp"])
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0xB1C7)

        with self.assertRaises(RopperError):
            badbytes = "b1c"
            gadgets = ropper.filterBadBytes(gadgets, badbytes)

        with self.assertRaises(RopperError):
            badbytes = "qwer"
            gadgets = ropper.filterBadBytes(gadgets, badbytes)
示例#3
0
    def test_badbytes(self):
        r = Ropper()

        badbytes = 'adfd'
        gadgets = r.searchGadgets(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0x1adfd)

        badbytes = '52f8'
        gadgets = r.searchPopPopRet(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        self.assertNotEqual(gadgets[0].lines[0][0], 0x52f8)

        badbytes = 'b1c7'
        gadgets = r.searchJmpReg(self.file, ['rsp'])
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0xb1c7)

        with self.assertRaises(RopperError):
            badbytes = 'b1c'
            gadgets = ropper.filterBadBytes(gadgets, badbytes)

        with self.assertRaises(RopperError):
            badbytes = 'qwer'
            gadgets = ropper.filterBadBytes(gadgets, badbytes)
示例#4
0
    def test_badbytes(self):
        r = Ropper()

        badbytes = 'adfd'
        gadgets = r.searchGadgets(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0x1adfd)

        badbytes = '52f8'
        gadgets = r.searchPopPopRet(self.file)
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        self.assertNotEqual(gadgets[0].lines[0][0], 0x52f8)

        badbytes = 'b1c7'
        gadgets = r.searchJmpReg(self.file, ['rsp'])
        gadgets = ropper.filterBadBytes(gadgets, badbytes)
        gadget = gadgets[0]
        self.assertNotEqual(gadget.lines[0][0], 0xb1c7)

        with self.assertRaises(RopperError):
            badbytes = 'b1c'
            gadgets = ropper.filterBadBytes(gadgets, badbytes)

        with self.assertRaises(RopperError):
            badbytes = 'qwer'
            gadgets = ropper.filterBadBytes(gadgets, badbytes)
示例#5
0
 def test_ppr(self):
     ropper = Ropper()
     
     gadgets = ropper.searchPopPopRet(self.file)
     
     self.assertEqual(len(gadgets), 109)
     self.assertEqual(gadgets[0].lines[0][0], 0x444a)
示例#6
0
文件: console.py 项目: dhn/Ropper
    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]
示例#7
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for section in self._binaries[0].executableSections:
            vaddr = section.virtualAddress
            gadgets.extend(r.searchOpcode(self._binaries[0],opcode=opcode,disass=True))

        if len(gadgets) > 0:
            return gadgets[0]
        else:
            raise RopChainError('Cannot create gadget for opcode: %s' % opcode)
示例#8
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]
示例#9
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for section in self._binaries[0].executableSections:
            vaddr = section.virtualAddress
            gadgets.extend(r.searchOpcode(self._binaries[0],opcode=opcode,disass=True))

        if len(gadgets) > 0:
            return gadgets[0]
        else:
            raise RopChainError('Cannot create gadget for opcode: %x' % opcode)
示例#10
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]
示例#11
0
文件: service.py 项目: sashs/Ropper
 def __init__(self, options={}, callbacks=None):
     super(RopperService, self).__init__()
     self.__options = Options(options, self.__optionChanged)
     if callbacks and hasattr(callbacks, '__gadgetSearchProgress__'):
         self.__ropper = Ropper(callback=callbacks.__gadgetSearchProgress__)
     else:
         self.__ropper = Ropper()
     self.__files = []
     self.__callbacks = callbacks
     if self.__options.color:
         cstr.COLOR = self.__options.color
     Gadget.DETAILED = self.__options.detailed
示例#12
0
 def __init__(self, options={}, callbacks=None):
     super(RopperService, self).__init__()
     self.__options = Options(options, self.__optionChanged)
     if callbacks and hasattr(callbacks, '__gadgetSearchProgress__'):
         self.__ropper = Ropper(callback=callbacks.__gadgetSearchProgress__)
     else:
         self.__ropper = Ropper()
     self.__files = []
     self.__callbacks = callbacks
     if self.__options.color:
         cstr.COLOR = self.__options.color
     Gadget.DETAILED = self.__options.detailed
示例#13
0
    def test_gadgets_pe(self):
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 4800)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase, gadget.address)
        self.assertEqual(gadget.imageBase, 0x4ad00000)
        self.file.imageBase = 0x0
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        self.assertEqual(gadget.imageBase, 0x4ad00000)
示例#14
0
 def test_jmpreg(self):
     ropper = Ropper()
     regs=['esp']
     gadgets = ropper.searchJmpReg(self.file, regs)
     gadget = gadgets[0]
     self.assertEqual(len(gadgets), 10)
     self.assertEqual(gadget.lines[0][0], 0xc63)
     self.assertEqual(gadget.imageBase, 0x8048000)
     self.file.imageBase = 0x0
     self.assertEqual(gadget.imageBase, 0x0)
     self.file.imageBase = None
     self.assertEqual(gadget.imageBase, 0x8048000)
示例#15
0
    def __asm(self, code, arch, format):
        r = Ropper()
        if format == 'R':
            f = FORMAT.RAW
        elif format == 'H':
            f = FORMAT.HEX
        elif format == 'S':
            f = FORMAT.STRING
        else:
            raise RopperError('wrong format: %s' % f)

        self.__cprinter.println(r.assemble(code, arch, f))
示例#16
0
    def test_search(self):
        r = Ropper()

        gadgets = r.searchGadgets(self.file)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [rax]')
        self.assertGreater(len(found_gadgets), 5)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x]')
        self.assertGreater(len(found_gadgets), 25)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x%]')
        self.assertGreater(len(found_gadgets), 70)
示例#17
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(r.searchJmpReg(binary, reg))

        if len(gadgets) > 0:
            self._updateUsedBinaries(gadget[0])
            return self._printRopInstruction(gadgets[0])
        else:
            return None
示例#18
0
    def test_search(self):
        r = Ropper()

        gadgets = r.searchGadgets(self.file)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [rax]')
        self.assertEqual(len(found_gadgets), 8)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x]')
        self.assertEqual(len(found_gadgets), 31)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x%]')
        self.assertEqual(len(found_gadgets), 83)
示例#19
0
    def test_search(self):
        r = Ropper()

        gadgets = r.searchGadgets(self.file)

        found_gadgets = self.file.arch.searcher.search(gadgets, "mov [rax]")
        self.assertEqual(len(found_gadgets), 1)

        found_gadgets = self.file.arch.searcher.search(gadgets, "mov [r?x]")
        self.assertEqual(len(found_gadgets), 5)

        found_gadgets = self.file.arch.searcher.search(gadgets, "mov [r?x%]")
        self.assertEqual(len(found_gadgets), 7)
示例#20
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(r.searchOpcode(binary,opcode=opcode,disass=True))

        if len(gadgets) > 0:
            self._usedBinaries.append((gadgets[0].fileName, gadgets[0]._section))
            return gadgets[0]
        else:
            raise RopChainError('Cannot create gadget for opcode: %s' % opcode)
示例#21
0
    def test_search(self):
        r = Ropper()

        gadgets = r.searchGadgets(self.file)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [rax]')
        self.assertEqual(len(found_gadgets), 8)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x]')
        self.assertEqual(len(found_gadgets), 31)

        found_gadgets = self.file.arch.searcher.search(gadgets, 'mov [r?x%]')
        self.assertEqual(len(found_gadgets), 83)
示例#22
0
    def test_gadgets_pe(self):
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 1300)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase, gadget.address)
        self.assertEqual(gadget.imageBase, 0x00008000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES['test-binaries/ls-arm'] = self.file.imageBase
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase
        self.assertEqual(gadget.imageBase, 0x00008000)
示例#23
0
    def _createJmp(self, reg=['rsp']):
        r = Ropper()
        gadgets = []
        for section in self._binaries[0].executableSections:
            vaddr = section.virtualAddress
            gadgets.extend(r.searchJmpReg(self._binaries[0],reg))



        if len(gadgets) > 0:
            if (gadgets[0]._binary, gadgets[0]._section) not in self._usedBinaries:
                self._usedBinaries.append((gadgets[0]._binary, gadgets[0]._section))
            return self._printRopInstruction(gadgets[0])
        else:
            return None
示例#24
0
    def test_gadgets_pe(self):
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 1300)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase,
                         gadget.address)
        self.assertEqual(gadget.imageBase, 0x00008000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase
        self.assertEqual(gadget.imageBase, 0x00008000)
示例#25
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(
                    r.searchOpcode(binary, opcode=opcode, disass=True))

        if len(gadgets) > 0:
            self._usedBinaries.append(
                (gadgets[0].fileName, gadgets[0]._section))
            return gadgets[0]
        else:
            raise RopChainError('Cannot create gadget for opcode: %s' % opcode)
示例#26
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]
示例#27
0
    def test_gadgets_pe(self):
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 1900)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase, gadget.address)
        self.assertEqual(gadget.imageBase, 0x00400000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase
        self.assertEqual(gadget.imageBase, 0x00400000)
示例#28
0
    def _createJmp(self, reg=['rsp']):
        r = Ropper()
        gadgets = []
        for section in self._binaries[0].executableSections:
            vaddr = section.virtualAddress
            gadgets.extend(r.searchJmpReg(self._binaries[0], reg))

        if len(gadgets) > 0:
            if (gadgets[0].fileName,
                    gadgets[0].section) not in self._usedBinaries:
                self._usedBinaries.append(
                    (gadgets[0].fileName, gadgets[0].section))
            return self._printRopInstruction(gadgets[0])
        else:
            return None
示例#29
0
    def test_jmpreg(self):
        ropper = Ropper()
        regs = ['rsp']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 3)
        self.assertEqual(gadget.lines[0][0], 0x37dd)

        regs = ['rsp', 'rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 15)
        self.assertEqual(gadget.imageBase, 0x4ad00000)
        self.file.imageBase = 0x0
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        self.assertEqual(gadget.imageBase, 0x4ad00000)
示例#30
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.offset
                gadgets.extend(
                    r.searchJmpReg(binary,reg))



        if len(gadgets) > 0:
            self._updateUsedBinaries(gadgets[0])
            return gadgets[0]
        else:
            return None
示例#31
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for section in self._binaries[0].executableSections:
            vaddr = section.offset
            gadgets.extend(
                r.searchJmpReg(self._binaries[0],reg))



        if len(gadgets) > 0:
            if (gadgets[0]._binary, gadgets[0]._section) not in self._usedBinaries:
                self._usedBinaries.append((gadgets[0]._binary, gadgets[0]._section))
            return gadgets[0]
        else:
            return ''
示例#32
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.offset
                gadgets.extend(
                    r.searchJmpReg(binary,reg))



        if len(gadgets) > 0:
            self._updateUsedBinaries(gadget[0])
            return gadgets[0]
        else:
            return None
示例#33
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.offset
                gadgets.extend(r.searchJmpReg(self._binaries[0], reg))

        if len(gadgets) > 0:
            if (gadgets[0]._binary,
                    gadgets[0]._section) not in self._usedBinaries:
                self._usedBinaries.append(
                    (gadgets[0]._binary, gadgets[0]._section))
            return gadgets[0]
        else:
            return None
示例#34
0
    def _createJmp(self, reg=['esp']):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(
                    r.searchJmpReg(binary,reg))



        if len(gadgets) > 0:
            self._updateUsedBinaries(gadgets[0])
            return self._printRopInstruction(gadgets[0])
        else:
            return None
示例#35
0
文件: test_x86_64.py 项目: dhn/Ropper
    def test_jmpreg(self):
        ropper = Ropper()
        regs = ["rsp"]
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 3)
        self.assertEqual(gadget.lines[0][0], 0x37DD)

        regs = ["rsp", "rax"]
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 15)
        self.assertEqual(gadget.imageBase, 0x4AD00000)
        self.file.imageBase = 0x0
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        self.assertEqual(gadget.imageBase, 0x4AD00000)
示例#36
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(r.searchOpcode(binary,opcode=opcode,disass=True))

        if len(gadgets) > 0:
            for gadget in gadgets:
                if not gadget:
                    continue
                if not self.containsBadbytes(gadget.IMAGE_BASES.get(gadget.fileName,0) + gadget.lines[0][0]):
                    self._updateUsedBinaries(gadget)
                    return gadget
        else:
            raise RopChainError('Cannot create gadget for opcode: %s' % opcode)
示例#37
0
    def test_jmpreg_pe(self):
        ropper = Ropper()
        regs=['esp']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 1)
        self.assertEqual(gadget.lines[0][0], 0xc797)

        regs=['esp','eax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 13)

        self.assertEqual(gadget.imageBase, 0x4ad00000)
        self.file.imageBase = 0x0
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        self.assertEqual(gadget.imageBase, 0x4ad00000)
示例#38
0
    def _searchOpcode(self, opcode):
        r = Ropper()
        gadgets = []
        for binary in self._binaries:
            for section in binary.executableSections:
                vaddr = section.virtualAddress
                gadgets.extend(r.searchOpcode(binary,opcode=opcode,disass=True))

        if len(gadgets) > 0:
            for gadget in gadgets:
                if not gadget:
                    continue
                if not self.containsBadbytes(gadget.IMAGE_BASES.get(gadget.fileName,0) + gadget.lines[0][0]):
                    self._updateUsedBinaries(gadget)
                    return gadget
        else:
            raise RopChainError('Cannot create gadget for opcode: %s' % opcode)
示例#39
0
    def test_gadgets(self):
        self.assertEqual(self.file.arch, PPC)
        self.assertEqual(self.file.type, Type.ELF)
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 1400)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase, gadget.address)
        self.assertEqual(gadget.imageBase, 0x10000000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x10000000)
示例#40
0
文件: test_ppc.py 项目: sashs/Ropper
    def test_gadgets(self):
        self.assertEqual(self.file.arch, PPC)
        self.assertEqual(self.file.type, Type.ELF)
        ropper = Ropper()
        gadgets = ropper.searchGadgets(self.file)

        gadget = gadgets[0]
        self.assertGreater(len(gadgets), 1400)
        self.assertEqual(gadget.lines[0][0] + self.file.imageBase, gadget.address)
        self.assertEqual(gadget.imageBase, 0x10000000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x10000000)
示例#41
0
    def disassAddress(self, name, address, length):
        fc = self.getFileFor(name)
        if not fc:
            raise RopperError('No such file opened: %s' % name)
        eSections = fc.loader.executableSections

        for section in  eSections:
            if section.virtualAddress <= address and section.virtualAddress + section.size > address:
                ropper = Ropper()


                g = ropper.disassembleAddress(section, fc.loader, address, address - (fc.loader.imageBase+section.offset), length)
                if not g:
                    raise RopperError('Cannot disassemble address: %s' % toHex(address))
                    
                if length < 0:
                    length = length * -1
                return g.disassemblyString()
        return ''
示例#42
0
    def test_database(self):
        r = Ropper()

        db = "./testdb.db"
        if os.path.exists(db):
            os.remove(db)

        dao = GadgetDAO(db)

        gadgets = r.searchGadgets(self.file)

        dao.save(gadgets)
        self.assertTrue(os.path.exists(db))

        loaded_gadgets = dao.load(self.file)
        self.assertEqual(len(gadgets), len(loaded_gadgets))
        self.assertEqual(gadgets[0].lines[0][0], loaded_gadgets[0].lines[0][0])

        os.remove(db)
示例#43
0
文件: service.py 项目: sashs/Ropper
    def disassAddress(self, name, address, length):
        fc = self.getFileFor(name)
        if not fc:
            raise RopperError('No such file opened: %s' % name)
        eSections = fc.loader.executableSections

        for section in  eSections:
            if section.virtualAddress <= address and section.virtualAddress + section.size > address:
                ropper = Ropper()


                g = ropper.disassembleAddress(section, fc.loader, address, address - (fc.loader.imageBase+section.offset), length)
                if not g:
                    raise RopperError('Cannot disassemble address: %s' % toHex(address))

                if length < 0:
                    length = length * -1
                return g.disassemblyString()
        return ''
示例#44
0
    def test_database(self):
        r = Ropper()

        db = './testdb.db'
        if os.path.exists(db):
            os.remove(db)

        dao = GadgetDAO(db)

        gadgets = r.searchGadgets(self.file)

        dao.save(gadgets)
        self.assertTrue(os.path.exists(db))

        loaded_gadgets = dao.load(self.file)
        self.assertEqual(len(gadgets), len(loaded_gadgets))
        self.assertEqual(gadgets[0].lines[0][0], loaded_gadgets[0].lines[0][0])

        os.remove(db)
示例#45
0
    def test_jmpreg(self):
        ropper = Ropper()
        regs=['rsp']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 3)
        self.assertEqual(gadget.lines[0][0], 0x37dd)

        regs=['rsp','rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 15)
        self.assertEqual(gadget.imageBase, 0x4ad00000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x4ad00000)
示例#46
0
    def test_jmpreg_pe(self):
        ropper = Ropper()
        regs = ['esp']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 1)
        self.assertEqual(gadget.lines[0][0], 0xc797)

        regs = ['esp', 'eax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 13)

        self.assertEqual(gadget.imageBase, 0x4ad00000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x4ad00000)
示例#47
0
文件: test_x86_64.py 项目: dhn/Ropper
    def test_jmpreg(self):
        ropper = Ropper()
        regs = ["rsp"]
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 18)
        self.assertEqual(gadget.lines[0][0], 0xB1C7)

        regs = ["rsp", "rax"]
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 25)

        self.assertEqual(gadget.imageBase, 0x400000)
        self.file.imageBase = 0x0
        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        self.assertEqual(gadget.imageBase, 0x400000)

        with self.assertRaises(RopperError):
            regs = ["invalid"]
            ropper.searchJmpReg(self.file, regs)
示例#48
0
    def __asm(self, code, arch, format):
        r = Ropper()
        if format == 'R':
            f = 'raw'
        elif format == 'H':
            f = 'hex'
        elif format == 'S':
            f = 'string'
        else:
            raise RopperError('wrong format: %s' % f)

        self.__cprinter.println(self.__rs.asm(code, arch, f))
示例#49
0
    def test_jmpreg(self):
        ropper = Ropper()
        regs=['rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 4)
        self.assertEqual(gadget.lines[0][0], 0x19bb)

        regs=['rcx','rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 7)

        self.assertEqual(gadget.imageBase, 0x100000000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.checksum] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x100000000)

        with self.assertRaises(RopperError):
            regs=['invalid']
            ropper.searchJmpReg(self.file, regs)
示例#50
0
    def test_jmpreg(self):
        ropper = Ropper()
        regs=['rsp']
        gadgets = ropper.searchJmpReg(self.file, regs)
        gadget = gadgets[0]
        self.assertEqual(len(gadgets), 18)
        self.assertEqual(gadget.lines[0][0], 0xb1c7)

        regs=['rsp','rax']
        gadgets = ropper.searchJmpReg(self.file, regs)
        self.assertEqual(len(gadgets), 25)

        self.assertEqual(gadget.imageBase, 0x400000)
        self.file.imageBase = 0x0
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x0)
        self.file.imageBase = None
        Gadget.IMAGE_BASES[self.file.fileName] = self.file.imageBase

        self.assertEqual(gadget.imageBase, 0x400000)

        with self.assertRaises(RopperError):
            regs=['invalid']
            ropper.searchJmpReg(self.file, regs)
示例#51
0
    def __disassembleAddress(self, addr, length):
        eSections = self.binary.executableSections

        for section in  eSections:
            if section.virtualAddress <= addr and section.virtualAddress + section.size > addr:
                ropper = Ropper()


                g = ropper.disassembleAddress(section, self.binary, addr, addr - (self.binary.imageBase+section.offset), length)
                if not g:
                    self.__cprinter.printError('Cannot disassemble address: %s' % toHex(addr))
                    return
                if length < 0:
                    length = length * -1
                if len(g) < length:
                    self.__cprinter.printInfo('Cannot disassemble specified count of instructions')
                self.binary.printer.printTableHeader('Instructions')
                self.__cprinter.println(g.disassemblyString())
                return
示例#52
0
    def test_opcode_failures(self):
        r = Ropper()

        if version_info.major == 3 and version_info.minor >= 2:
            # Wrong question mark position
            with self.assertRaisesRegex(
                    RopperError,
                    'A \? for the highest 4 bit of a byte is not supported.*'):
                r.searchOpcode(self.file, 'ff?4')
            # Wrong lengh
            with self.assertRaisesRegex(
                    RopperError,
                    'The length of the opcode has to be a multiple of two'):
                r.searchOpcode(self.file, 'ff4')
            # Unallowed character
            with self.assertRaisesRegex(RopperError,
                                        'Invalid characters in opcode string'):
                r.searchOpcode(self.file, 'ff4r')
        else:
            # Wrong question mark position
            with self.assertRaisesRegexp(
                    RopperError,
                    'A \? for the highest 4 bit of a byte is not supported.*'):
                r.searchOpcode(self.file, 'ff?4')
            # Wrong lengh
            with self.assertRaisesRegexp(
                    RopperError,
                    'The length of the opcode has to be a multiple of two'):
                r.searchOpcode(self.file, 'ff4')
            # Unallowed character
            with self.assertRaisesRegexp(
                    RopperError, 'Invalid characters in opcode string'):
                r.searchOpcode(self.file, 'ff4r')
示例#53
0
    def test_ppr(self):
        ropper = Ropper()

        with self.assertRaises(NotSupportedError):
            gadgets = ropper.searchPopPopRet(self.file)
示例#54
0
 def test_jmpreg(self):
     ropper = Ropper()
     regs = ['esp']
     with self.assertRaises(NotSupportedError):
         gadgets = ropper.searchJmpReg(self.file, regs)
示例#55
0
 def __searchPopPopRet(self):
     r = Ropper(self.__searchGadgetCallback)
     pprs = r.searchPopPopRet(self.binary)
     pprs = ropper.filterBadBytes(pprs, self.__options.badbytes)
     self.__printGadgets(pprs, header='POP;POP;RET Instructions')