From cc059fcbfa6f215f00059fb819452366d968f17f Mon Sep 17 00:00:00 2001
From: shuaikangzhou <863909694@qq.com>
Date: Tue, 14 Nov 2023 22:52:18 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0PC=E7=AB=AF=E5=BE=AE=E4=BF=A1?=
=?UTF-8?q?=E8=A7=A3=E5=AF=86=E6=9D=A1=E4=BB=B6=E7=9A=84=E5=88=A4=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 33 ++++++++++++++++------------
app/Ui/mainview.py | 2 +-
app/Ui/pc_decrypt/decryptUi.py | 39 +++++++++++++++++----------------
app/Ui/pc_decrypt/decryptUi.ui | 19 +++++++++-------
app/Ui/pc_decrypt/pc_decrypt.py | 21 +++++++++++++-----
app/decrypt/get_wx_info.py | 10 ++++++---
6 files changed, 73 insertions(+), 51 deletions(-)
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e4a78f2..c26ddc4 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,8 +4,13 @@
-
-
+
+
+
+
+
+
+
@@ -71,7 +76,7 @@
-
+
@@ -200,8 +205,8 @@
-
+
@@ -220,13 +225,6 @@
1672848140146
-
- 1674438226232
-
-
-
- 1674438226232
-
1674438387238
@@ -563,7 +561,14 @@
1699883702806
-
+
+ 1699884085863
+
+
+
+ 1699884085863
+
+
@@ -622,9 +627,9 @@
-
-
+
+
diff --git a/app/Ui/mainview.py b/app/Ui/mainview.py
index 2b37d90..ce69bf6 100644
--- a/app/Ui/mainview.py
+++ b/app/Ui/mainview.py
@@ -7,7 +7,6 @@
@Version : Python3.10
@comment : 主窗口
"""
-
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
@@ -69,6 +68,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
# 创建右键菜单函数
def init_ui(self):
+ # self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.menubar.setStyleSheet("background-color: rgb(240, 240, 240);")
def create_rightmenu(self):
diff --git a/app/Ui/pc_decrypt/decryptUi.py b/app/Ui/pc_decrypt/decryptUi.py
index 545cf46..57a8b66 100644
--- a/app/Ui/pc_decrypt/decryptUi.py
+++ b/app/Ui/pc_decrypt/decryptUi.py
@@ -42,54 +42,55 @@ class Ui_Dialog(object):
self.label_ready = QtWidgets.QLabel(Dialog)
self.label_ready.setGeometry(QtCore.QRect(40, 260, 41, 21))
self.label_ready.setObjectName("label_ready")
- self.widget = QtWidgets.QWidget(Dialog)
- self.widget.setGeometry(QtCore.QRect(20, 50, 221, 151))
- self.widget.setObjectName("widget")
- self.gridLayout = QtWidgets.QGridLayout(self.widget)
+ self.layoutWidget = QtWidgets.QWidget(Dialog)
+ self.layoutWidget.setGeometry(QtCore.QRect(20, 50, 221, 151))
+ self.layoutWidget.setObjectName("layoutWidget")
+ self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
- self.label_wxid = QtWidgets.QLabel(self.widget)
- self.label_wxid.setText("")
- self.label_wxid.setObjectName("label_wxid")
- self.gridLayout.addWidget(self.label_wxid, 4, 1, 1, 1)
- self.label = QtWidgets.QLabel(self.widget)
+ self.label = QtWidgets.QLabel(self.layoutWidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
- self.label_2 = QtWidgets.QLabel(self.widget)
+ self.label_2 = QtWidgets.QLabel(self.layoutWidget)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
- self.label_5 = QtWidgets.QLabel(self.widget)
+ self.label_5 = QtWidgets.QLabel(self.layoutWidget)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
- self.label_4 = QtWidgets.QLabel(self.widget)
+ self.label_4 = QtWidgets.QLabel(self.layoutWidget)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
- self.label_key = QtWidgets.QLabel(self.widget)
+ self.label_key = QtWidgets.QLabel(self.layoutWidget)
self.label_key.setText("")
self.label_key.setObjectName("label_key")
self.gridLayout.addWidget(self.label_key, 5, 1, 1, 1)
- self.label_phone = QtWidgets.QLabel(self.widget)
+ self.label_phone = QtWidgets.QLabel(self.layoutWidget)
self.label_phone.setText("")
self.label_phone.setObjectName("label_phone")
self.gridLayout.addWidget(self.label_phone, 2, 1, 1, 1)
- self.label_6 = QtWidgets.QLabel(self.widget)
+ self.label_6 = QtWidgets.QLabel(self.layoutWidget)
self.label_6.setObjectName("label_6")
self.gridLayout.addWidget(self.label_6, 5, 0, 1, 1)
- self.label_pid = QtWidgets.QLabel(self.widget)
+ self.label_pid = QtWidgets.QLabel(self.layoutWidget)
self.label_pid.setText("")
self.label_pid.setObjectName("label_pid")
self.gridLayout.addWidget(self.label_pid, 0, 1, 1, 1)
- self.label_name = QtWidgets.QLabel(self.widget)
+ self.label_name = QtWidgets.QLabel(self.layoutWidget)
self.label_name.setText("")
self.label_name.setObjectName("label_name")
self.gridLayout.addWidget(self.label_name, 3, 1, 1, 1)
- self.label_7 = QtWidgets.QLabel(self.widget)
+ self.label_7 = QtWidgets.QLabel(self.layoutWidget)
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1)
- self.label_version = QtWidgets.QLabel(self.widget)
+ self.label_version = QtWidgets.QLabel(self.layoutWidget)
self.label_version.setText("")
self.label_version.setObjectName("label_version")
self.gridLayout.addWidget(self.label_version, 1, 1, 1, 1)
+ self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
+ self.lineEdit.setStyleSheet("background:transparent;border-width:0;border-style:outset")
+ self.lineEdit.setFrame(False)
+ self.lineEdit.setObjectName("lineEdit")
+ self.gridLayout.addWidget(self.lineEdit, 4, 1, 1, 1)
self.gridLayout.setColumnMinimumWidth(0, 1)
self.gridLayout.setColumnMinimumWidth(1, 2)
self.gridLayout.setRowMinimumHeight(5, 10)
diff --git a/app/Ui/pc_decrypt/decryptUi.ui b/app/Ui/pc_decrypt/decryptUi.ui
index a1096c4..fe1b558 100644
--- a/app/Ui/pc_decrypt/decryptUi.ui
+++ b/app/Ui/pc_decrypt/decryptUi.ui
@@ -102,7 +102,7 @@
未就绪
-
+
20
@@ -113,13 +113,6 @@
- -
-
-
-
-
-
-
-
@@ -197,6 +190,16 @@
+ -
+
+
+ background:transparent;border-width:0;border-style:outset
+
+
+ false
+
+
+
diff --git a/app/Ui/pc_decrypt/pc_decrypt.py b/app/Ui/pc_decrypt/pc_decrypt.py
index 6cda791..9f236f2 100644
--- a/app/Ui/pc_decrypt/pc_decrypt.py
+++ b/app/Ui/pc_decrypt/pc_decrypt.py
@@ -23,22 +23,29 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
self.btn_getinfo.clicked.connect(self.get_info)
self.btn_db_dir.clicked.connect(self.select_db_dir)
self.info = {}
+ self.lineEdit.setFocus()
self.ready = False
self.wx_dir = None
+ # @log
def get_info(self):
try:
result = get_wx_info.get_info()
+ if result == -1:
+ QMessageBox.critical(self, "错误", "请登录微信")
+ elif result == -2:
+ QMessageBox.critical(self, "错误", "微信版本不匹配\n请更新微信版本为:3.9.8.15")
# print(result)
- if result:
+ else:
self.ready = True
self.info = result[0]
self.label_key.setText(self.info['key'])
- self.label_wxid.setText(self.info['wxid'])
+ self.lineEdit.setText(self.info['wxid'])
self.label_name.setText(self.info['name'])
self.label_phone.setText(self.info['mobile'])
self.label_pid.setText(str(self.info['pid']))
self.label_version.setText(self.info['version'])
+ self.lineEdit.setFocus()
if self.wx_dir and os.path.exists(os.path.join(self.wx_dir, self.info['wxid'])):
self.label_ready.setText('已就绪')
except Exception as e:
@@ -59,14 +66,16 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
if not self.ready:
QMessageBox.critical(self, "错误", "请先获取密钥")
return
-
+ if not self.wx_dir:
+ QMessageBox.critical(self, "错误", "请先选择微信安装路径")
+ return
+ if self.lineEdit.text() == 'None':
+ QMessageBox.critical(self, "错误", "请填入wxid")
+ return
if self.ready:
if not os.path.exists(os.path.join(self.wx_dir, self.info['wxid'])):
QMessageBox.critical(self, "错误", "文件夹选择错误\n一般以WeChat Files结尾")
return
- # self.thread1 = MyThread()
- # self.thread1.signal.connect(self.progressBar_view)
- # self.thread1.start()
db_dir = os.path.join(self.wx_dir, self.info['wxid'], 'Msg')
self.thread2 = DecryptThread(db_dir, self.info['key'])
self.thread2.maxNumSignal.connect(self.setProgressBarMaxNum)
diff --git a/app/decrypt/get_wx_info.py b/app/decrypt/get_wx_info.py
index c942c14..5b1a561 100644
--- a/app/decrypt/get_wx_info.py
+++ b/app/decrypt/get_wx_info.py
@@ -12,6 +12,8 @@ import json
import psutil
from win32com.client import Dispatch
+from app.log import log
+
ReadProcessMemory = ctypes.windll.kernel32.ReadProcessMemory
void_p = ctypes.c_void_p
@@ -30,7 +32,7 @@ def get_info_wxid(h_process, address, n_size=32, address_len=8):
if ReadProcessMemory(h_process, void_p(address), array, address_len, 0) == 0: return "None"
address = int.from_bytes(array, byteorder='little') # 逆序转换为int地址(key地址)
wxid = get_info_without_key(h_process, address, n_size)
- if not wxid.startswith("wxid_"): wxid = "None"
+ # if not wxid.startswith("wxid_"): wxid = "None"
return wxid
@@ -46,6 +48,7 @@ def get_key(h_process, address, address_len=8):
# 读取微信信息(account,mobile,name,mail,wxid,key)
+@log
def read_info(version_list):
wechat_process = []
result = []
@@ -55,7 +58,7 @@ def read_info(version_list):
wechat_process.append(process)
if len(wechat_process) == 0:
- return "[-] WeChat No Run"
+ return -1
for process in wechat_process:
tmp_rd = {}
@@ -65,7 +68,7 @@ def read_info(version_list):
bias_list = version_list.get(tmp_rd['version'], None)
if not isinstance(bias_list, list):
- return f"[-] WeChat Current Version {tmp_rd['version']} Is Not Supported"
+ return -2
wechat_base_address = 0
for module in process.memory_maps(grouped=False):
@@ -97,6 +100,7 @@ def read_info(version_list):
return result
+@log
def get_info():
VERSION_LIST_PATH = "app/decrypt/version_list.json"