Пример #1
0
class Ui_window(object):
    def setupUi(self, window):

        window.setObjectName("window")
        window.resize(636, 433)
        self.window = window
        self.centralwidget = QtWidgets.QWidget(window)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.outPathLineEdit = QtWidgets.QLineEdit(self.tab)
        self.outPathLineEdit.setObjectName("outPathLineEdit")
        self.gridLayout_2.addWidget(self.outPathLineEdit, 2, 2, 1, 1)
        self.inPathLabel = QtWidgets.QLabel(self.tab)
        self.inPathLabel.setAlignment(QtCore.Qt.AlignLeading
                                      | QtCore.Qt.AlignLeft
                                      | QtCore.Qt.AlignVCenter)
        self.inPathLabel.setObjectName("inPathLabel")
        self.gridLayout_2.addWidget(self.inPathLabel, 0, 0, 1, 1)
        self.outPathLabel = QtWidgets.QLabel(self.tab)
        self.outPathLabel.setObjectName("outPathLabel")
        self.gridLayout_2.addWidget(self.outPathLabel, 2, 0, 1, 1)
        self.dictPathPushButton = QtWidgets.QPushButton(self.tab)
        self.dictPathPushButton.setObjectName("dictPathPushButton")
        self.dictPathPushButton.clicked.connect(self.dictPathPushButtonEvent)
        self.gridLayout_2.addWidget(self.dictPathPushButton, 3, 3, 1, 1)
        self.dictPathLabel = QtWidgets.QLabel(self.tab)
        self.dictPathLabel.setObjectName("dictPathLabel")
        self.gridLayout_2.addWidget(self.dictPathLabel, 3, 0, 1, 1)
        self.dictPathLineEdit = QtWidgets.QLineEdit(self.tab)
        self.dictPathLineEdit.setObjectName("dictPathLineEdit")
        self.gridLayout_2.addWidget(self.dictPathLineEdit, 3, 2, 1, 1)
        self.outPathPushButton = QtWidgets.QPushButton(self.tab)
        self.outPathPushButton.setObjectName("outPathPushButton")
        self.outPathPushButton.clicked.connect(self.outPathPushButtonEvent)
        self.gridLayout_2.addWidget(self.outPathPushButton, 2, 3, 1, 1)
        self.inPathPushButton = QtWidgets.QPushButton(self.tab)
        self.inPathPushButton.setObjectName("inPathPushButton")
        self.inPathPushButton.clicked.connect(self.inPathPushButtonEvent)
        self.gridLayout_2.addWidget(self.inPathPushButton, 0, 3, 1, 1)
        self.inPathLineEdit = QtWidgets.QLineEdit(self.tab)
        self.inPathLineEdit.setObjectName("inPathLineEdit")
        self.gridLayout_2.addWidget(self.inPathLineEdit, 0, 2, 1, 1)
        self.outputLabel = QtWidgets.QLabel(self.tab)
        self.outputLabel.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.outputLabel.setTextFormat(QtCore.Qt.PlainText)
        self.outputLabel.setAlignment(QtCore.Qt.AlignLeading
                                      | QtCore.Qt.AlignLeft
                                      | QtCore.Qt.AlignTop)
        self.outputLabel.setObjectName("outputLabel")
        self.gridLayout_2.addWidget(self.outputLabel, 5, 0, 1, 3)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.startPushButton = QtWidgets.QPushButton(self.tab)
        self.startPushButton.setEnabled(True)
        self.startPushButton.setStyleSheet("background-color: green")
        self.startPushButton.setObjectName("startPushButton")
        self.startPushButton.clicked.connect(self.startPushButtonEvent)
        self.verticalLayout.addWidget(self.startPushButton)
        self.stopPushButton = QtWidgets.QPushButton(self.tab)
        self.stopPushButton.setStyleSheet("background-color: red")
        self.stopPushButton.setObjectName("stopPushButton")
        self.stopPushButton.clicked.connect(self.stopPushButtonEvent)
        self.verticalLayout.addWidget(self.stopPushButton)
        self.gridLayout_2.addLayout(self.verticalLayout, 5, 3, 1, 1)
        self.gridLayout_5 = QtWidgets.QGridLayout()
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.domainsCheckBox = QtWidgets.QCheckBox(self.tab)
        self.domainsCheckBox.setObjectName("domainsCheckBox")
        self.gridLayout_5.addWidget(self.domainsCheckBox, 1, 1, 1, 1)
        self.dictCheckBox = QtWidgets.QCheckBox(self.tab)
        self.dictCheckBox.setObjectName("dictCheckBox")
        self.gridLayout_5.addWidget(self.dictCheckBox, 2, 2, 1, 1)
        self.ip_v4CheckBox = QtWidgets.QCheckBox(self.tab)
        self.ip_v4CheckBox.setObjectName("ip_v4CheckBox")
        self.gridLayout_5.addWidget(self.ip_v4CheckBox, 0, 0, 1, 1)
        self.idNoCheckBox = QtWidgets.QCheckBox(self.tab)
        self.idNoCheckBox.setObjectName("idNoCheckBox")
        self.gridLayout_5.addWidget(self.idNoCheckBox, 0, 3, 1, 1)
        self.emailsCheckBox = QtWidgets.QCheckBox(self.tab)
        self.emailsCheckBox.setObjectName("emailsCheckBox")
        self.gridLayout_5.addWidget(self.emailsCheckBox, 1, 2, 1, 1)
        self.passwdsCheckBox = QtWidgets.QCheckBox(self.tab)
        self.passwdsCheckBox.setObjectName("passwdsCheckBox")
        self.gridLayout_5.addWidget(self.passwdsCheckBox, 1, 3, 1, 1)
        self.loginsCheckBox = QtWidgets.QCheckBox(self.tab)
        self.loginsCheckBox.setObjectName("loginsCheckBox")
        self.gridLayout_5.addWidget(self.loginsCheckBox, 2, 0, 1, 1)
        self.additionalCheckBox = QtWidgets.QCheckBox(self.tab)
        self.additionalCheckBox.setObjectName("additionalCheckBox")
        self.gridLayout_5.addWidget(self.additionalCheckBox, 2, 3, 1, 1)
        self.socialSecNoCheckBox = QtWidgets.QCheckBox(self.tab)
        self.socialSecNoCheckBox.setObjectName("socialSecNoCheckBox")
        self.gridLayout_5.addWidget(self.socialSecNoCheckBox, 0, 2, 1, 1)
        self.macCheckButton = QtWidgets.QCheckBox(self.tab)
        self.macCheckButton.setObjectName("macCheckButton")
        self.gridLayout_5.addWidget(self.macCheckButton, 1, 0, 1, 1)
        self.ip_v6CheckBox = QtWidgets.QCheckBox(self.tab)
        self.ip_v6CheckBox.setObjectName("ip_v6CheckBox")
        self.gridLayout_5.addWidget(self.ip_v6CheckBox, 0, 1, 1, 1)
        self.phoneNoCheckBox = QtWidgets.QCheckBox(self.tab)
        self.phoneNoCheckBox.setObjectName("phoneNoCheckBox")
        self.gridLayout_5.addWidget(self.phoneNoCheckBox, 2, 1, 1, 1)
        self.gridLayout_2.addLayout(self.gridLayout_5, 4, 0, 1, 4)
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_2)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.typeLabel = QtWidgets.QLabel(self.tab_2)
        self.typeLabel.setObjectName("typeLabel")
        self.verticalLayout_2.addWidget(self.typeLabel)
        self.typeListView = QtWidgets.QListView(self.tab_2)
        self.typeListView.setObjectName("typeListView")
        self.typeListView.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.verticalLayout_2.addWidget(self.typeListView)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.resultLabel = QtWidgets.QLabel(self.tab_2)
        self.resultLabel.setObjectName("resultLabel")
        self.verticalLayout_3.addWidget(self.resultLabel)
        self.resultListView = QtWidgets.QListView(self.tab_2)
        self.resultListView.setObjectName("resultListView")
        self.verticalLayout_3.addWidget(self.resultListView)
        self.horizontalLayout.addLayout(self.verticalLayout_3)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.occuranceLabel = QtWidgets.QLabel(self.tab_2)
        self.occuranceLabel.setObjectName("occuranceLabel")
        self.verticalLayout_4.addWidget(self.occuranceLabel)
        self.occuranceListView = QtWidgets.QListView(self.tab_2)
        self.occuranceListView.setObjectName("occuranceListView")
        self.verticalLayout_4.addWidget(self.occuranceListView)
        self.horizontalLayout.addLayout(self.verticalLayout_4)
        self.gridLayout_3.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_2, "")
        self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1)
        window.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(window)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 636, 21))
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        window.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(window)
        self.statusbar.setObjectName("statusbar")
        window.setStatusBar(self.statusbar)
        self.actionOpen_output = QtWidgets.QAction(window)
        self.actionOpen_output.setObjectName("actionOpen_output")
        self.actionOpen_output.triggered.connect(self.loadOutputFile)
        self.actionAbout = QtWidgets.QAction(window)
        self.actionAbout.setObjectName("actionAbout")
        self.actionAbout.triggered.connect(self.about)
        self.menuFile.addAction(self.actionOpen_output)
        self.menuFile.addAction(self.actionAbout)
        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(window)
        self.tabWidget.setCurrentIndex(0)

        self.data = {}
        self.signal = Signal()
        self.signal.updateSignal.connect(self.loadOutput)
        self.signal.finishedSignal.connect(self.loadOutput)
        self.signal.progressBarSignal.connect(self.increaseProgressbar)
        self.core = None
        self.working = False
        self.progressValue = 0
        self.progressBar.setRange(0, 100)

        QtCore.QMetaObject.connectSlotsByName(window)

    def retranslateUi(self, window):
        _translate = QtCore.QCoreApplication.translate
        window.setWindowTitle(_translate("window", "SDSE"))
        self.inPathLabel.setText(_translate("window", "Input path:"))
        self.outPathLabel.setText(_translate("window", "Output path:"))
        self.dictPathPushButton.setText(_translate("window", "Browse"))
        self.dictPathLabel.setText(_translate("window", "Dictionary path:"))
        self.outPathPushButton.setText(_translate("window", "Browse"))
        self.inPathPushButton.setText(_translate("window", "Browse"))
        self.outputLabel.setText(_translate("window", "Output"))
        self.startPushButton.setText(_translate("window", "Start"))
        self.stopPushButton.setText(_translate("window", "Stop"))
        self.domainsCheckBox.setText(_translate("window", "Domains"))
        self.dictCheckBox.setText(_translate("window", "Dictionary"))
        self.ip_v4CheckBox.setText(_translate("window", "IP v4"))
        self.idNoCheckBox.setText(_translate("window", "ID no"))
        self.emailsCheckBox.setText(_translate("window", "Emails"))
        self.passwdsCheckBox.setText(_translate("window", "Passwords"))
        self.loginsCheckBox.setText(_translate("window", "Logins"))
        self.additionalCheckBox.setText(_translate("window", "Additional"))
        self.socialSecNoCheckBox.setText(_translate("window", "Social Sec no"))
        self.macCheckButton.setText(_translate("window", "MAC"))
        self.ip_v6CheckBox.setText(_translate("window", "IP v6"))
        self.phoneNoCheckBox.setText(_translate("window", "Phone no."))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),
                                  _translate("window", "Settings"))
        self.typeLabel.setText(_translate("window", "Category:"))
        self.resultLabel.setText(_translate("window", "Results:"))
        self.occuranceLabel.setText(_translate("window", "Occurance:"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2),
                                  _translate("window", "Results"))
        self.menuFile.setTitle(_translate("window", "File"))
        self.actionOpen_output.setText(_translate("window", "Open output"))
        self.actionAbout.setText(_translate("window", "About"))

    def loadOutputFile(self):
        outputFilePath = QtWidgets.QFileDialog.getOpenFileName(
            self.window, 'Select output file')[0]
        with open(outputFilePath, 'r') as file:
            self.data = json.load(file)
        self.typeModel = QtCore.QStringListModel(self.data.keys())
        self.typeListView.setModel(self.typeModel)
        self.typeSelectionModel = self.typeListView.selectionModel()
        self.typeSelectionModel.selectionChanged.connect(
            self.typeSelectionChanged)

    def about(self):
        msgBox = QtWidgets.QMessageBox(self.window)
        msgBox.setText(
            "This program is a part of a thesis on sensitive data search\nMore information: https://github.com/maksbrz184/EngineeringThesis"
        )
        msgBox.setWindowTitle("About")
        msgBox.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
        msgBox.exec()
        pass

    def inPathPushButtonEvent(self):
        fileName = QtWidgets.QFileDialog.getOpenFileName(
            self.window, 'Select input')[0]
        if fileName:
            self.inPathLineEdit.setText(fileName)

    def outPathPushButtonEvent(self):
        fileName = QtWidgets.QFileDialog.getSaveFileName(
            self.window, 'Select output')[0]
        if fileName:
            self.outPathLineEdit.setText(fileName)

    def dictPathPushButtonEvent(self):
        fileName = QtWidgets.QFileDialog.getOpenFileName(
            self.window, 'Select input')[0]
        if fileName:
            self.dictPathLineEdit.setText(fileName)

    def progressBarEvent(self):
        self.signal.progressBarSignal.emit()

    def updateDataEvent(self):
        pass

    def finishedDataEvent(self):
        self.signal.finishedSignal.emit()

    def startPushButtonEvent(self):
        if self.working == False:

            toCheck = []
            additional = False
            if self.ip_v4CheckBox.isChecked():
                toCheck.append("ipv4")
            if self.ip_v6CheckBox.isChecked():
                toCheck.append("ipv6")
            if self.socialSecNoCheckBox.isChecked():
                toCheck.append("socialsec")
            if self.idNoCheckBox.isChecked():
                toCheck.append("id_number")
            if self.macCheckButton.isChecked():
                toCheck.append("mac")
            if self.domainsCheckBox.isChecked():
                toCheck.append("domain")
            if self.emailsCheckBox.isChecked():
                toCheck.append("email")
            if self.passwdsCheckBox.isChecked():
                toCheck.append("password")
            if self.loginsCheckBox.isChecked():
                toCheck.append("login")
            if self.phoneNoCheckBox.isChecked():
                toCheck.append("phone_number")
            if self.additionalCheckBox.isChecked():
                additional = True

            dictPath = None
            if self.dictCheckBox.isChecked():
                dictPath = self.dictPathLineEdit.text()

            self.progressValue = 0
            self.progressBar.setValue(self.progressValue)
            self.working = True

            if self.outPathLineEdit.text() == '':
                inPath = self.inPathLineEdit.text()
                self.outPathLineEdit.setText(
                    os.path.splitext(inPath)[0] + "_output.json")

            try:
                self.core = Core(self.inPathLineEdit.text(),
                                 self.outPathLineEdit.text(),
                                 expectedRegexes=toCheck,
                                 data=self.data,
                                 additional=additional,
                                 progressEvent=self.progressBarEvent,
                                 finishedEvent=self.finishedDataEvent,
                                 dictionaryPath=dictPath)

            except Exception as x:
                self.displayException(x)
                self.stopPushButtonEvent()
                return
            self.core.start()

    def stopPushButtonEvent(self):
        if self.core is not None:
            self.core.cancel = True
            self.core = None
        self.working = False
        #reset progress bar

    def displayException(self, x):
        self.outputLabel.setText("Exception occured\n" + str(x) +
                                 "\nMore information in commandline interface")
        print("-" * 15, "EXCEPTION", "-" * 15)
        print(str(x))
        print(traceback.format_exc())

    def setDebugValues(self):
        self.inPathLineEdit.setText(
            "C:/Projects/ThesisTestData/facebook/facebookDump_50000_strid.json"
        )
        self.dictPathLineEdit.setText(
            "C:/Projects/Thesis/Code/src/dictionary.txt")

    def loadDebugOutput(self):
        with open(
                "C:\\Projects\\ThesisTestData\\results\\output_facebookDump_50000.json",
                'r') as file:
            self.data = json.load(file)
        self.typeModel = QtCore.QStringListModel(self.data.keys())
        self.typeListView.setModel(self.typeModel)
        self.typeSelectionModel = self.typeListView.selectionModel()
        self.typeSelectionModel.selectionChanged.connect(
            self.typeSelectionChanged)

    def typeSelectionChanged(self, index):
        self.selectedType = self.typeSelectionModel.selection().indexes(
        )[0].data()
        self.resultModel = QtCore.QStringListModel(
            self.data[self.selectedType]['results'].keys())
        self.resultLabel.setText("Results: " +
                                 str(self.data[self.selectedType]['no']))
        self.resultListView.setModel(self.resultModel)
        self.resultSelectionModel = self.resultListView.selectionModel()
        self.resultSelectionModel.selectionChanged.connect(
            self.resultSelectionChanged)

    def resultSelectionChanged(self, index):
        self.selectedResult = self.resultSelectionModel.selection().indexes(
        )[0].data()
        self.occuranceModel = QtCore.QStringListModel(self.data[
            self.selectedType]['results'][self.selectedResult]['occurances'])
        self.occuranceLabel.setText("Occurance: " + str(
            len(self.data[self.selectedType]['results'][self.selectedResult]
                ['occurances'])))
        self.occuranceListView.setModel(self.occuranceModel)
        self.occuranceSelectionModel = self.occuranceListView.selectionModel()
        self.occuranceSelectionModel.selectionChanged.connect(
            self.occuranceSelectionChanged)

    def occuranceSelectionChanged(self, index):
        self.selectedOccurance = self.occuranceSelectionModel.selection(
        ).indexes()[0].data()
        self.inputData = json.load(
            open(self.inPathLineEdit.text(), 'r', encoding='utf-8'))
        i = 0
        self.inputIndex = 0
        for x in self.inputData["messages"]:
            if str(x["id"]) == self.selectedOccurance:
                self.inputIndex = i
                break
            i += 1
        self.dialog = QtWidgets.QDialog(self.window)
        self.Ui_previewDialog = Ui_PreviewDialog()
        self.Ui_previewDialog.setupUi(self.dialog)
        self.Ui_previewDialog.prevPushButton.clicked.connect(
            self.prevButtonEvent)
        self.Ui_previewDialog.nextPushButton.clicked.connect(
            self.nextButtonEvent)
        self.Ui_previewDialog.textBrowser.setText(
            self.inputData["messages"][self.inputIndex]["content"])
        self.dialog.show()

    def nextButtonEvent(self):
        self.inputIndex += 1
        self.Ui_previewDialog.textBrowser.setText(
            self.inputData["messages"][self.inputIndex]["content"])

    def prevButtonEvent(self):
        self.inputIndex -= 1
        self.Ui_previewDialog.textBrowser.setText(
            self.inputData["messages"][self.inputIndex]["content"])

    def increaseProgressbar(self):
        self.progressValue += 1
        if self.progressValue < 101:
            self.progressBar.setValue(self.progressValue)

    def loadOutput(self):
        self.working = False
        self.typeModel = QtCore.QStringListModel(self.data.keys())
        self.typeListView.setModel(self.typeModel)
        self.typeListView.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.typeSelectionModel = self.typeListView.selectionModel()
        self.typeSelectionModel.selectionChanged.connect(
            self.typeSelectionChanged)

    def __del__(self):
        if self.core is not None:
            self.core.cancel = True
Пример #2
0
)
parser.add_argument('-i',
                    type=str,
                    help='Path of the input file.',
                    required=True)
parser.add_argument(
    '-o',
    type=str,
    help=
    'Path of the output file. If empty the output is saved to the input path appended with "_output" suffix.'
)
parser.add_argument('-d', type=str, help='Path of the dictionary file')
parser.add_argument('-a',
                    action='store_true',
                    help='Enables additional searches.')
args = parser.parse_args()

if args.o is None:
    inPath = args.i
    args.o = os.path.splitext(inPath)[0] + "_output.json"
    print("Input path set to ", args.o)

core = Core(args.i,
            args.o,
            expectedRegexes=args.reg,
            additional=args.a,
            progressEvent=displayProgress,
            finishedEvent=displayFinished)
core.start()
core.join()