Exemple #1
0
    def load_project_content(self):
        self.r2Static = Static(self.tab.binary_path, self.plugin_pois)
        if DS.getProject(self.project_run_id) is None:
            return

        for poi in DS.getAllPois(self.project_run_id):
            if poi.type.lower() == "function":
                _poi = Function(poi.name)
                for _projectpoi in poi.data:
                    _var = Var(_projectpoi.name, _projectpoi.type)
                    _var.content['value'] = _projectpoi.data
                    _poi.content['parameters'].append(_var)
                _poi.content['calls'] = poi.calls
                _return = Var()
                _return.importFromDatabase(poi.returnV)
                _poi.content['return'] = _return
                self.r2Static.content['Function'].append(_poi)
            elif poi.type.lower() == "string":
                _poi = String(poi.name)
                _poi.importFromDatabase(poi)
                self.r2Static.content['String'].append(_poi)
            else:
                continue

        self.poiList.addItems(self.r2Static.getPOINames())
        for i in range(len(self.r2Static.getPOINames())):
            list_item = self.poiList.item(i)
            item = self.r2Static.getPOI(list_item.text())

            if type(item) == Function:
                if item.check:
                    list_item.setCheckState(Qt.Checked)
                else:
                    list_item.setCheckState(Qt.Unchecked)
Exemple #2
0
    def new_project_run(self):
        try:
            self.runsMenu.currentIndexChanged.disconnect(self.load_project_run)
        except TypeError:  #when not cennected
            pass

        self.pois = []
        self.first = 0
        if self.tab.binary_path == None:
            return
        self.poiList.clear()
        self.detPOIList.clear()
        self.terminal.clear()

        self.run += 1
        self.project_run_id = PRM.name_to_database(
            self.project_name, self.pluginMenu.currentText(), self.run)
        self.runsMenu.addItem(str(self.run))
        self.daRunButton.setDisabled(True)
        self.daStopButton.setDisabled(True)
        self.saRunButton.setDisabled(False)

        DS.createProject(self.project_run_id, None, self.tab.binary_path, None)
        self.r2Static = Static(self.tab.binary_path, self.plugin_pois)

        self.runsMenu.currentIndexChanged.connect(self.load_project_run)
Exemple #3
0
    def save_project(self):
        # Check if saving existing project
        if self.project_list.currentItem() and self.project_list.currentItem(
        ).isSelected():
            name = self.project_name_edit.text()
            desc = self.project_desc_edit.toPlainText()
            project = self.project_list.currentItem().text()
            updatedProject = dbHandler.updateProject(project, name, desc)
            self.project_list.currentItem().setText(updatedProject)
            self.project_save_button.setEnabled(False)
        else:  # Else create new project
            name = self.project_name_edit.text()
            desc = self.project_desc_edit.toPlainText()
            path = self.project_path_edit.text()

            # Check that path is exists
            if not path:
                self.error_msg.showMessage("Please provide a binary file.")
                self.project_path_label.setStyleSheet("color : red")
                return

            properties = []
            for i in range(12):
                properties.append(self.project_prop_table.item(i, 1).text())

            self.project_path_label.setStyleSheet("color : Black")

            # Check that name is not empty
            if not name:
                self.error_msg.showMessage("Please provide a name.")
                self.project_name_label.setStyleSheet("color : red")
                return

            # Check that another project with the same name doesn't already exist
            for project in self.projects:
                if project.__eq__(name):
                    self.error_msg.showMessage(
                        "A project with the same name already exists.")
                    self.project_name_label.setStyleSheet("color : red")
                    return

            self.project_name_label.setStyleSheet("color : Black")

            dbHandler.createProject(name, desc, path,
                                    properties)  # create the project

            item = QtWidgets.QListWidgetItem(name)
            self.project_list.addItem(item)
            self.project_list.setCurrentItem(item)

            # Add to local list as well

            self.project_save_button.setEnabled(False)
            self.project_path_button.hide()
Exemple #4
0
 def delete_project(self):
     item = self.project_list.currentItem()
     name = self.project_name_edit.text()
     if item and name:
         reply = QMessageBox.question(
             self, "Delete project",
             "Are you sure you want to delete this project?",
             QMessageBox.Yes | QMessageBox.No)
         if reply == QMessageBox.Yes:
             dbHandler.deleteProject(name)
             self.project_list.takeItem(self.project_list.currentRow())
             self.hide_detailed_view()
     else:
         self.hide_detailed_view()
Exemple #5
0
    def save_poi(self, ppoi):
        self.pois.append(ppoi.name)
        item = QtWidgets.QListWidgetItem(ppoi.name)
        self.poiList.addItem(item)

        project = DS.getProject(self.project_run_id)
        project.projectPOI.append(ppoi)
        project.save()
Exemple #6
0
    def static_finished(self):
        self.setDisabled(False)
        self.r2Static.message.disconnect(self.write)
        self.r2Static.finished.disconnect(self.static_finished)
        self.r2Static.add_poi.disconnect(self.save_poi)
        self.r2Static.add_function.disconnect(self.save_function)

        self.runsMenu.currentIndexChanged.connect(self.load_project_run)
        self.pluginMenu.currentIndexChanged.connect(self.load_plugin_data)
        self.pluginMenu.currentIndexChanged.connect(self.load_project_run)

        self.daRunButton.setDisabled(False)
        for poi in self.r2Static.content['Function']:
            _poi_data = poi.toProjectPoi()
            poi_data = DS.getPOI(poi.content['name'])
            if poi_data != None:
                ProjectPOI.transferPOI(poi_data, _poi_data)
        DS.getProject(self.project_run_id).save()
Exemple #7
0
    def save_function(self, fpoi):
        self.pois.append(fpoi.name)
        item = QtWidgets.QListWidgetItem(fpoi.name)
        item.setCheckState(Qt.Checked)
        self.poiList.addItem(item)

        project = DS.getProject(self.project_run_id)
        project.projectFunctions.append(fpoi)
        project.save()
Exemple #8
0
    def select_project(self, item):
        self.project_name_edit.setReadOnly(True)
        title = 'BEAT - ' + item.text()
        self.window_name.emit(title)
        self.parent().setWindowTitle(title)
        self.show_detailed_view()
        self.project_path_button.hide()
        self.project_name_edit.setText(item.text())
        self.project_name_edit.setDisabled(True)
        project = dbHandler.getProject(item.text())
        self.project_desc_edit.setPlainText(project.description)
        self.project_path_edit.setText(project.path)

        properties = project.properties
        for index in range(len(properties)):
            item = QtWidgets.QTableWidgetItem()
            item.setFlags(QtCore.Qt.ItemIsEnabled)
            item.setText(properties[index])
            self.project_prop_table.setItem(index, 1, item)

        self.project_save_button.setDisabled(True)
Exemple #9
0
    def load_plugin_data(self):
        try:
            self.runsMenu.currentIndexChanged.disconnect(self.load_project_run)
        except TypeError:  #when not cennected
            pass

        self.plugin_name = self.pluginMenu.currentText()

        self.plugin_pois = dict()
        self.plugin_pois['Function'] = []
        self.plugin_pois['String'] = []
        for poi in dbHandler.getPluginPOI(self.plugin_name):
            for poi_type in self.poi_types:
                if poi.type == poi_type:
                    self.plugin_pois[poi_type].append(poi.to_dict())

        self.runsMenu.clear()
        self.run = DS.get_runs(self.project_name,
                               self.pluginMenu.currentText()) - 1
        runs = [str(run) for run in range(self.run + 1)[1:]]
        self.runsMenu.addItems(runs)
        self.runsMenu.currentIndexChanged.connect(self.load_project_run)
Exemple #10
0
 def load_projects(self):
     names = dbHandler.getAllProjects()
     for name in names:
         self.projects.append(name)
         self.project_list.addItem(name)