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()
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()
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()
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()
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()
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
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
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)