示例#1
0
 def trackIO(self):
     result = idaversion.ask_str(self.recent_fd, 'FD ?', hist=2)
     if result is None:
         return
     self.recent_fd = result
     fd = int(result)
     simicsString = gdbProt.Evalx('SendGDBMonitor("@cgc.trackIO(%d)");' % fd)
     time.sleep(1)
     eip = gdbProt.getEIPWhenStopped()
     self.signalClient()
     self.updateDataWatch()
示例#2
0
 def runToWrite(self):
     print('runToWrite')
     result = idaversion.ask_str('?', 'String')
     if result is None:
         return
     command = "@cgc.runToWrite('%s')" % result
     print('command is %s' % command)
     simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % command)
     eip = gdbProt.getEIPWhenStopped()
     print('runToWrite %s, ended at eip 0x%x' % (result, eip))
     self.signalClient(norev=True)
     self.showSimicsMessage()
示例#3
0
 def runToBind(self):
     print('runToBind')
     result = idaversion.ask_str('?', 'Network address as ip\:port (or regex)')
     if result is None:
         return
     #result = '192.168.31.52:20480'
     command = "@cgc.runToBind('%s')" % result
     print('command is %s' % command)
     simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % command)
     eip = gdbProt.getEIPWhenStopped()
     print('runToBind %s, ended at eip 0x%x' % (result, eip))
     self.signalClient(norev=True)
     self.showSimicsMessage()
示例#4
0
 def runToAccept(self):
     print('runToAccept')
     result = idaversion.ask_str(self.recent_fd, 'FD ?')
     if result is None:
         return
     self.recent_fd = result
     fd = int(result)
     command = "@cgc.runToAccept(%d)" % fd
     print('command is %s' % command)
     simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % command)
     time.sleep(1)
     eip = gdbProt.getEIPWhenStopped()
     print('runToAccept %s, ended at eip 0x%x' % (result, eip))
     self.signalClient(norev=True)
     self.showSimicsMessage()
示例#5
0
    def askSetBookmark(self):
        print('askSetBookmark')
        addr = idaversion.get_reg_value(self.isim.PC)
        instruct = idc.GetDisasm(addr)
        if ';' in instruct:
            instruct, dumb = instruct.rsplit(';', 1)
            #print('instruct is %s' % instruct)
            instruct = instruct.strip()

        #print('eip %x  instruct: %s' % (addr, instruct))
        default = '0x%x: %s' % (addr, instruct)
        mark = idaversion.ask_str(default, 'Name of new bookmark:')
        print('got mark of %s' % mark)
        if mark != 0 and mark != 'None':
            self.setBookmark(mark)
            print('do update of bookmark, go mark of %s' % mark)
            self.updateBookmarkView()
示例#6
0
    def wroteToRegister(self): 
        highlighted = idaversion.getHighlight()

        if highlighted is None  or highlighted not in self.reg_list:
           print('%s not in reg list' % highlighted)
           highlighted = idaversion.ask_str('Wrote to register:', 'Which register?')

        print 'Looking for a write to %s...' % highlighted
        command = "@cgc.revToModReg('%s')" % highlighted
        simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % command)
        eip = None
        if self.checkNoRev(simicsString):
            eip = gdbProt.getEIPWhenStopped()
            self.signalClient()
        else:
            return
        curAddr = idaversion.get_reg_value(self.PC)
        print('Current instruction (0x%x) wrote to reg %s' % (curAddr, highlighted))
        return eip
示例#7
0
 def trackRegister(self): 
     highlighted = idaversion.getHighlight()
     if highlighted is None  or not self.isReg(highlighted) or highlighted not in self.reg_list:
        print('%s not in reg list' % highlighted)
        print('%s' % str(self.reg_list))
        highlighted = idaversion.ask_str('Track register:', 'Which register?')
     print 'backtrack to source of to %s...' % highlighted
     command = "@cgc.revTaintReg('%s')" % highlighted
     simicsString = gdbProt.Evalx('SendGDBMonitor("%s");' % command)
     print('trackRegister got simicsString %s' % simicsString)
     eip = None
     if self.checkNoRev(simicsString):
         eip = gdbProt.getEIPWhenStopped()
         self.signalClient()
     else:
         return
     curAddr = idaversion.get_reg_value(self.PC)
     print('Current instruction (0x%x) is as far back as we can trace reg %s' % (curAddr, highlighted))
     self.showSimicsMessage()
     bookmark_list = self.bookmark_view.updateBookmarkView()
     return eip
示例#8
0
 def askGoToBookmark(self):
     mark = idaversion.ask_str('myBookmark', 'Name of bookmark to jump to:')
     if mark is not None and mark != 0:
         self.goToBookmarkRefresh(mark)