mirror of
https://github.com/wtc86939209/WeChatMsg110.git
synced 2026-06-14 17:49:11 +08:00
Initial commit
This commit is contained in:
@@ -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)
|
||||
@@ -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", "开始解密数据库"))
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user