Initial commit

This commit is contained in:
shuaikangzhou
2023-01-11 13:04:19 +08:00
commit 06fca04187
71 changed files with 15330 additions and 0 deletions
+153
View File
@@ -0,0 +1,153 @@
# -*- coding: utf-8 -*-
"""
@File : decrypt.py
@Author : Shuaikang Zhou
@Time : 2023/1/5 18:13
@IDE : Pycharm
@Version : Python3.10
@comment : ···
"""
import hashlib
import os
import time
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from . import decryptUi
from ...DataBase import data
import xml.etree.ElementTree as ET
class DecryptControl(QWidget, decryptUi.Ui_Dialog):
DecryptSignal = pyqtSignal(str)
registerSignal = pyqtSignal(str)
def __init__(self, parent=None):
super(DecryptControl, self).__init__(parent)
self.setupUi(self)
self.setWindowTitle('解密')
self.setWindowIcon(QIcon('./app/data/icon.png'))
self.btn_db.clicked.connect(self.get_db)
self.btn_xml.clicked.connect(self.get_xml)
self.pushButton_3.clicked.connect(self.decrypt)
self.xml_path = None
self.db_path = None
# self.db_exist()
def db_exist(self):
if os.path.exists('./app/DataBase/Msg.db'):
self.btnEnterClicked()
self.close()
def get_xml(self):
self.xml_path, _ = QFileDialog.getOpenFileName(self, 'Open file', r'..', "Xml files (*.xml)")
if self.xml_path:
self.label_xml.setText('xml已就绪')
key = self.parser_xml()
self.label_key.setText(f'数据库密钥:{key}')
return self.xml_path
return False
def get_db(self):
self.db_path, _ = QFileDialog.getOpenFileName(self, 'Open file', r'..', "Database files (*.db)")
if self.db_path:
self.label_db.setText('数据库已就绪')
return self.db_path
return False
def decrypt(self):
if not (self.xml_path and self.db_path):
QMessageBox.critical(self, "错误", "请把两个文件加载进来")
return
key = self.parser_xml()
self.label_key.setText(f'数据库密钥:{key}')
self.thread1 = MyThread()
self.thread1.signal.connect(self.progressBar_view)
self.thread1.start()
self.thread2 = DecryptThread(self.db_path, key)
self.thread2.signal.connect(self.progressBar_view)
self.thread2.start()
def parser_xml(self):
if not self.xml_path:
return False
pid = self.pid(self.xml_path)
print(pid)
if not pid:
return False
key = self.key(pid)
print(key)
return key
def pid(self, xml_path):
tree = ET.parse(xml_path)
# 根节点
root = tree.getroot()
# 标签名
print('root_tag:', root.tag)
for stu in root:
if stu.attrib["name"] == '_auth_uin':
return stu.attrib['value']
return False
def key(self, uin, IMEI='1234567890ABCDEF'):
print(IMEI, uin)
m = hashlib.md5()
m.update(bytes((IMEI + uin).encode('utf-8')))
psw = m.hexdigest()
return psw[:7]
def btnEnterClicked(self):
print("enter clicked")
# 中间可以添加处理逻辑
self.DecryptSignal.emit('ok')
self.close()
def progressBar_view(self, value):
"""
进度条显示
:param value: 进度0-100
:return: None
"""
self.progressBar.setProperty('value', value)
if value == '100':
QMessageBox.information(self, "解密成功", "请退出该界面",
QMessageBox.Yes)
self.btnExitClicked()
def btnExitClicked(self):
print("Exit clicked")
self.close()
class DecryptThread(QThread):
signal = pyqtSignal(str)
def __init__(self, db_path, key):
super(DecryptThread, self).__init__()
self.db_path = db_path
self.key = key
self.textBrowser = None
def __del__(self):
pass
def run(self):
data.decrypt(self.db_path, self.key)
self.signal.emit('100')
class MyThread(QThread):
signal = pyqtSignal(str)
def __init__(self):
super(MyThread, self).__init__()
def __del__(self):
pass
def run(self):
for i in range(100):
self.signal.emit(str(i))
time.sleep(0.1)
+72
View File
@@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'decryptUi.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.label_3 = QtWidgets.QLabel(Dialog)
self.label_3.setGeometry(QtCore.QRect(110, 20, 221, 51))
font = QtGui.QFont()
font.setFamily("一纸情书")
font.setPointSize(20)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.progressBar = QtWidgets.QProgressBar(Dialog)
self.progressBar.setGeometry(QtCore.QRect(90, 260, 271, 23))
self.progressBar.setProperty("value", 50)
self.progressBar.setObjectName("progressBar")
self.label_key = QtWidgets.QLabel(Dialog)
self.label_key.setGeometry(QtCore.QRect(80, 230, 241, 20))
self.label_key.setText("")
self.label_key.setObjectName("label_key")
self.widget = QtWidgets.QWidget(Dialog)
self.widget.setGeometry(QtCore.QRect(80, 80, 245, 134))
self.widget.setObjectName("widget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.btn_xml = QtWidgets.QPushButton(self.widget)
self.btn_xml.setObjectName("btn_xml")
self.horizontalLayout.addWidget(self.btn_xml)
self.label_xml = QtWidgets.QLabel(self.widget)
self.label_xml.setObjectName("label_xml")
self.horizontalLayout.addWidget(self.label_xml)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.btn_db = QtWidgets.QPushButton(self.widget)
self.btn_db.setObjectName("btn_db")
self.horizontalLayout_2.addWidget(self.btn_db)
self.label_db = QtWidgets.QLabel(self.widget)
self.label_db.setObjectName("label_db")
self.horizontalLayout_2.addWidget(self.label_db)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.pushButton_3 = QtWidgets.QPushButton(self.widget)
self.pushButton_3.setObjectName("pushButton_3")
self.verticalLayout.addWidget(self.pushButton_3)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.label_3.setText(_translate("Dialog", "解密数据库"))
self.btn_xml.setText(_translate("Dialog", "点击加载xml文件"))
self.label_xml.setText(_translate("Dialog", "xml未就绪"))
self.btn_db.setText(_translate("Dialog", "点击加载数据库文件"))
self.label_db.setText(_translate("Dialog", "数据库未就绪"))
self.pushButton_3.setText(_translate("Dialog", "开始解密数据库"))
+119
View File
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>110</x>
<y>20</y>
<width>221</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>一纸情书</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="text">
<string>解密数据库</string>
</property>
</widget>
<widget class="QProgressBar" name="progressBar">
<property name="geometry">
<rect>
<x>90</x>
<y>260</y>
<width>271</width>
<height>23</height>
</rect>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
<widget class="QLabel" name="label_key">
<property name="geometry">
<rect>
<x>80</x>
<y>230</y>
<width>241</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>80</x>
<y>80</y>
<width>245</width>
<height>134</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="btn_xml">
<property name="text">
<string>点击加载xml文件</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_xml">
<property name="text">
<string>xml未就绪</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="btn_db">
<property name="text">
<string>点击加载数据库文件</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_db">
<property name="text">
<string>数据库未就绪</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>开始解密数据库</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>