Ejemplo n.º 1
0
    def __init__(self, tabWidget, tabName):
        """
        Set all passed data. Also, add the own send button to ``SenderTab.sendButtonList`` to
        allow managing it globally.

        :param tabWidget: The element in the tab bar. **Not** the table widget.
        """

        AbstractTab.__init__(
            self, tabWidget,
            Strings.senderTabLoggerName + " (" + tabName + ")", [2, 3, 4],
            Strings.senderTabElementPacketTableViewName,
            Strings.senderTabElementLabelInterfaceValueName)

        self.tabName = tabName

        self.tabIndex = self.getTabIndex()
        if self.tabIndex == -1:
            raise ValueError("tabWidget not present in tab bar")

        # Append the own send button to the list
        SenderTabElement.sendButtonList.append(self.tabWidget.buttonSendAll)

        #: The thread that runs when sending takes place in a loop
        self.loopSenderThread = None

        self.prepareUI()
Ejemplo n.º 2
0
    def __init__(self, tabWidget):
        """
        This just sets data and adds click handlers.
        """

        AbstractTab.__init__(self,
                             tabWidget,
                             Strings.comparerTabLoggerName,
                             [2, 3, 4],
                             Strings.comparerTabPacketViewName,
                             allowTablePaste=False)

        self.rawPacketSet1 = []
        self.rawPacketSet2 = []

        # Get all GUI elements
        self.buttonComparerLoadSet1 = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonComparerLoadSet1")
        self.buttonComparerLoadSet2 = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonComparerLoadSet2")
        self.buttonComparerStartCompare = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonComparerStartCompare")

        assert all(GUIElem is not None for GUIElem in [self.buttonComparerLoadSet1,
                                                       self.buttonComparerLoadSet2,
                                                       self.buttonComparerStartCompare, ]), "GUI Elements not found"

        self.buttonComparerLoadSet1.clicked.connect(self.setPacketSet1)
        self.buttonComparerLoadSet2.clicked.connect(self.setPacketSet2)
        self.buttonComparerStartCompare.clicked.connect(self.compare)

        self.prepareUI()
Ejemplo n.º 3
0
    def handleInterfaceSettingsDialog(self, allowOnlyOwnInterface=True):
        """
        Override the parents method to only allow the currently set CAN interface
        """

        AbstractTab.handleInterfaceSettingsDialog(
            self, allowOnlyOwnInterface=allowOnlyOwnInterface)
Ejemplo n.º 4
0
    def __init__(self,
                 packets=None,
                 rawPacketList=None,
                 returnPacketsAsRawList=True):
        """
        This basically just sets data and reads the widget from the ``.ui`` file.

        :param packets: Optional: List that contains the elements that will be pre loaded into the GUI table
                               in the following format: ``<CAN ID>#<Data>``.
                               This is used for the :class:`~src.SnifferTabElement.SnifferTabElement`

        :param rawPacketList: Optional: Raw packet list that contains the elements that will be pre loaded into the GUI table.
                              If this is specified, ``packets`` will be ignored.

        :param returnPacketsAsRawList: Boolean value indicating whether the displayed packets will be returned
                                       as raw packet list. If this is False, the values will be returned as list
                                       in the following format: ``<CAN ID>#<Data>``.
        """

        self.packets = packets
        self.rawPacketList = rawPacketList
        self.widget = Toolbox.Toolbox.widgetFromUIFile(
            Strings.packetsDialogUIPath)

        AbstractTab.__init__(
            self,
            self.widget,
            Strings.packetsDialogLoggerName, [2, 3],
            Strings.packetsDialogTableViewName,
            labelInterfaceValueName=None,
            hideTimestampCol=False)

        self.returnPacketsAsRawList = returnPacketsAsRawList

        # Get all GUI elements
        self.buttonManagePacketsDialogAdd = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagePacketsDialogAdd")
        self.buttonManagePacketsDialogClear = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagePacketsDialogClear")
        self.buttonManagePacketsDialogUniquePackets = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagePacketsDialogUniquePackets")
        self.buttonManagePacketsDialogUniqueIDs = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagePacketsDialogUniqueIDs")

        assert all(GUIElem is not None for GUIElem in [
            self.buttonManagePacketsDialogAdd,
            self.buttonManagePacketsDialogClear,
            self.buttonManagePacketsDialogUniquePackets,
            self.buttonManagePacketsDialogUniqueIDs,
        ]), "GUI Elements not found"

        self.buttonManagePacketsDialogAdd.clicked.connect(self.manualAddPacket)
        self.buttonManagePacketsDialogClear.clicked.connect(self.clear)
        self.buttonManagePacketsDialogUniquePackets.clicked.connect(
            self.getUniquePackets)
        self.buttonManagePacketsDialogUniqueIDs.clicked.connect(
            self.getUniqueIDs)

        self.prepareUI()
Ejemplo n.º 5
0
    def prepareUI(self):
        """
        Prepare the tab specific GUI elements, add keyboard shortcuts and set a CANData instance
        """
        AbstractTab.prepareUI(self)

        sendButtonEnabledState = self.CANData is not None
        self.setSendButtonState(sendButtonEnabledState)
Ejemplo n.º 6
0
    def prepareUI(self):
        """
        Prepare the tab specific GUI elements, add keyboard shortcuts and set a CANData instance
        """

        AbstractTab.prepareUI(self)

        self.populateProjects()
        self.populateProjectEditLineEdits()
Ejemplo n.º 7
0
    def prepareUI(self):
        AbstractTab.prepareUI(self)

        # Prepare the combobox
        self.comboBoxUDSMode.clear()
        for i in range(len(self.UDSModeComboBoxValuePairs)):
            valuePair = self.UDSModeComboBoxValuePairs[i]
            self.comboBoxUDSMode.addItem(valuePair[0])
            self.comboBoxUDSMode.setItemData(i, valuePair[1])
Ejemplo n.º 8
0
    def handleCopy(self):
        """
        Pass the copy event to the Toolbox, but only if no data is being loaded
        """

        if self.loadingData:
            self.logger.info(Strings.managerTabNoActionLoadingData)
            return

        AbstractTab.handleCopy(self)
Ejemplo n.º 9
0
    def prepareUI(self):
        AbstractTab.prepareUI(self)
        self.lineEditFuzzerTabIDMask.setPlaceholderText("X" * 8)
        self.lineEditFuzzerTabDataMask.setPlaceholderText("X" * 16)

        # Prepare the combobox
        self.comboBoxFuzzingMode.clear()
        for i in range(len(self.fuzzingModeComboBoxValuePairs)):
            valuePair = self.fuzzingModeComboBoxValuePairs[i]
            self.comboBoxFuzzingMode.addItem(valuePair[0])
            self.comboBoxFuzzingMode.setItemData(i, valuePair[1])
Ejemplo n.º 10
0
    def clear(self, returnOldPackets=False):
        """
        Clear the GUI table displaying PacketSets along with data lists.
        """

        AbstractTab.clear(self)
        self.dumpsDeletedPacketIDs.clear()

        for rowIDTuple in self.dumpsRowIDs:
            # Append the ID of every deleted row
            self.dumpsDeletedPacketIDs.append(rowIDTuple[1])

        self.dumpsRowIDs = []
        self.dumpsCurrentlyDisplayedPacketSetID = -1
Ejemplo n.º 11
0
    def __init__(self, tabWidget):
        AbstractTab.__init__(self,
                             tabWidget,
                             Strings.UDSTabLoggerName, [2, 3, 4],
                             Strings.UDSTabPacketViewName,
                             Strings.UDSTabLabelInterfaceValueName,
                             allowTablePaste=False)

        self.active = False

        #: Sending takes place in a loop in a separate thread
        self.UDSSenderThread = None
        #: Adding items also takes place in a separate thread to avoid blocking the GUI thread
        self.itemAdderThread = None

        #: These values will be available in the fuzzing mode ComboBox
        self.UDSModeComboBoxValuePairs = [("Read Data By ID", 0),
                                          ("Routine Control", 1)]

        # Get all GUI elements
        self.comboBoxUDSMode = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxUDSMode")
        self.lineEditUDSTabUDSID = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditUDSTabUDSID")
        self.doubleSpinBoxUDSPacketGap = self.tabWidget.findChild(
            QtGui.QDoubleSpinBox, "doubleSpinBoxUDSPacketGap")
        self.buttonUDSInterfaceSettings = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonUDSInterfaceSettings")
        self.buttonUDSTabToggleFuzzing = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonUDSTabToggleFuzzing")
        self.buttonUDSClear = self.tabWidget.findChild(QtGui.QPushButton,
                                                       "buttonUDSClear")
        self.labelUDSCountValue = self.tabWidget.findChild(
            QtGui.QLabel, "labelUDSCountValue")

        assert all(GUIElem is not None for GUIElem in [
            self.comboBoxUDSMode, self.doubleSpinBoxUDSPacketGap,
            self.buttonUDSInterfaceSettings, self.buttonUDSTabToggleFuzzing,
            self.buttonUDSClear, self.labelUDSCountValue
        ]), "GUI Elements not found"

        self.buttonUDSInterfaceSettings.clicked.connect(
            self.handleInterfaceSettingsDialog)
        self.buttonUDSClear.clicked.connect(self.clear)
        self.comboBoxUDSMode.currentIndexChanged.connect(self.UDSModeChanged)
        self.buttonUDSTabToggleFuzzing.clicked.connect(self.toggleUDSFuzzing)

        self.prepareUI()
Ejemplo n.º 12
0
    def prepareUI(self):
        """
        Prepare the GUI elements and add keyboard shortcuts. Also, pre populate the table
        """

        AbstractTab.prepareUI(self)

        # Pre populate the table
        if self.rawPacketList is not None:
            self.rawData = self.rawPacketList
            self.packetTableModel.appendRows(self.rawPacketList)

        elif self.packets is not None:
            for packet in self.packets:
                vals = packet.split("#")
                CANID = vals[0]
                data = vals[1] if vals[1] != "*" else ""
                self.addPacket([CANID, data])
Ejemplo n.º 13
0
    def addPacket(self,
                  valueList,
                  addAtFront=True,
                  append=True,
                  emit=True,
                  addToRawDataOnly=False):
        """
        Override the parents class method to add packets at front and to update the counter label
        """

        AbstractTab.addPacket(self,
                              valueList=valueList,
                              addAtFront=addAtFront,
                              append=append,
                              emit=emit,
                              addToRawDataOnly=addToRawDataOnly)
        # Also update the label
        self.labelFuzzerCountValue.setText(str(len(self.rawData)))
Ejemplo n.º 14
0
    def __init__(self, tabWidget):
        AbstractTab.__init__(self,
                             tabWidget,
                             Strings.filterTabLoggerName, [0, 1, 2, 3, 4],
                             Strings.filterTabPacketTableViewName,
                             Strings.filterTabLabelInterfaceValueName,
                             allowTablePaste=False)

        #: Noise that will be substracted from the collected data
        self.noiseData = []

        self.snifferProcess = None
        self.dataAdderThread = None

        #: Shared process independent flag to terminate the sniffer process
        self.sharedSnifferEnabledFlag = Value("i", 1)
        #: Shared process independent flag to terminate the data adder
        self.sharedDataAdderEnabledFlag = Value("i", 1)

        # Get all GUI elements
        self.spinBoxFilterTimeCollectNoise = self.tabWidget.findChild(
            QtGui.QSpinBox, "spinBoxFilterTimeCollectNoise")
        self.spinBoxFilterSampleAmount = self.tabWidget.findChild(
            QtGui.QSpinBox, "spinBoxFilterSampleAmount")
        self.buttonFilterInterfaceSettings = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFilterInterfaceSettings")
        self.buttonFilterStart = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFilterStart")
        self.buttonFilterDataClear = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFilterDataClear")

        assert all(GUIElem is not None for GUIElem in [
            self.spinBoxFilterTimeCollectNoise, self.spinBoxFilterSampleAmount,
            self.buttonFilterInterfaceSettings, self.buttonFilterStart,
            self.buttonFilterDataClear
        ]), "GUI Elements not found"

        self.buttonFilterInterfaceSettings.clicked.connect(
            self.handleInterfaceSettingsDialog)
        self.buttonFilterStart.clicked.connect(self.startFilter)
        self.buttonFilterDataClear.clicked.connect(self.clear)

        self.prepareUI()
Ejemplo n.º 15
0
    def __init__(self, tabWidget, tabName, ifaceName=None):
        """
        Set parameters and initialize the CANData instance

        :param tabWidget: The element in the tab bar. **Not** the table widget.
        :param tabName: The name of the tab
        :param ifaceName: Optional: The interface name. If this is None, then the ``tabName`` will be used
        """

        self.ifaceName = ifaceName if ifaceName is not None else tabName

        AbstractTab.__init__(self,
                             tabWidget,
                             Strings.snifferTabElementLoggerName + " (" +
                             tabName + ")", [0, 1, 2, 3, 4],
                             Strings.snifferTabElementPacketTableViewName,
                             labelInterfaceValueName=Strings.
                             snifferTabElementLabelInterfaceValueName,
                             CANData=CANData.CANDataInstances[self.ifaceName],
                             hideTimestampCol=False,
                             allowTablePaste=False)

        self.tabName = tabName

        # Amount of packets received on an interface to prevent freezes
        self.packetCount = self.getPacketCount()
        self.tooMuchData = False
        self.valueListsToProcess = []

        # Can be managed using the button
        self.ignoredPackets = []
        # whether to invert the packet ignore mechanism --> do a whitelist instead of a blacklist
        self.invert = False

        self.snifferProcess = None
        self.itemAdderThread = None

        # These flags are shared with the processes/threads
        # to terminate them
        self.sharedSnifferEnabledFlag = Value("i", 1)

        self.prepareUI()
Ejemplo n.º 16
0
    def __init__(self, tabWidget):
        AbstractTab.__init__(self, tabWidget, Strings.searcherTabLoggerName,
                             [2, 3, 4], Strings.searcherTabPacketTableViewName,
                             Strings.searcherTabLabelInterfaceValueName)

        #: The currently smallest known set of packets that cause a specific action.
        #: Values are lists with raw data
        self.lastWorkingChunk = []

        # Packet gap
        self.sleepTime = 0

        #: We first search downwards in the binary search tree. If this doesn't
        #: succeed, we use randomization and begint to search upwards.
        self.downwardsSearch = True

        # Get all GUI elements
        self.buttonSearcherAddPacket = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonSearcherAddPacket")
        self.doubleSpinBoxSearcherPacketGap = self.tabWidget.findChild(
            QtGui.QDoubleSpinBox, "doubleSpinBoxSearcherPacketGap")
        self.buttonSearcherInterfaceSettings = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonSearcherInterfaceSettings")
        self.buttonSearcherStart = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonSearcherStart")
        self.buttonSearcherDataClear = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonSearcherDataClear")

        assert all(GUIElem is not None for GUIElem in [
            self.buttonSearcherAddPacket, self.doubleSpinBoxSearcherPacketGap,
            self.buttonSearcherInterfaceSettings, self.buttonSearcherStart,
            self.buttonSearcherDataClear
        ]), "GUI Elements not found"

        self.buttonSearcherInterfaceSettings.clicked.connect(
            self.handleInterfaceSettingsDialog)
        self.buttonSearcherStart.clicked.connect(self.searchPackets)
        self.buttonSearcherAddPacket.clicked.connect(self.manualAddPacket)
        self.buttonSearcherDataClear.clicked.connect(self.clear)

        self.prepareUI()
Ejemplo n.º 17
0
    def clear(self, returnOldPackets=False):
        """
        Clear the currently displayed data on the GUI and in the lists.

        :param returnOldPackets: Optional: If this is True then the previously displayed data will be returned as
                                 raw data list. Default is False

        """

        savedPackets = AbstractTab.clear(self,
                                         returnOldPackets=returnOldPackets)
        self.valueListsToProcess.clear()
        # Reset the label too
        self.tabWidget.labelSnifferCountValue.setText("0")

        return savedPackets
Ejemplo n.º 18
0
    def clear(self, returnOldPackets=False):
        """
        Clear the currently displayed data on the GUI and in the rawData list

        :param returnOldPackets: If this is true, then the previously displayed packets will
               be returned as raw data list
        :return: Previously displayed packets as raw data list (if returnOldPackets is True), else an empty list
        """

        savedPackets = AbstractTab.clear(self,
                                         returnOldPackets=returnOldPackets)

        # Reset the label too
        self.labelFuzzerCountValue.setText("0")

        return savedPackets
Ejemplo n.º 19
0
    def removeSelectedPackets(self):
        """
        Pass the remove requested event to the super class.
        After that, add the **database** IDs of the deleted packets to ``dumpsDeletedPacketIDs``.
        The deleted rows will be removed from ``dumpsRowIDs``, too.
        """

        removedRows = AbstractTab.removeSelectedPackets(self)

        # Also remove the rows from the dumpsRowIDs list
        # Reverse the delete order --> no need to worry about shifting indexes <:
        for row in sorted(removedRows, reverse=True):
            # Add the ID of the deleted packet as Value of they Key (Rownumber)
            try:
                self.dumpsDeletedPacketIDs.append(self.dumpsRowIDs[row][1])
                del self.dumpsRowIDs[row]
            except IndexError:
                self.logger.debug(
                    Strings.managerTabDebuggingDumpsRowIDsIndexError +
                    str(row))
Ejemplo n.º 20
0
 def clear(self, returnOldPackets=False):
     """
     Clear the GUI table and all associated data lists
     """
     AbstractTab.clear(self, returnOldPackets=returnOldPackets)
     self.lastWorkingChunk = []
Ejemplo n.º 21
0
 def clear(self, returnOldPackets=False):
     """
     Clear the currently displayed data on the GUI and in the lists.
     """
     AbstractTab.clear(self)
     self.noiseData = []
Ejemplo n.º 22
0
    def addPacket(self,
                  valueList,
                  addAtFront=True,
                  append=True,
                  emit=True,
                  addToRawDataOnly=False,
                  ignorePacketRate=False):
        """
        Override the parents method to add packets at front and to update the counter label.
        If too much data is received, the data will be added after sniffing to prevent freezes.
        Also, only add packets if the data isn't present in ``self.ignoredPackets``

        :param ignorePacketRate: Additional optional parameter: Boolean value indicating whether the rate of
                                 packets per second will be ignored or not. This is set to False by Default.
                                 We need to set it to True to process ``self.valueList`` after sniffing if too much
                                 data was received.

        """

        # Check if we want to ignore the packet
        CANID = valueList[self.IDColIndex]
        data = valueList[self.dataColIndex]
        strIdx = Toolbox.Toolbox.getPacketDictIndex(CANID, data)
        if strIdx in self.ignoredPackets:
            return
        # Check wildcard
        elif str(str(CANID) + "#*").upper() in self.ignoredPackets:
            return

        # Save the values for later
        if not ignorePacketRate and self.tooMuchData:
            self.valueListsToProcess.append(valueList)
            # Also update the label
            self.tabWidget.labelSnifferCountValue.setText(
                str(len(self.rawData) + len(self.valueListsToProcess)))
            return

        else:
            # Check periodically
            if len(self.rawData) % 500 == 0 and len(
                    self.rawData
            ) > 0 and not ignorePacketRate and not self.tooMuchData:
                packetCount = self.getPacketCount()
                # if we add one packet to the GUI, X packets are received on the socket
                # --> this is too much data
                # --> save data to process it after the sniffing has stopped to prevent freezes
                if packetCount != 0 and packetCount - self.packetCount > 7200:
                    self.tooMuchData = True
                    self.packetTableView.setEnabled(False)
                    self.logger.warn(Strings.snifferTabElementTooMuchData)

                # Update the value for the next call
                self.packetCount = packetCount

            AbstractTab.addPacket(self,
                                  valueList=valueList,
                                  addAtFront=addAtFront,
                                  append=append,
                                  emit=emit)
            # Also update the label
            self.tabWidget.labelSnifferCountValue.setText(
                str(len(self.rawData)))
Ejemplo n.º 23
0
    def __init__(self, tabWidget):
        AbstractTab.__init__(self, tabWidget, Strings.managerTabLoggerName,
                             [2, 3, 4], Strings.managerTabPacketTableViewName)

        #: Kepps track between the association of
        #: table row <-> database id of the packet
        #: e.g. row 2 - database ID 5
        self.dumpsRowIDs = []
        self.dumpsCurrentlyDisplayedPacketSet = None
        self.dumpsDeletedPacketIDs = []

        #: Disallow copying while loading data
        self.loadingData = False

        # Get all GUI elements
        # Projects
        self.lineEditProjectName = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditProjectName")
        self.lineEditProjectDescription = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditProjectDescription")
        self.buttonProjectCreate = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonProjectCreate")
        self.comboBoxProjectDelete = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxProjectDelete")
        self.buttonProjectDelete = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonProjectDelete")
        self.comboBoxProjectEdit = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxProjectEdit")
        self.lineEditProjectEditName = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditProjectEditName")
        self.lineEditProjectEditDescription = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditProjectEditDescription")
        self.buttonProjectEdit = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonProjectEdit")
        # Dumps
        self.comboBoxManagerDumps = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxManagerDumps")
        self.buttonManagerDeleteDump = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerDeleteDump")
        self.buttonManagerDumpsAddPacket = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerDumpsAddPacket")
        self.buttonManagerUpdateDump = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerUpdateDump")
        self.buttonManagerCreateDump = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerCreateDump")
        self.buttonManagerDumpsSaveToFile = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerDumpsSaveToFile")
        self.buttonManagerClearDump = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerClearDump")
        # KnownPackets
        self.lineEditKnownPacketID = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketID")
        self.lineEditKnownPacketData = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketData")
        self.lineEditKnownPacketDescription = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketDescription")
        self.buttonAddKnownPacket = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonAddKnownPacket")
        self.comboBoxDeleteKnownPackets = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxDeleteKnownPackets")
        self.buttonKnownPacketRemove = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonKnownPacketRemove")
        self.comboBoxEditKnownPackets = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxEditKnownPackets")
        self.lineEditKnownPacketEditID = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketEditID")
        self.lineEditKnownPacketEditData = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketEditData")
        self.lineEditKnownPacketEditDescription = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditKnownPacketEditDescription")
        self.buttonManagerEditKnownPacket = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerEditKnownPacket")
        # Import/Export
        self.buttonManagerImport = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerImport")
        self.comboBoxManagerExportProject = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxManagerExportProject")
        self.buttonManagerExport = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonManagerExport")

        assert all(GUIElem is not None for GUIElem in [
            self.lineEditProjectName,
            self.lineEditProjectDescription,
            self.buttonProjectCreate,
            self.comboBoxProjectDelete,
            self.buttonProjectDelete,
            self.comboBoxProjectEdit,
            self.lineEditProjectEditName,
            self.lineEditProjectEditDescription,
            self.buttonProjectEdit,
            self.comboBoxManagerDumps,
            self.buttonManagerDeleteDump,
            self.buttonManagerDumpsAddPacket,
            self.buttonManagerUpdateDump,
            self.buttonManagerCreateDump,
            self.buttonManagerDumpsSaveToFile,
            self.buttonManagerClearDump,
            self.lineEditKnownPacketID,
            self.lineEditKnownPacketData,
            self.lineEditKnownPacketDescription,
            self.buttonAddKnownPacket,
            self.comboBoxDeleteKnownPackets,
            self.buttonKnownPacketRemove,
            self.comboBoxEditKnownPackets,
            self.lineEditKnownPacketEditID,
            self.lineEditKnownPacketEditData,
            self.lineEditKnownPacketEditDescription,
            self.buttonManagerEditKnownPacket,
            self.buttonManagerImport,
            self.comboBoxManagerExportProject,
            self.buttonManagerExport,
        ]), "GUI Elements not found"

        # Add click handlers
        self.buttonProjectCreate.clicked.connect(self.createProject)
        self.buttonProjectDelete.clicked.connect(self.deleteProject)
        self.buttonAddKnownPacket.clicked.connect(self.addKnownPacket)
        self.buttonKnownPacketRemove.clicked.connect(self.removeKnownPacket)
        self.buttonManagerDumpsAddPacket.clicked.connect(self.manualAddPacket)
        self.buttonManagerCreateDump.clicked.connect(self.createDump)
        self.comboBoxManagerDumps.currentIndexChanged.connect(self.getDump)
        self.buttonManagerDeleteDump.clicked.connect(self.deleteDump)
        self.buttonManagerClearDump.clicked.connect(self.clear)
        self.buttonManagerDumpsSaveToFile.clicked.connect(self.saveToFile)
        self.buttonManagerUpdateDump.clicked.connect(self.updateDump)
        self.buttonProjectEdit.clicked.connect(self.editProject)
        self.comboBoxProjectEdit.currentIndexChanged.connect(
            self.populateProjectEditLineEdits)
        self.comboBoxEditKnownPackets.currentIndexChanged.connect(
            self.populateKnownPacketEditLineEdits)
        self.buttonManagerEditKnownPacket.clicked.connect(self.editKnownPacket)
        self.buttonManagerExport.clicked.connect(self.exportProject)
        self.buttonManagerImport.clicked.connect(self.importProject)

        self.prepareUI()
Ejemplo n.º 24
0
    def __init__(self, tabWidget):
        AbstractTab.__init__(self,
                             tabWidget,
                             Strings.fuzzerTabLoggerName, [2, 3, 4],
                             Strings.fuzzerTabPacketTableViewName,
                             Strings.fuzzerTabLabelInterfaceValueName,
                             allowTablePaste=False)

        #: The ID is 8 chars max. - initialize it with only X chars
        self.IDMask = "X" * 8
        #: Default: allow the max value of extended frames
        self.IDMaxValue = 0x1FFFFFFF

        #: The data is 16 chars max.
        self.dataMask = "X" * 16
        self.dataMinLength = 0
        #: This length corresponds the length when interpreted as bytes
        self.dataMaxLength = 8

        #: Sending takes place in a loop in a separate thread
        self.fuzzSenderThread = None
        #: Adding items also takes place in a separate thread to avoid blocking the GUI thread
        self.itemAdderThread = None

        #: These values will be available in the fuzzing mode ComboBox
        self.fuzzingModeComboBoxValuePairs = [("User specified values", 0),
                                              ("11 bit IDs", 1),
                                              ("29 bit IDs", 2)]

        #: Used to avoid spamming the log box when the user specified wrong parameters while sending
        self.packetBuildErrorCount = 0

        # Get all GUI elements
        self.comboBoxFuzzingMode = self.tabWidget.findChild(
            QtGui.QComboBox, "comboBoxFuzzingMode")
        self.lineEditFuzzerTabIDMask = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditFuzzerTabIDMask")
        self.lineEditFuzzerTabDataMask = self.tabWidget.findChild(
            QtGui.QLineEdit, "lineEditFuzzerTabDataMask")
        self.horizontalSliderFuzzerMinLength = self.tabWidget.findChild(
            QtGui.QSlider, "horizontalSliderFuzzerMinLength")
        self.horizontalSliderFuzzerMaxLength = self.tabWidget.findChild(
            QtGui.QSlider, "horizontalSliderFuzzerMaxLength")
        self.doubleSpinBoxFuzzerPacketGap = self.tabWidget.findChild(
            QtGui.QDoubleSpinBox, "doubleSpinBoxFuzzerPacketGap")
        self.buttonFuzzerInterfaceSettings = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFuzzerInterfaceSettings")
        self.buttonFuzzerTabToggleFuzzing = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFuzzerTabToggleFuzzing")
        self.buttonFuzzerClear = self.tabWidget.findChild(
            QtGui.QPushButton, "buttonFuzzerClear")
        self.labelFuzzerMinLengthValue = self.tabWidget.findChild(
            QtGui.QLabel, "labelFuzzerMinLengthValue")
        self.labelFuzzerMaxLengthValue = self.tabWidget.findChild(
            QtGui.QLabel, "labelFuzzerMaxLengthValue")
        self.labelFuzzerCountValue = self.tabWidget.findChild(
            QtGui.QLabel, "labelFuzzerCountValue")

        assert all(GUIElem is not None for GUIElem in [
            self.comboBoxFuzzingMode, self.lineEditFuzzerTabIDMask, self.
            lineEditFuzzerTabDataMask, self.horizontalSliderFuzzerMinLength,
            self.horizontalSliderFuzzerMaxLength, self.
            doubleSpinBoxFuzzerPacketGap, self.buttonFuzzerInterfaceSettings,
            self.buttonFuzzerTabToggleFuzzing, self.buttonFuzzerClear,
            self.labelFuzzerMinLengthValue, self.labelFuzzerMaxLengthValue,
            self.labelFuzzerCountValue
        ]), "GUI Elements not found"

        self.buttonFuzzerInterfaceSettings.clicked.connect(
            self.handleInterfaceSettingsDialog)
        self.buttonFuzzerClear.clicked.connect(self.clear)
        self.horizontalSliderFuzzerMinLength.valueChanged.connect(
            self.sliderChanged)
        self.horizontalSliderFuzzerMaxLength.valueChanged.connect(
            self.sliderChanged)
        self.lineEditFuzzerTabIDMask.textChanged.connect(self.IDMaskChanged)
        self.lineEditFuzzerTabDataMask.textChanged.connect(
            self.dataMaskChanged)
        self.comboBoxFuzzingMode.currentIndexChanged.connect(
            self.fuzzingModeChanged)
        self.buttonFuzzerTabToggleFuzzing.clicked.connect(self.toggleFuzzing)

        self.prepareUI()