Compare commits

...
162 Commits
Author SHA1 Message Date
PYDT eb541a0104 Add files via upload 2024-01-30 19:03:05 +08:00
PYDT 2063186994 Add files via upload 2024-01-28 16:20:22 +08:00
PYDT 860d571039 Delete PYAS_Function.py 2024-01-28 15:41:03 +08:00
PYDT c6d79adf9a Add files via upload 2024-01-28 15:40:44 +08:00
PYDT 5453900ba1 Add files via upload 2024-01-28 03:29:28 +08:00
PYDT 5029ff1e37 Add files via upload 2024-01-28 03:13:40 +08:00
PYDT 47fb691339 Add files via upload 2024-01-28 03:12:42 +08:00
PYDT dff9dd17bf Add files via upload 2024-01-27 11:58:36 +08:00
PYDT 5bc4a16b90 Add files via upload 2024-01-26 10:14:32 +08:00
PYDT b1918953b0 Update README.md 2024-01-26 09:35:36 +08:00
PYDT 6e89ed7007 Add files via upload 2024-01-26 09:33:16 +08:00
PYDT 744e8bc941 Add files via upload 2024-01-25 20:21:35 +08:00
PYDT 0b98ce7ffd Add files via upload 2024-01-25 20:19:27 +08:00
PYDT ca8b293b06 Delete PYAS_Function.zip 2024-01-25 18:10:50 +08:00
PYDT e28d99a257 Add files via upload 2024-01-25 18:09:58 +08:00
PYDT 488feb6108 Add files via upload 2024-01-25 16:12:47 +08:00
PYDT 6cdb106f07 Add files via upload 2024-01-24 22:58:36 +08:00
PYDT a7c5ccd27a Add files via upload 2024-01-24 22:56:15 +08:00
PYDT 136f9dbf0a Add files via upload 2024-01-24 22:47:40 +08:00
PYDT 16b45c3450 Add files via upload 2024-01-24 15:13:42 +08:00
PYDT 68330fad52 Add files via upload 2024-01-24 12:57:03 +08:00
PYDT dca167518d Add files via upload 2024-01-24 12:18:50 +08:00
PYDT bcc44422ef Add files via upload 2024-01-24 08:18:06 +08:00
PYDT e080e03466 Add files via upload 2024-01-24 07:54:57 +08:00
PYDT b6e75490de Add files via upload 2024-01-23 22:19:24 +08:00
PYDT 196c014576 Add files via upload 2024-01-23 16:58:43 +08:00
PYDT 236110df5e Update README.md 2024-01-23 12:34:58 +08:00
PYDT b2ae192056 Update README.md 2024-01-23 11:56:05 +08:00
PYDT f080969a62 Update README.md 2024-01-23 11:52:38 +08:00
PYDT 69d969898d Update README.md 2024-01-23 11:44:26 +08:00
PYDT a21a766926 Update README.md 2024-01-23 11:41:44 +08:00
PYDT f11fdb6b96 Update README.md 2024-01-23 11:34:02 +08:00
PYDT c7445df4c6 Update README.md 2024-01-23 11:07:51 +08:00
PYDT 2c45c9bc5b Update README.md 2024-01-23 11:02:53 +08:00
PYDT ae5ed27cb6 Update README.md 2024-01-23 10:57:13 +08:00
PYDT 11f9fe3c8b Add files via upload 2024-01-23 10:55:05 +08:00
PYDT e93ad3bd33 Delete PYAS_Function.7z 2024-01-23 10:54:34 +08:00
PYDT 20c26ea0a8 Add files via upload 2024-01-23 10:45:31 +08:00
PYDT 5925a80d3b Add files via upload 2024-01-22 16:19:31 +08:00
PYDT 56cb95e523 Add files via upload 2024-01-22 16:11:56 +08:00
PYDT a6e101cc5d Add files via upload 2024-01-22 12:49:46 +08:00
PYDT e8292b6f81 Add files via upload 2024-01-21 23:35:59 +08:00
PYDT 37a4392c94 Add files via upload 2024-01-21 15:49:43 +08:00
PYDT a897f75ecf Add files via upload 2024-01-20 22:16:36 +08:00
PYDT 79055d3779 Add files via upload 2024-01-19 16:31:27 +08:00
PYDT 3d39aa7f97 Delete PYAS_Function_Virus.7z 2024-01-19 11:18:58 +08:00
PYDT 2c1d09affc Delete PYAS_Function_Safe.7z 2024-01-19 11:18:42 +08:00
PYDT 4775358a79 Add files via upload 2024-01-19 11:18:28 +08:00
PYDT cb5f8e8191 Add files via upload 2024-01-19 11:10:48 +08:00
PYDT 8209b4ff01 Add files via upload 2024-01-19 11:05:39 +08:00
PYDT e110134d24 Add files via upload 2024-01-19 07:30:45 +08:00
PYDT c2248fdd49 Add files via upload 2024-01-18 16:51:36 +08:00
PYDT 58fea5b0ca Add files via upload 2024-01-18 15:29:15 +08:00
PYDT 7a36946545 Add files via upload 2024-01-18 13:00:09 +08:00
PYDT 563d9a8a36 Add files via upload 2024-01-18 12:52:17 +08:00
PYDT bdbd0617b5 Add files via upload 2024-01-18 09:04:50 +08:00
PYDT 67006d88cb Add files via upload 2024-01-17 21:39:54 +08:00
PYDT ded2083462 Add files via upload 2024-01-17 16:18:32 +08:00
PYDT 87b7d044f8 Add files via upload 2024-01-17 14:37:47 +08:00
PYDT 9781cef29b Add files via upload 2024-01-17 13:45:19 +08:00
PYDT 52c393148b Add files via upload 2024-01-17 13:33:21 +08:00
PYDT b98d617d6f Add files via upload 2024-01-16 17:00:10 +08:00
PYDT b475573e0e Add files via upload 2024-01-16 15:37:53 +08:00
PYDT ba3c85d5b2 Add files via upload 2024-01-16 10:06:13 +08:00
PYDT 410777efb3 Add files via upload 2024-01-15 22:11:42 +08:00
PYDT 0b3fb452b4 Add files via upload 2024-01-15 19:26:37 +08:00
PYDT aaff565172 Add files via upload 2024-01-15 17:13:45 +08:00
PYDT dd0786648e Add files via upload 2024-01-15 16:46:10 +08:00
PYDT e145ffa111 Add files via upload 2024-01-15 11:31:14 +08:00
PYDT b322468c1c Add files via upload 2024-01-15 11:17:40 +08:00
PYDT 992d8b909c Add files via upload 2024-01-15 09:39:53 +08:00
PYDT d5327c6370 Delete How To Use.py 2024-01-15 09:39:35 +08:00
PYDT 0d13bb5f8f Add files via upload 2024-01-15 09:39:08 +08:00
PYDT 3ad08a33a9 Add files via upload 2024-01-15 09:35:25 +08:00
PYDT 533e0ed736 Add files via upload 2024-01-15 09:15:58 +08:00
PYDT e7ba77b600 Add files via upload 2024-01-15 00:12:33 +08:00
PYDT f3b84b04f7 Add files via upload 2024-01-14 21:17:04 +08:00
PYDT f4c948aca9 Add files via upload 2024-01-13 23:01:02 +08:00
PYDT 1507f5df5a Add files via upload 2024-01-13 18:32:48 +08:00
PYDT 0562d11a71 Add files via upload 2024-01-13 13:23:35 +08:00
PYDT b3a9f5cce0 Add files via upload 2024-01-13 13:17:56 +08:00
PYDT 5974a3c85a Add files via upload 2024-01-13 13:14:37 +08:00
PYDT 78c732d2b8 Add files via upload 2024-01-13 12:42:11 +08:00
PYDT d087b2dc16 Add files via upload 2024-01-12 19:08:57 +08:00
PYDT 16c5d014aa Add files via upload 2024-01-12 10:42:34 +08:00
PYDT e661ff400f Update README.md 2024-01-12 09:53:48 +08:00
PYDT b8c8e2d04d Update README.md 2024-01-12 09:42:24 +08:00
PYDT 8fc36f2b20 Update README.md 2024-01-12 09:37:35 +08:00
PYDT 4b73a09a09 Update README.md 2024-01-12 09:26:49 +08:00
PYDT 65c4d5d5b7 Update README.md 2024-01-12 09:25:45 +08:00
PYDT 19d0702aee Update LICENSE.md 2024-01-12 09:15:08 +08:00
PYDT b74e8330de Add files via upload 2024-01-12 08:24:21 +08:00
PYDT 334b837d43 Add files via upload 2024-01-11 18:57:45 +08:00
PYDT 169cb37f08 Add files via upload 2024-01-11 18:54:52 +08:00
PYDT 8f29c3f0da Add files via upload 2024-01-11 11:26:50 +08:00
PYDT bec5cc4a04 Delete PYAS_Function.7z 2024-01-11 11:25:28 +08:00
PYDT af627ee202 Delete PYAS_Compress.py 2024-01-11 11:25:17 +08:00
PYDT 1e091a3e7c Delete PYAS_Function_Virus.7z 2024-01-11 10:23:11 +08:00
PYDT 8840da91d7 Delete PYAS_Function_Safe.7z 2024-01-11 10:22:59 +08:00
PYDT 1f4ff04ed3 Add files via upload 2024-01-11 10:22:17 +08:00
PYDT 60974e8f72 Add files via upload 2024-01-11 09:31:52 +08:00
PYDT 86f68994c2 Add files via upload 2024-01-10 09:19:18 +08:00
PYDT 21c4918486 Add files via upload 2024-01-09 08:20:17 +08:00
PYDT c6a426ec25 Add files via upload 2024-01-08 21:22:54 +08:00
PYDT db75a22c1c Add files via upload 2024-01-08 19:31:04 +08:00
PYDT 7e85d22ecd Add files via upload 2024-01-08 18:53:53 +08:00
PYDT 67adadc0a4 Add files via upload 2024-01-08 17:46:19 +08:00
PYDT 6b78562454 Add files via upload 2024-01-08 08:33:37 +08:00
PYDT 4f13afc867 Add files via upload 2024-01-07 20:06:03 +08:00
PYDT c34e8f193f Add files via upload 2024-01-06 16:53:56 +08:00
PYDT 4bcb507eae Add files via upload 2024-01-06 12:45:32 +08:00
PYDT a50d457d75 Add files via upload 2024-01-05 10:51:12 +08:00
PYDT 9f119265a9 Add files via upload 2024-01-05 10:21:49 +08:00
PYDT 0b121a624b Add files via upload 2024-01-05 09:34:07 +08:00
PYDT 0f47f5ec8f Add files via upload 2024-01-05 08:12:45 +08:00
PYDT f89896d041 Add files via upload 2024-01-04 15:47:23 +08:00
PYDT 5e335fd5e8 Add files via upload 2024-01-04 15:47:06 +08:00
PYDT fd245dec14 Add files via upload 2024-01-04 14:56:46 +08:00
PYDT 774cdc5de3 Add files via upload 2024-01-04 13:28:02 +08:00
PYDT 633cfad1a8 Add files via upload 2024-01-04 11:39:51 +08:00
PYDT cb7875c320 Add files via upload 2024-01-04 10:08:12 +08:00
PYDT 7960a57fc0 Add files via upload 2024-01-03 23:08:28 +08:00
PYDT a23f693921 Delete PYAS_Function.zip 2024-01-03 22:55:51 +08:00
PYDT c49cb8bc4a Delete PYAS_Compress.py 2024-01-03 22:55:39 +08:00
PYDT 02c425cfc0 Add files via upload 2024-01-03 11:50:11 +08:00
PYDT be96ba0a0e Add files via upload 2024-01-02 11:19:37 +08:00
PYDT df5e00977a Add files via upload 2024-01-02 07:53:56 +08:00
PYDT f055650365 Add files via upload 2024-01-02 07:21:14 +08:00
PYDT b0baddda3b Delete PYAS_Function.7z 2024-01-02 07:20:32 +08:00
PYDT 69359cba05 Delete PYAS_Function_Virus.7z 2024-01-02 00:16:56 +08:00
PYDT 8b0b29e39b Delete PYAS_Function_Safe.7z 2024-01-02 00:16:45 +08:00
PYDT 21ac50667d Add files via upload 2024-01-02 00:16:07 +08:00
PYDT b843a438ba Add files via upload 2024-01-01 03:59:04 +08:00
PYDT 441cc30c0b Add files via upload 2024-01-01 03:42:15 +08:00
PYDT 85adf5dc80 Add files via upload 2023-12-31 20:55:32 +08:00
PYDT 0c48f0981d Delete PYML.py 2023-12-31 17:30:22 +08:00
PYDT 88b646e41c Delete PYAS_Database.7z 2023-12-31 17:30:03 +08:00
PYDT dc4c3e0a99 Add files via upload 2023-12-31 17:29:47 +08:00
PYDT 262f6d55a0 Add files via upload 2023-12-29 11:22:07 +08:00
PYDT 2d68400670 Delete PYAS_Function.7z 2023-12-29 09:42:48 +08:00
PYDT 8acaae3f0d Add files via upload 2023-12-29 09:42:10 +08:00
PYDT a5cb26528f Add files via upload 2023-12-15 08:58:39 +08:00
PYDT ac2520a03f Add files via upload 2023-12-15 08:43:04 +08:00
PYDT 9c15cc7b33 Add files via upload 2023-12-14 22:49:20 +08:00
PYDT c38f460163 Add files via upload 2023-12-14 22:25:15 +08:00
PYDT 9bda8c9e77 Add files via upload 2023-12-14 15:48:01 +08:00
PYDT 558be68bad Add files via upload 2023-12-14 15:25:36 +08:00
PYDT 6b9d27ce9b Add files via upload 2023-12-14 09:57:22 +08:00
PYDT 412745eede Add files via upload 2023-12-14 09:44:59 +08:00
PYDT 91ea771af1 Add files via upload 2023-12-14 07:17:45 +08:00
PYDT 238ab03db3 Add files via upload 2023-12-14 07:16:10 +08:00
PYDT 2d63da193d Add files via upload 2023-12-13 09:31:18 +08:00
PYDT fa4c20a241 Add files via upload 2023-12-12 18:00:47 +08:00
PYDT 6294fc33d1 Add files via upload 2023-12-11 18:17:39 +08:00
PYDT c4cf48a94b Add files via upload 2023-12-11 09:12:24 +08:00
PYDT 2934c7eb57 Add files via upload 2023-12-11 07:53:44 +08:00
PYDT 46ce454105 Add files via upload 2023-12-10 18:02:52 +08:00
PYDT 9ab06a0ea9 Add files via upload 2023-12-10 12:33:37 +08:00
PYDT e6f742380a Add files via upload 2023-12-09 17:43:10 +08:00
PYDT 2686812470 Add files via upload 2023-12-09 17:01:08 +08:00
PYDT cd11b5b7b2 Add files via upload 2023-12-08 21:28:06 +08:00
PYDT aae35dc640 Add files via upload 2023-12-08 18:21:31 +08:00
11 changed files with 6370 additions and 6953 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020-2023 87owo (PYAS Security)
Copyright (c) 2020-2024 87owo (PYAS Security)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+302 -227
View File
@@ -1,11 +1,10 @@
import os, gc, sys, time, json, psutil
import hashlib, pefile, socket, msvcrt
import xml.etree.ElementTree as xmlet
import requests, pyperclip, win32file
import win32gui, win32api, win32con
import xml.etree.ElementTree as xmlet
from PYAS_Function import function_list
from PYAS_Function_Safe import function_list_safe
from PYAS_Extension import slist, alist
from PYAS_Compress import ListCompressor
from PYAS_Language import translate_dict
from PYAS_Interface import Ui_MainWindow
from threading import Thread
@@ -18,22 +17,23 @@ class MainWindow_Controller(QMainWindow):
super(MainWindow_Controller, self).__init__()
self.setAttribute(Qt.WA_TranslucentBackground)
self.setWindowFlags(Qt.FramelessWindowHint)
self.pyas = str(sys.argv[0]).replace("\\", "/")
self.pyas_version = "2.9.5"
self.pyas = sys.argv[0].replace("\\", "/")
self.dir = os.path.dirname(self.pyas)
self.pyae_version = "0000-00-00"
self.pyas_version = "3.0.2"
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.init_show_pyas()
self.init_data_base()
self.init_read_json()
self.init_tray_icon()
self.init_virus_list()
self.init_state_safe()
self.init_config_path()
self.init_config_read()
self.init_config_boot()
self.init_config_json()
self.init_config_list()
self.init_config_boot()
self.init_config_qtui()
self.init_change_lang()
self.init_theme_color()
self.init_control()
self.show_pyas_ui()
self.init_threads()
def init_threads(self):
@@ -47,44 +47,19 @@ class MainWindow_Controller(QMainWindow):
def init_tray_icon(self):
self.tray_icon = QSystemTrayIcon(self)
self.tray_icon.setIcon(QFileIconProvider().icon(QFileInfo(self.pyas)))
self.tray_icon.activated.connect(self.show_pyas_ui)
self.tray_icon.activated.connect(self.init_show_pyas)
self.tray_icon.show()
def init_config_path(self):
def init_data_base(self):
try:
if not os.path.exists("C:/ProgramData/PYAS"):
os.makedirs("C:/ProgramData/PYAS")
file_path = os.path.join(self.dir, "PYAS_Function.vdb")
if os.path.exists(file_path):
self.pe = ListCompressor()
self.pe.load_model(file_path)
self.pyae_version = self.pe.get_label()
except Exception as e:
self.bug_event(e)
def write_config(self, config):
try:
with open("C:/ProgramData/PYAS/PYAS.json", "w", encoding="utf-8") as f:
f.write(json.dumps(config, indent=4, ensure_ascii=False))
except:
pass
def init_virus_list(self):
try:
self.virus_lock = {}
self.virus_list = []
self.virus_list_ui = []
except:
pass
def init_config_list(self):
try:
self.whitelist = []
if os.path.exists("C:/ProgramData/PYAS/Whitelist.ini"):
with open("C:/ProgramData/PYAS/Whitelist.ini", "r", encoding="utf-8") as f:
self.whitelist = [line.strip() for line in f.readlines()]
self.blocklist = []
if os.path.exists("C:/ProgramData/PYAS/Blocklist.ini"):
with open("C:/ProgramData/PYAS/Blocklist.ini", "r", encoding="utf-8") as f:
self.blocklist = [line.strip() for line in f.readlines()]
except:
pass
def init_config_boot(self):
try:
with open(r"\\.\PhysicalDrive0", "r+b") as f:
@@ -94,40 +69,77 @@ class MainWindow_Controller(QMainWindow):
except:
self.mbr_value = False
def init_config_read(self):
def write_config(self, config):
try:
with open("C:/ProgramData/PYAS/PYAS.json", "w") as f:
f.write(json.dumps(config, indent=4, ensure_ascii=False))
except Exception as e:
self.bug_event(e)
def init_config_list(self):
try:
self.whitelist = []
if os.path.exists("C:/ProgramData/PYAS/Whitelist.ini"):
with open("C:/ProgramData/PYAS/Whitelist.ini", "r") as f:
self.whitelist = [line.strip() for line in f.readlines()]
self.blocklist = []
if os.path.exists("C:/ProgramData/PYAS/Blocklist.ini"):
with open("C:/ProgramData/PYAS/Blocklist.ini", "r") as f:
self.blocklist = [line.strip() for line in f.readlines()]
except:
pass
def init_read_json(self):
try:
if not os.path.exists("C:/ProgramData/PYAS"):
os.makedirs("C:/ProgramData/PYAS")
if not os.path.exists("C:/ProgramData/PYAS/PYAS.json"):
self.write_config({"language":"en_US","high_sensitivity":0,"cloud_services":1})
with open("C:/ProgramData/PYAS/PYAS.json", "r", encoding="utf-8") as f:
self.write_config({"high_sensitive":0,"cloud_services":1,
"language":"en_US","theme_color":"White","theme_custom":""})
with open("C:/ProgramData/PYAS/PYAS.json", "r") as f:
self.json = json.load(f)
except:
self.write_config({"language":"en_US","high_sensitivity":0,"cloud_services":1})
with open("C:/ProgramData/PYAS/PYAS.json", "r", encoding="utf-8") as f:
self.write_config({"high_sensitive":0,"cloud_services":1,
"language":"en_US","theme_color":"White","theme_custom":""})
with open("C:/ProgramData/PYAS/PYAS.json", "r") as f:
self.json = json.load(f)
def init_config_json(self):
self.high_sensitivity = self.json.get("high_sensitivity", 0)
if self.high_sensitivity == 1:
self.json["high_sensitive"] = self.json.get("high_sensitive", 0)
self.json["cloud_services"] = self.json.get("cloud_services", 1)
self.json["language"] = self.json.get("language", "en_US")
self.json["theme_color"] = self.json.get("theme_color", "White")
self.json["theme_custom"] = self.json.get("theme_custom", "")
if self.json["high_sensitive"] == 1:
self.ui.high_sensitivity_switch_Button.setText(self.trans("已開啟"))
self.ui.high_sensitivity_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
self.cloud_services = self.json.get("cloud_services", 1)
if self.cloud_services == 1:
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
if self.json["cloud_services"] == 1:
self.ui.cloud_services_switch_Button.setText(self.trans("已開啟"))
self.ui.cloud_services_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
self.language = self.json.get("language", "en_US")
if self.language == "zh_TW":
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
if self.json["language"] == "zh_TW":
self.ui.Language_Traditional_Chinese.setChecked(True)
elif self.language == "zh_CN":
elif self.json["language"] == "zh_CN":
self.ui.Language_Simplified_Chinese.setChecked(True)
else:
elif self.json["language"] == "en_US":
self.ui.Language_English.setChecked(True)
if self.json["theme_color"] == "White":
self.ui.Theme_White.setChecked(True)
elif self.json["theme_color"] == "Red":
self.ui.Theme_Red.setChecked(True)
elif self.json["theme_color"] == "Green":
self.ui.Theme_Green.setChecked(True)
elif self.json["theme_color"] == "Yellow":
self.ui.Theme_Yellow.setChecked(True)
elif self.json["theme_color"] == "Blue":
self.ui.Theme_Blue.setChecked(True)
elif self.json["theme_color"] == "Custom":
self.ui.Theme_Customize.setChecked(True)
def init_control(self):
self.ui.Theme_White.setChecked(True)
self.ui.Close_Button.clicked.connect(self.close)
self.ui.Minimize_Button.clicked.connect(self.showMinimized)
self.ui.Menu_Button.clicked.connect(self.show_menu)
@@ -165,7 +177,7 @@ class MainWindow_Controller(QMainWindow):
self.ui.Language_Simplified_Chinese.clicked.connect(self.init_change_lang)
self.ui.Language_English.clicked.connect(self.init_change_lang)
self.ui.Theme_White.clicked.connect(self.change_theme)
self.ui.Theme_Black.clicked.connect(self.change_theme)
self.ui.Theme_Customize.clicked.connect(self.change_theme)
self.ui.Theme_Green.clicked.connect(self.change_theme)
self.ui.Theme_Yellow.clicked.connect(self.change_theme)
self.ui.Theme_Blue.clicked.connect(self.change_theme)
@@ -229,8 +241,8 @@ class MainWindow_Controller(QMainWindow):
return text
def init_lang_text(self):
self.ui.State_title.setText(self.trans("此裝置已受到防護" if self.safe else "此裝置當前不安全"))
self.ui.Window_title.setText(self.trans(f"PYAS V{self.pyas_version}"))
self.ui.State_title.setText(self.trans("此裝置已受到防護"))
self.ui.Window_title.setText(self.trans(f"PYAS Security"))
self.ui.PYAS_CopyRight.setText(self.trans(f"Copyright© 2020-{max(int(time.strftime('%Y')), 2020)} PYAS Security"))
self.ui.State_Button.setText(self.trans(" 狀態"))
self.ui.Virus_Scan_Button.setText(self.trans(" 掃描"))
@@ -269,7 +281,7 @@ class MainWindow_Controller(QMainWindow):
self.ui.Window_Block_Button.setText(self.trans("軟體彈窗攔截"))
self.ui.Repair_System_Network_Button.setText(self.trans("系統網路修復"))
self.ui.About_Back.setText(self.trans("返回"))
self.ui.PYAS_Version.setText(self.trans(f"PYAS V{self.pyas_version}"))
self.ui.PYAS_Version.setText(self.trans(f"PYAS V{self.pyas_version} ({self.pyae_version})"))
self.ui.GUI_Made_title.setText(self.trans("介面製作:"))
self.ui.GUI_Made_Name.setText(self.trans("mtkiao"))
self.ui.Core_Made_title.setText(self.trans("核心製作:"))
@@ -290,8 +302,8 @@ class MainWindow_Controller(QMainWindow):
self.ui.Add_White_list_Button.setText(self.trans("選擇"))
self.ui.Theme_title.setText(self.trans("顯色主題"))
self.ui.Theme_illustrate.setText(self.trans("請選擇主題"))
self.ui.Theme_Customize.setText(self.trans("自定主題"))
self.ui.Theme_White.setText(self.trans("白色主題"))
self.ui.Theme_Black.setText(self.trans("黑色主題"))
self.ui.Theme_Yellow.setText(self.trans("黃色主題"))
self.ui.Theme_Red.setText(self.trans("紅色主題"))
self.ui.Theme_Green.setText(self.trans("綠色主題"))
@@ -301,30 +313,70 @@ class MainWindow_Controller(QMainWindow):
self.ui.Language_illustrate.setText(self.trans("請選擇語言"))
self.ui.License_terms_title.setText(self.trans("許可條款:"))
def init_theme_color(self):
try:
if self.json["theme_color"] == "White":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(240,240,240);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(230,230,230);}")
elif self.json["theme_color"] == "Red":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(250,230,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(250,220,220);}")
elif self.json["theme_color"] == "Yellow":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(250,250,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(250,250,220);}")
elif self.json["theme_color"] == "Green":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(230,250,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(220,250,220);}")
elif self.json["theme_color"] == "Blue":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(230,250,250);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(220,250,250);}")
elif self.json["theme_color"] == "Custom":
with open(os.path.join(self.json["theme_custom"],"Color.ini"), "r") as f:
self.themecolor = [line.strip() for line in f.readlines()]
self.ui.Window_widget.setStyleSheet(self.themecolor[0])
self.ui.Navigation_Bar.setStyleSheet(self.themecolor[1])
file = os.path.join(self.json["theme_custom"],"Check.png")
self.ui.State_icon.setPixmap(QPixmap(file))
except:
self.ui.Theme_White.setChecked(True)
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(240,240,240);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(230,230,230);}")
def read_custom_theme(self):
try:
path = str(QFileDialog.getExistingDirectory(self,self.trans("自定主題"),"C:/"))
if os.path.exists(os.path.join(path,"Color.ini")):
self.json["theme_custom"] = path
except:
pass
def change_theme(self):
if self.ui.Theme_White.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(240,240,240);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(230,230,230);}""")
elif self.ui.Theme_Black.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(230,230,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(220,220,220);}""")
self.json["theme_color"] = "White"
elif self.ui.Theme_Red.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(250,230,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(250,220,220);}""")
self.json["theme_color"] = "Red"
elif self.ui.Theme_Green.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(230,250,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(220,250,220);}""")
self.json["theme_color"] = "Green"
elif self.ui.Theme_Yellow.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(250,250,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(250,250,220);}""")
self.json["theme_color"] = "Yellow"
elif self.ui.Theme_Blue.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(230,250,250);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(220,250,250);}""")
self.json["theme_color"] = "Blue"
elif self.ui.Theme_Customize.isChecked():
self.read_custom_theme()
self.json["theme_color"] = "Custom"
self.write_config(self.json)
self.init_theme_color()
def change_animation(self,widget):
x, y = 170, widget.pos().y()
self.anim = QPropertyAnimation(widget, b"geometry")
widget.setGeometry(QRect(x - 100,y, 671,481))
widget.setGeometry(QRect(x - 100,y, 671, 481))
self.anim.setKeyValueAt(0.2, QRect(x - 60,y,671,481))
self.anim.setKeyValueAt(0.4, QRect(x - 10,y,671,481))
self.anim.setKeyValueAt(0.7, QRect(x - 3,y,671,481))
@@ -361,8 +413,8 @@ class MainWindow_Controller(QMainWindow):
self.timer.start(2)
def timeout(self):
if self.opacity.i < 1:
self.opacity.i += 0.02
if self.opacity.i <= 1:
self.opacity.i += 0.05
self.opacity.setOpacity(self.opacity.i)
else:
self.timer.stop()
@@ -371,8 +423,8 @@ class MainWindow_Controller(QMainWindow):
x, y = widget.pos().x(), widget.pos().y()
self.anim4 = QPropertyAnimation(widget, b"geometry")
self.anim4.setDuration(time)
self.anim4.setStartValue(QRect(x, y, 141, ny))
self.anim4.setEndValue(QRect(x, y, 141, ny2))
self.anim4.setStartValue(QRect(x, y, 131, ny))
self.anim4.setEndValue(QRect(x, y, 131, ny2))
self.anim4.start()
def change_animation_5(self,widget,x,y,nx,ny):
@@ -506,10 +558,10 @@ class MainWindow_Controller(QMainWindow):
rect.setHeight(rect.height()-10)
pat2.drawRoundedRect(rect, 1, 1)
def show_pyas_ui(self):
def init_show_pyas(self):
def update_opacity():
if self.pyas_opacity <= 100:
self.pyas_opacity += 1
self.pyas_opacity += 2
self.setWindowOpacity(self.pyas_opacity/100)
else:
self.timer.stop()
@@ -519,10 +571,10 @@ class MainWindow_Controller(QMainWindow):
self.timer.timeout.connect(update_opacity)
self.timer.start(2)
def hide_pyas_ui(self):
def init_hide_pyas(self):
def update_opacity():
if self.pyas_opacity >= 0:
self.pyas_opacity -= 1
self.pyas_opacity -= 2
self.setWindowOpacity(self.pyas_opacity/100)
else:
self.timer.stop()
@@ -533,11 +585,11 @@ class MainWindow_Controller(QMainWindow):
def showMinimized(self):
if self.block_window:
self.hide_pyas_ui()
self.init_hide_pyas()
self.send_notify(self.trans("PYAS 已最小化到系統托盤圖標"))
def closeEvent(self, event):
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要退出 PYAS 和所有防護嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("您確定要退出 PYAS 和所有防護嗎?"):
self.virus_scan_break()
event.accept()
else:
@@ -545,24 +597,57 @@ class MainWindow_Controller(QMainWindow):
def bug_event(self, text):
try:
print(f"[Error] {text}")
QMessageBox.critical(self,self.trans("錯誤"), text, QMessageBox.Ok)
print(f"[Error] > {text}")
QMessageBox.critical(self, "Error", str(text), QMessageBox.Ok)
except:
pass
def send_notify(self,text):
def info_event(self, text):
try:
now_time = time.strftime('%Y/%m/%d %H:%M:%S')
self.ui.State_output.append(f"[{now_time}] {text}")
self.tray_icon.showMessage(now_time, text, 5000)
print(f"[Info] > {text}")
QMessageBox.information(self, "Info", self.trans(str(text)), QMessageBox.Ok)
except:
pass
def question_event(self, text):
try:
print(f"[Quest] > {text}")
return QMessageBox.question(self, "Quest", self.trans(str(text)),QMessageBox.Yes|QMessageBox.No) == 16384
except:
return False
def send_notify(self, text):
try:
now_time = time.strftime('%Y-%m-%d %H:%M:%S')
print(f"[Notify] > [{now_time}] {text}")
self.tray_icon.showMessage(now_time, text, 5000)
QMetaObject.invokeMethod(self.ui.State_output, "append", Qt.QueuedConnection, Q_ARG(str, f"[{now_time}] {text}"))
except:
pass
def update_database(self):
try:
if self.question_event("您確定要更新數據庫嗎?"):
file_path = os.path.join(self.dir, "PYAS_Function.vdb")
response = requests.get('http://27.147.30.238:5001/database', params={"version": self.pyae_version}, timeout=5)
if response.status_code == 200:
with open(file_path, 'wb') as f:
f.write(response.content)
self.init_data_base()
self.init_lang_text()
self.info_event(f"數據庫更新成功: {self.pyae_version}")
elif response.status_code == 204:
self.info_event(f"數據庫已經是最新: {self.pyae_version}")
except Exception as e:
self.bug_event(e)
def show_menu(self):
self.WindowMenu = QMenu()
Main_Settings = QAction(self.trans("設定"),self)
Main_Update = QAction(self.trans("更新"),self)
Main_About = QAction(self.trans("關於"),self)
self.WindowMenu.addAction(Main_Settings)
self.WindowMenu.addAction(Main_Update)
self.WindowMenu.addAction(Main_About)
Qusetion = self.WindowMenu.exec_(self.ui.Menu_Button.mapToGlobal(QPoint(0, 30)))
if Qusetion == Main_About and self.ui.About_widget.isHidden():
@@ -580,67 +665,54 @@ class MainWindow_Controller(QMainWindow):
self.ui.Window_widget.raise_()
self.change_animation_3(self.ui.Setting_widget,0.5)
self.change_animation_5(self.ui.Setting_widget,10,50,831,481)
if Qusetion == Main_Update:
self.update_database()
def change_sensitive(self):
sw_state = self.ui.high_sensitivity_switch_Button.text()
if sw_state == self.trans("已開啟"):
self.high_sensitivity = 0
self.json["high_sensitivity"] = 0
self.json["high_sensitive"] = 0
self.ui.high_sensitivity_switch_Button.setText(self.trans("已關閉"))
self.ui.high_sensitivity_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
elif QMessageBox.warning(self,self.trans("警告"),self.trans("此選項可能會誤報檔案,您確定要開啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
self.high_sensitivity = 1
self.json["high_sensitivity"] = 1
QPushButton{border:none;background-color:rgb(230,230,230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220,220,220);}""")
elif self.question_event("此選項可能會誤報檔案,您確定要開啟嗎?"):
self.json["high_sensitive"] = 1
self.ui.high_sensitivity_switch_Button.setText(self.trans("已開啟"))
self.ui.high_sensitivity_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200,250,200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210,250,210);}""")
self.write_config(self.json)
def change_cloud_service(self):
sw_state = self.ui.cloud_services_switch_Button.text()
if sw_state == self.trans("已關閉"):
self.cloud_services = 1
self.json["cloud_services"] = 1
self.ui.cloud_services_switch_Button.setText(self.trans("已開啟"))
self.ui.cloud_services_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200,250,200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210,250,210);}""")
elif sw_state == self.trans("已開啟"):
self.cloud_services = 0
self.json["cloud_services"] = 0
self.ui.cloud_services_switch_Button.setText(self.trans("已關閉"))
self.ui.cloud_services_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230,230,230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220,220,220);}""")
self.write_config(self.json)
def init_state_safe(self):
try:
self.safe = True
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.State_title.setText(self.trans("此裝置已受到防護"))
except:
pass
def init_state_unsafe(self):
try:
self.safe = False
self.ui.State_icon.setPixmap(QPixmap(":/icon/Close.png"))
self.ui.State_title.setText(self.trans("此裝置當前不安全"))
except:
pass
def init_scan(self):
try:
self.ui.Virus_Scan_text.setText(self.trans("正在初始化中"))
QApplication.processEvents()
for file in self.virus_list:
self.unlock_file(file)
try:
for file in self.virus_list:
self.unlock_file(file)
except:
pass
self.scan_file = True
self.init_virus_list()
self.virus_lock = {}
self.virus_list = []
self.virus_list_ui = []
self.ui.Virus_Scan_Solve_Button.hide()
self.ui.Virus_Scan_choose_widget.hide()
self.ui.Virus_Scan_choose_Button.hide()
@@ -655,7 +727,7 @@ class MainWindow_Controller(QMainWindow):
for i in self.ui.Virus_Scan_output.selectedIndexes():
item_row = self.virus_list[i.row()]
if item_row:
pyperclip.copy(item_row)
pyperclip.copy(item_row.replace("/", "\\"))
menu = QMenu()
copyPath = menu.addAction(self.trans("複製路徑"))
copyPath.triggered.connect(lambda: copyPathFunc())
@@ -689,8 +761,9 @@ class MainWindow_Controller(QMainWindow):
self.unlock_file(file)
except:
continue
self.init_state_safe()
self.init_virus_list()
self.virus_lock = {}
self.virus_list = []
self.virus_list_ui = []
self.ui.Virus_Scan_output.clear()
self.ui.Virus_Scan_text.setText(self.trans("成功: 刪除成功"))
except Exception as e:
@@ -712,14 +785,12 @@ class MainWindow_Controller(QMainWindow):
def answer_scan(self):
try:
if self.virus_list:
self.init_state_unsafe()
self.ui.Virus_Scan_Solve_Button.show()
self.ui.Virus_Scan_Break_Button.hide()
self.ui.Virus_Scan_choose_Button.show()
text = self.trans(f"當前發現 {len(self.virus_list)} 個病毒")
else:
self.virus_scan_break()
self.init_state_safe()
text = self.trans("當前未發現病毒")
self.ui.Virus_Scan_text.setText(text)
self.send_notify(text)
@@ -776,12 +847,12 @@ class MainWindow_Controller(QMainWindow):
def start_scan(self, file):
try:
file_type = str(f".{file.split('.')[-1]}").lower()
if self.high_sensitivity and file != self.pyas:
if self.json["high_sensitive"] and file != self.pyas:
if self.api_scan(file):
self.write_scan(self.trans("惡意"),file)
elif self.pe_scan(file):
self.write_scan(self.trans("可疑"),file)
elif file_type in slist and self.sign_scan(file):
elif file_type in slist and file != self.pyas:
if self.api_scan(file):
self.write_scan(self.trans("惡意"),file)
elif self.pe_scan(file):
@@ -809,11 +880,11 @@ class MainWindow_Controller(QMainWindow):
def api_scan(self, file):
try:
if self.cloud_services == 1:
if self.json["cloud_services"] == 1:
with open(file, "rb") as f:
text = str(hashlib.md5(f.read()).hexdigest())
strBody = f'-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="md5s"\r\n\r\n{text}\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="format"\r\n\r\nXML\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="product"\r\n\r\n360zip\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="combo"\r\n\r\n360zip_main\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="v"\r\n\r\n2\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="osver"\r\n\r\n5.1\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="vk"\r\n\r\na03bc211\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="mid"\r\n\r\n8a40d9eff408a78fe9ec10a0e7e60f62\r\n-------------------------------7d83e2d7a141e--'
response = requests.post('http://qup.f.360.cn/file_health_info.php', data=strBody, timeout=3)
response = requests.post('http://qup.f.360.cn/file_health_info.php', data=strBody, timeout=5)
return response.status_code == 200 and float(xmlet.fromstring(response.text).find('.//e_level').text) > 50
return False
except:
@@ -836,31 +907,34 @@ class MainWindow_Controller(QMainWindow):
fn.append(str(func.name, "utf-8"))
except:
pass
max_vfl = []
for vfl in function_list:
QApplication.processEvents()
max_vfl.append(len(set(fn)&set(vfl))/len(set(fn)|set(vfl)))
max_sfl = []
for sfl in function_list_safe:
QApplication.processEvents()
max_sfl.append(len(set(fn)&set(sfl))/len(set(fn)|set(sfl)))
if self.high_sensitivity and max(max_vfl) == 1.0:
return True
elif max(max_vfl) - max(max_sfl) >= 0.1:
return True
if self.json["high_sensitive"]:
return self.pe.predict(fn)
elif "_CorExeMain" not in fn:
return self.pe.predict(fn)
return False
except:
return False
def proc_scan(self, pid):
try:
for entry in psutil.Process(pid).memory_maps():
file = entry.path.replace("\\", "/")
if ":/Windows" not in file and ":/Program" not in file:
if self.api_scan(file) or self.pe_scan(file):
return True
return False
except:
return False
def repair_system(self):
try:
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要修復系統檔案嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("您確定要修復系統檔案嗎?"):
self.repair_system_wallpaper()
self.repair_system_restrict()
self.repair_system_file_type()
self.repair_system_file_icon()
self.repair_system_image()
QMessageBox.information(self,self.trans("成功"),self.trans("修復系統檔案成功"),QMessageBox.Ok)
self.info_event("修復系統檔案成功")
except Exception as e:
self.bug_event(e)
@@ -954,7 +1028,8 @@ class MainWindow_Controller(QMainWindow):
try:
win32api.RegDeleteValue(key,i)
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name().replace("\\", "/"))
file = self.proc.exe().replace("\\", "/")
self.send_notify(self.trans("惡意行為攔截: ")+file)
except:
pass
win32api.RegCloseKey(key)
@@ -972,12 +1047,12 @@ class MainWindow_Controller(QMainWindow):
def clean_system(self):
try:
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要清理系統垃圾嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("您確定要清理系統垃圾嗎?"):
self.total_deleted_size = 0
self.traverse_temp(f"C:/Users/{os.getlogin()}/AppData/Local/Temp/")
self.traverse_temp(f"C:/Windows/Temp/")
self.traverse_temp(f"C:/$Recycle.Bin/")
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功清理了 {self.total_deleted_size} 位元的系統垃圾"),QMessageBox.Ok)
self.info_event(f"成功清理了 {self.total_deleted_size} 位元的系統垃圾")
except Exception as e:
self.bug_event(e)
@@ -999,40 +1074,40 @@ class MainWindow_Controller(QMainWindow):
try:
file = str(QFileDialog.getOpenFileName(self,self.trans("增加到白名單"),"C:/")[0]).replace("\\", "/")
if file and file not in self.whitelist:
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("您確定要增加到白名單嗎?"):
self.whitelist.append(file)
with open("C:/ProgramData/PYAS/Whitelist.ini", "a+", encoding="utf-8") as f:
with open("C:/ProgramData/PYAS/Whitelist.ini", "a+") as f:
f.write(f"{file}\n")
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功增加到白名單: ")+file,QMessageBox.Ok)
elif file and QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要取消增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
self.info_event(f"成功增加到白名單: "+file)
elif file and self.question_event("您確定要取消增加到白名單嗎?"):
self.whitelist.remove(file)
with open("C:/ProgramData/PYAS/Whitelist.ini", "w", encoding="utf-8") as f:
with open("C:/ProgramData/PYAS/Whitelist.ini", "w") as f:
for white_file in self.whitelist:
f.write(f'{white_file}\n')
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功取消增加到白名單: ")+file,QMessageBox.Ok)
self.info_event(f"成功取消增加到白名單: "+file)
except Exception as e:
self.bug_event(e)
def get_software_window(self):
try:
self.block_window = False
if QMessageBox.warning(self,self.trans("警告"),self.trans("請選擇要攔截的軟體彈窗"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("請選擇要攔截的軟體彈窗"):
while not self.block_window:
window_name = str(win32gui.GetWindowText(win32gui.GetForegroundWindow()))
QApplication.processEvents()
if window_name not in ["","PYAS",self.trans("警告")]:
if window_name not in self.blocklist:
if QMessageBox.warning(self,self.trans("警告"),self.trans(f"您確定要攔截 {window_name} 嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event(f"您確定要攔截 {window_name} 嗎?"):
self.blocklist.append(window_name)
with open("C:/ProgramData/PYAS/Blocklist.ini", "a+", encoding="utf-8") as f:
with open("C:/ProgramData/PYAS/Blocklist.ini", "a+") as f:
f.write(f'{window_name}\n')
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功增加到彈窗攔截: ")+window_name,QMessageBox.Ok)
elif QMessageBox.warning(self,self.trans("警告"),self.trans(f"您確定要取消攔截 {window_name} 嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
self.info_event(f"成功增加到彈窗攔截: "+window_name)
elif self.question_event(f"您確定要取消攔截 {window_name} 嗎?"):
self.blocklist.remove(window_name)
with open("C:/ProgramData/PYAS/Blocklist.ini", "w", encoding="utf-8") as f:
with open("C:/ProgramData/PYAS/Blocklist.ini", "w") as f:
for block_name in self.blocklist:
f.write(f'{block_name}\n')
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功取消彈窗攔截: ")+window_name,QMessageBox.Ok)
self.info_event(f"成功取消彈窗攔截: "+window_name)
self.block_window = True
self.block_window_init()
except Exception as e:
@@ -1053,9 +1128,9 @@ class MainWindow_Controller(QMainWindow):
def repair_network(self):
try:
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要修復系統網路嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("您確定要修復系統網路嗎?"):
os.system("netsh winsock reset")
if QMessageBox.warning(self,self.trans("警告"),self.trans("使用此選項需要重啟,您確定要重啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
if self.question_event("使用此選項需要重啟,您確定要重啟嗎?"):
os.system("shutdown -r -t 0")
except Exception as e:
self.bug_event(e)
@@ -1103,14 +1178,14 @@ class MainWindow_Controller(QMainWindow):
self.proc_protect = False
self.ui.Protection_switch_Button.setText(self.trans("已關閉"))
self.ui.Protection_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230, 230, 230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220, 220, 220);}""")
else:
self.proc_protect = True
self.ui.Protection_switch_Button.setText(self.trans("已開啟"))
self.ui.Protection_switch_Button.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
Thread(target=self.protect_proc_thread, daemon=True).start()
def protect_file_init(self):
@@ -1118,14 +1193,14 @@ class MainWindow_Controller(QMainWindow):
self.file_protect = False
self.ui.Protection_switch_Button_2.setText(self.trans("已關閉"))
self.ui.Protection_switch_Button_2.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230, 230, 230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220, 220, 220);}""")
else:
self.file_protect = True
self.ui.Protection_switch_Button_2.setText(self.trans("已開啟"))
self.ui.Protection_switch_Button_2.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
Thread(target=self.protect_file_thread, daemon=True).start()
def protect_boot_init(self):
@@ -1133,14 +1208,14 @@ class MainWindow_Controller(QMainWindow):
self.mbr_protect = False
self.ui.Protection_switch_Button_3.setText(self.trans("已關閉"))
self.ui.Protection_switch_Button_3.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230, 230, 230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220, 220, 220);}""")
else:
self.mbr_protect = True
self.ui.Protection_switch_Button_3.setText(self.trans("已開啟"))
self.ui.Protection_switch_Button_3.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
Thread(target=self.protect_boot_thread, daemon=True).start()
def protect_reg_init(self):
@@ -1148,14 +1223,14 @@ class MainWindow_Controller(QMainWindow):
self.reg_protect = False
self.ui.Protection_switch_Button_4.setText(self.trans("已關閉"))
self.ui.Protection_switch_Button_4.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230, 230, 230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220, 220, 220);}""")
else:
self.reg_protect = True
self.ui.Protection_switch_Button_4.setText(self.trans("已開啟"))
self.ui.Protection_switch_Button_4.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
Thread(target=self.protect_reg_thread, daemon=True).start()
def protect_net_init(self):
@@ -1163,14 +1238,14 @@ class MainWindow_Controller(QMainWindow):
self.net_protect = False
self.ui.Protection_switch_Button_5.setText(self.trans("已關閉"))
self.ui.Protection_switch_Button_5.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,20,20,30);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
QPushButton{border:none;background-color:rgb(230, 230, 230);border-radius: 10px;}
QPushButton:hover{background-color:rgb(220, 220, 220);}""")
else:
self.net_protect = True
self.ui.Protection_switch_Button_5.setText(self.trans("已開啟"))
self.ui.Protection_switch_Button_5.setStyleSheet("""
QPushButton{border:none;background-color:rgba(20,200,20,100);border-radius: 15px;}
QPushButton:hover{background-color:rgba(20,200,20,120);}""")
QPushButton{border:none;background-color:rgb(200, 250, 200);border-radius: 10px;}
QPushButton:hover{background-color:rgb(210, 250, 210);}""")
Thread(target=self.protect_net_thread, daemon=True).start()
def protect_proc_thread(self):
@@ -1179,52 +1254,47 @@ class MainWindow_Controller(QMainWindow):
if p.pid not in existing_processes:
existing_processes.add(p.pid)
while self.proc_protect:
time.sleep(0.05)
time.sleep(0.01)
for p in psutil.process_iter():
try:
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
if p.pid not in existing_processes and file not in self.whitelist:
if p.pid not in existing_processes:
existing_processes.add(p.pid)
psutil.Process(p.pid).suspend()
if ":/Windows" in file or ":/Program" in file:
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
if file != self.pyas and file not in self.whitelist:
psutil.Process(p.pid).suspend()
if "powershell" in name and self.api_scan(cmd[-1].split("'")[-2]):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+str(cmd[-1].split("'")[-2]))
file = cmd[-1].split("'")[-2].replace("\\", "/")
self.send_notify(self.trans("惡意腳本攔截: ")+file)
elif "cmd.exe" in name and self.api_scan(" ".join(cmd[2:])):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+str(" ".join(cmd[2:])))
elif self.sign_scan(cmd[-1]) and self.api_scan(cmd[-1]):
file = " ".join(cmd[2:]).replace("\\", "/")
self.send_notify(self.trans("惡意腳本攔截: ")+file)
elif ":/Windows" in file and self.api_scan(cmd[-1]):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+str(cmd[-1]))
elif self.api_scan(file) or self.pe_scan(file):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+file)
elif file != self.pyas and self.sign_scan(file):
self.proc = p
psutil.Process(p.pid).resume()
gc.collect()
file = cmd[-1].replace("\\", "/")
self.send_notify(self.trans("惡意軟體攔截: ")+file)
elif ":/Windows" not in file and self.proc_scan(p.pid):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+file)
elif ":/Windows" not in file and self.sign_scan(file):
self.proc = p
psutil.Process(p.pid).resume()
gc.collect()
except:
pass
def protect_file_thread(self):
hDir = win32file.CreateFile("C:/Users/",win32con.GENERIC_READ,win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE,None,win32con.OPEN_EXISTING,win32con.FILE_FLAG_BACKUP_SEMANTICS,None)
self.ransom_block = False
while self.file_protect:
for action, file in win32file.ReadDirectoryChangesW(hDir,1048576,True,win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY,None,None):
for action, file in win32file.ReadDirectoryChangesW(hDir,10485760,True,win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY,None,None):
try:
full_path = str(f"C:/Users/{file}").replace("\\", "/")
file_type = str(f".{full_path.split('.')[-1]}").lower()
if action == 2 and "/AppData/" not in full_path and file_type in alist:
if self.ransom_block:
self.proc.kill()
self.ransom_block = False
self.send_notify(self.trans("勒索軟體攔截: ")+self.proc.exe().replace("\\", "/"))
self.ransom_block = True
#elif action == 3 and "/AppData/" not in full_path and file_type in slist:
#if os.path.getsize(full_path) <= 20971520:
#if self.sign_scan(full_path) and self.api_scan(full_path):
#self.lock_file(full_path)
#self.send_notify(self.trans("惡意軟體攔截: ")+full_path)
fpath = str(f"C:/Users/{file}").replace("\\", "/")
ftype = str(f".{fpath.split('.')[-1]}").lower()
if action == 3 and ftype in slist and os.path.getsize(fpath) <= 20971520:
if self.api_scan(fpath) or self.pe_scan(fpath):
os.remove(fpath)
self.send_notify(self.trans("惡意軟體刪除: ")+fpath)
except:
pass
@@ -1235,12 +1305,14 @@ class MainWindow_Controller(QMainWindow):
with open(r"\\.\PhysicalDrive0", "r+b") as f:
if self.mbr_value[510:512] != b'\x55\xAA':
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.exe().replace("\\", "/"))
file = self.proc.exe().replace("\\", "/")
self.send_notify(self.trans("惡意行為攔截: ")+file)
elif f.read(512) != self.mbr_value:
f.seek(0)
f.write(self.mbr_value)
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.exe().replace("\\", "/"))
file = self.proc.exe().replace("\\", "/")
self.send_notify(self.trans("惡意行為攔截: ")+file)
except:
pass
@@ -1259,10 +1331,13 @@ class MainWindow_Controller(QMainWindow):
while self.net_protect:
try:
time.sleep(0.5)
local = socket.gethostbyname(socket.gethostname())
for conn in self.proc.connections():
if socket.gethostbyname(socket.gethostname()) == conn.laddr.ip:
self.proc.kill()
self.send_notify(self.trans("網路通訊攔截: ")+self.proc.exe().replace("\\", "/"))
file = self.proc.exe().replace("\\", "/")
if ":/Windows" not in file and ":/Program" not in file:
if conn.laddr.ip == local:
self.proc.kill()
self.send_notify(self.trans("網路通訊攔截: ")+file)
except:
pass
+31
View File
@@ -0,0 +1,31 @@
import json, hashlib
class ListCompressor:
def __init__(self):
self.model = {}
def save_model(self, file_name):
with open(file_name, 'w') as f:
json.dump(self.model, f)
print(f"\nModel Is Saved In {file_name}")
def load_model(self, model_data):
if isinstance(model_data, str):
with open(model_data, 'r') as f:
model_data = json.load(f)
self.model = model_data
def train_model(self, label, data):
if label not in self.model:
self.model[label] = []
for lst in data:
self.model[label].append(hashlib.md5(''.join(map(str, lst)).encode()).hexdigest()[:8])
def predict(self, new_list):
for label, items in self.model.items():
if label != 'word' and hashlib.md5(''.join(map(str, new_list)).encode()).hexdigest()[:8] in items:
return True
return False
def get_label(self):
return list(self.model.keys())[0]
BIN
View File
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
{"2024-01-30 18:57:47": ["f8eaca69", "f0f5732f", "1b02d2da", "9b83055e", "fa39258e", "ebad499a", "7e7275ce", "f9f96fde", "dc2bd521", "2e3086b1", "4cbbe367", "62a39640", "628691a4", "7feb71ad", "c8756155", "724103b9", "21bb3aef", "8b136daa", "d2668208", "5e47ce27", "55e78944", "ec90753b", "cb9e21ee", "55634643", "d1ad686f", "319e2db4", "632f4531", "ecf51f02", "57b1794e", "cf04dfb7", "68b4c29f", "776c99fe", "bafe8409", "07483ddf", "e4753bc3", "86f8c21f", "c069d7d5", "0513868a", "55433105", "a51343e5", "5dd1e0c9", "8b6a35fc", "b2c4204c", "736a55d1", "0e2d378e", "221b87e3", "62a348cf", "1f53d69f", "ac0b27eb", "bee130c7", "00b0d86d", "f1dc8325", "d1e142b8", "87074aa5", "2bd013a0", "d2528b9e", "d90657b4", "b16889df", "c21af82e", "e81da5d7", "0ae06db8", "a072f779", "6c48e028", "acf0fbaa", "846a7177", "97be1e02", "94c2d42c", "e1240e10", "ee0a9c21", "0facf2a6", "2beae172", "39ae5ad7", "6a0c7324", "f074f5b4", "e952305f", "c969fd9d", "9af5a01e", "14688765", "596a470f", "94691d9a", "f30de2e7", "191f1163", "bdcb5a86", "18b3bf16", "30739d24", "e91746a4", "36888e71", "e26dfd80", "d8261ac3", "1a5cb45a", "23191f29", "20cb7eec", "94497ba5", "ce095672", "acf3bb61", "94bff605", "aea0475c", "b6a46047", "f1ae2ce5", "f25e7c70", "4c626e62", "d4da4030", "35eeb9fc", "010bd7e6", "088b5c3d", "4e552f39", "234f232b", "be39b5c7", "4d57d439", "3efc231b", "e3e0254f", "cf88078b", "957e7561", "0157ab1a", "6d75bcaa", "fdf069cb", "a1895d33", "aebc3614", "43d61eab", "967929f9", "11b631fb", "fbe63639", "0593e9a2", "c838e850", "a33c2ab4", "fa8ceeae", "71fa160a", "05178537", "f1bde64f", "30547b8f", "7fe931dd", "5dea0cda", "af0d6ebb", "f242ebc1", "ef2ac9f8", "09082309", "85a4b8a4", "65284f49", "cf215013", "6be2182a", "39d583d4", "e65f4785", "3cbb09cf", "73b78451", "61099a43", "1fe35f2e", "690b5995", "19d85999", "fcaa2063", "522ec9f6", "dfea1c9a", "1e54fc8c", "3d19c3b6", "13102764", "f0949aca", "7782a5e0", "a141f55e", "16eb1d17", "f14e284b", "3c36ae8e", "44349994", "0077b966", "8d8e66bb", "26dbaaa7", "69134125", "6be14646", "d4afaff6", "10c1954f", "07687215", "18b6668e", "295e94f1", "4beef072", "15bbc35a", "833b1998", "b81c15eb", "d0c36eb5", "30ff5635", "23edb694", "b5f2dd11", "9542f014", "2ba7934b", "8ac3e370", "be5348af", "2f7ca0b7", "c11f9756", "72646e9e", "ebaa875f", "d8efdadd", "cea3f4a5", "8f74e253", "c8ee6a44", "29a60790", "b6ed92dc", "022ab8d8", "f45011dd", "5606be13", "9fe86003", "c90d1128", "7bf6f523", "5dc456d1", "d41f3fb7", "839f31ff", "72e25499", "d0008616", "d6d13cfd", "018b8805", "3bd56a87", "7bf71a77", "302c6754", "639a51eb", "3025c6b7", "b233ddd9", "9297a1cb", "c10f2cf6", "a0a8dfd1", "6399f135", "8d394492", "d786ef37", "f516133b", "b71b7a0d", "a51484ee", "b6ec2abf", "184ccf63", "6cc57095", "897e3a5f", "5064bd10", "0abbe6f4", "57d2bb57", "3e3a904e", "cb25c53f", "35ebf1ea", "ec883603", "6c3d2e9a", "cd48542a", "e0b6a475", "1ed5d4af", "5cfe1ec3", "2f3f077c", "817d5bcb", "e7e4805a", "a8ac4be7", "3ae3b681", "781b603d", "99e3aca7", "d3cb5549", "e4e549d2", "eda8c8fd", "5a34fc94", "35385307", "b47d2a97", "8c0d1b23", "5529b024", "068c506c", "41858343", "861a909a", "96471e95", "a2b9d78f", "97255487", "506d0366", "7c5e3180", "e1aee43f", "99ad8db1", "1f4f4ab1", "cc431464", "cffd3e92", "ece85b50", "de6d3489", "9425f525", "c9dfa23f", "a97155f3", "002e23f2", "d440e8ed", "08798831", "96474097", "34962f83", "979532a1", "31f03b48", "5b692416", "c56d5e02", "5c2a1c1e", "6d642743", "fb15345a", "1bf7af93", "bb94e602", "4492b29b", "355885b6", "1e62932b", "f1bede8b", "6104f9a3", "86a6529d", "971f7f79", "8ace816a", "86a8a864", "4f85c567", "333b7df1", "cebe043f", "aa818d5e", "5458e526", "5354fc59", "14238173", "4794d596", "bd2797bd", "7e5013a9", "4211942c", "8c919cb4", "39bae570", "c8476924", "59d0bcc8", "29a47420", "62145122", "0b95337c", "55cd1300", "6fec3fac", "7abd0227", "ec842bbb", "f60b523e", "8ec73106", "e29225d6", "54224ade", "d722b746", "9342c1e3", "ce494c91", "4c1e1a2e", "20879280", "1c623712", "0ab6b9b5", "3cbe70c8", "090a5016", "1176c81f", "c4ca6358", "0ac1e588", "327018cc", "1aa3b54f", "9d8ed7e1", "98ecee4c", "1250f47d", "b48f6dcc", "2fd8a8a8", "df5292b9", "43ca2196", "eabebfd0", "5ef75e18", "6043426b", "5668ab16", "5694217b", "8da2c149", "8e108bc2", "4c44a17c", "ccdbc95c", "d578162e", "a828b92d", "226217c3", "5008e44f", "6ff4ce20", "10f2a2b1", "ee6b50e6", "1bc9bab0", "a69a2aba", "9dbfcd08", "539bc501", "640f2927", "e7e38d5e", "43adb03a", "7033ad33", "a98e1d1d", "19c928b8", "20fcecfd", "2038f57b", "1938493f", "47a32506", "6aa98b23", "051020bf", "4f5a3b25", "34d7276a", "79f68a23", "5b28a176", "15826bb9", "6a2eaaab", "23269a41", "79d85fa6", "51fe1954", "8f737801", "44dde6a5", "f8b69084", "136c1369", "086c7679", "0016c379", "2fe5822d", "1b146d77", "ff778b87", "6357bd68", "95840477", "c605b02a", "d9e4a2da", "1488771c", "1d067fed", "6c1c79f2", "4ce7e503", "c0d7b8fb", "ef0a1059", "f8984bae", "c9f98890", "f4eb7828", "5e570d46", "9ea12215", "de09d16e", "a470767a", "8c43a7fe", "65f145c0", "e425c385", "51453f5f", "fbca4af8", "5f213b95", "a6e2669f", "0d8e3Line truncated
Binary file not shown.
+221 -237
View File
@@ -29,6 +29,7 @@ class Ui_MainWindow(object):
self.centralwidget.setObjectName("centralwidget")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(0, 0, 851, 541))
self.widget.setStyleSheet("")
self.widget.setObjectName("widget")
self.Protection_widget = QtWidgets.QWidget(self.widget)
self.Protection_widget.setGeometry(QtCore.QRect(170, 50, 671, 481))
@@ -37,7 +38,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Protection_widget.setFont(font)
self.Protection_widget.setStyleSheet("background-color:rgba(255, 255, 255,240);")
self.Protection_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Protection_widget.setObjectName("Protection_widget")
self.Real_time_Protection_widget = QtWidgets.QWidget(self.Protection_widget)
self.Real_time_Protection_widget.setGeometry(QtCore.QRect(40, 10, 591, 91))
@@ -87,13 +88,14 @@ class Ui_MainWindow(object):
self.Protection_switch_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Protection_switch_Button.setIconSize(QtCore.QSize(16, 16))
self.Protection_switch_Button.setCheckable(False)
self.Protection_switch_Button.setObjectName("Protection_switch_Button")
@@ -145,13 +147,14 @@ class Ui_MainWindow(object):
self.Protection_switch_Button_2.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Protection_switch_Button_2.setIconSize(QtCore.QSize(16, 16))
self.Protection_switch_Button_2.setCheckable(False)
self.Protection_switch_Button_2.setObjectName("Protection_switch_Button_2")
@@ -201,13 +204,14 @@ class Ui_MainWindow(object):
self.Protection_switch_Button_3.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Protection_switch_Button_3.setIconSize(QtCore.QSize(16, 16))
self.Protection_switch_Button_3.setCheckable(False)
self.Protection_switch_Button_3.setObjectName("Protection_switch_Button_3")
@@ -257,13 +261,14 @@ class Ui_MainWindow(object):
self.Protection_switch_Button_4.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Protection_switch_Button_4.setIconSize(QtCore.QSize(16, 16))
self.Protection_switch_Button_4.setCheckable(False)
self.Protection_switch_Button_4.setObjectName("Protection_switch_Button_4")
@@ -313,13 +318,14 @@ class Ui_MainWindow(object):
self.Protection_switch_Button_5.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Protection_switch_Button_5.setIconSize(QtCore.QSize(16, 16))
self.Protection_switch_Button_5.setCheckable(False)
self.Protection_switch_Button_5.setObjectName("Protection_switch_Button_5")
@@ -330,14 +336,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Navigation_Bar.setFont(font)
self.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar\n"
"{\n"
" background-color:rgb(230, 230, 230);\n"
" border-top-right-radius:2px;\n"
" border-bottom-right-radius:2px;\n"
"}\n"
"\n"
"")
self.Navigation_Bar.setStyleSheet("background-color: rgb(230, 230, 230);")
self.Navigation_Bar.setObjectName("Navigation_Bar")
self.verticalLayoutWidget = QtWidgets.QWidget(self.Navigation_Bar)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 161, 481))
@@ -365,8 +364,8 @@ class Ui_MainWindow(object):
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" border-top-left-radius:15px;\n"
" border-bottom-left-radius:15px;\n"
" border-top-left-radius:10px;\n"
" border-bottom-left-radius:10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
@@ -376,7 +375,8 @@ class Ui_MainWindow(object):
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(255, 255, 255,110);\n"
"}")
"}\n"
"")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/icon/State.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.State_Button.setIcon(icon1)
@@ -403,8 +403,8 @@ class Ui_MainWindow(object):
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" border-top-left-radius:15px;\n"
" border-bottom-left-radius:15px;\n"
" border-top-left-radius:10px;\n"
" border-bottom-left-radius:10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
@@ -414,7 +414,8 @@ class Ui_MainWindow(object):
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(255, 255, 255,110);\n"
"}")
"}\n"
"")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/icon/Scan.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.Virus_Scan_Button.setIcon(icon2)
@@ -444,8 +445,8 @@ class Ui_MainWindow(object):
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" border-top-left-radius:15px;\n"
" border-bottom-left-radius:15px;\n"
" border-top-left-radius:10px;\n"
" border-bottom-left-radius:10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
@@ -455,7 +456,8 @@ class Ui_MainWindow(object):
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(255, 255, 255,110);\n"
"}")
"}\n"
"")
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/icon/Tool.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.Tools_Button.setIcon(icon3)
@@ -482,8 +484,8 @@ class Ui_MainWindow(object):
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" border-top-left-radius:15px;\n"
" border-bottom-left-radius:15px;\n"
" border-top-left-radius:10px;\n"
" border-bottom-left-radius:10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
@@ -493,7 +495,8 @@ class Ui_MainWindow(object):
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(255, 255, 255,110);\n"
"}")
"}\n"
"")
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(":/icon/Protect.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.Protection_Button.setIcon(icon4)
@@ -526,7 +529,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Virus_Scan_widget.setFont(font)
self.Virus_Scan_widget.setStyleSheet("background-color:rgba(255, 255, 255,240);")
self.Virus_Scan_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Virus_Scan_widget.setObjectName("Virus_Scan_widget")
self.Virus_Scan_title = QtWidgets.QLabel(self.Virus_Scan_widget)
self.Virus_Scan_title.setGeometry(QtCore.QRect(45, 30, 281, 41))
@@ -550,7 +553,7 @@ class Ui_MainWindow(object):
self.Virus_Scan_text.setWordWrap(True)
self.Virus_Scan_text.setObjectName("Virus_Scan_text")
self.Virus_Scan_choose_Button = QtWidgets.QPushButton(self.Virus_Scan_widget)
self.Virus_Scan_choose_Button.setGeometry(QtCore.QRect(480, 35, 141, 31))
self.Virus_Scan_choose_Button.setGeometry(QtCore.QRect(490, 35, 131, 31))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -565,16 +568,8 @@ class Ui_MainWindow(object):
self.Virus_Scan_choose_Button.setTabletTracking(False)
self.Virus_Scan_choose_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Virus_Scan_choose_Button.setLayoutDirection(QtCore.Qt.LeftToRight)
self.Virus_Scan_choose_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(100,200,100,200);\n"
" border-radius: 3px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(100,220,100,200);\n"
"}")
self.Virus_Scan_choose_Button.setStyleSheet("QPushButton{border:none;background-color:rgb(190,250,190);border-radius: 10px;}QPushButton:hover{background-color:rgb(200,250,200);}\n"
"")
self.Virus_Scan_choose_Button.setIconSize(QtCore.QSize(10, 10))
self.Virus_Scan_choose_Button.setCheckable(False)
self.Virus_Scan_choose_Button.setAutoRepeat(False)
@@ -585,16 +580,19 @@ class Ui_MainWindow(object):
self.Virus_Scan_choose_Button.setFlat(False)
self.Virus_Scan_choose_Button.setObjectName("Virus_Scan_choose_Button")
self.Virus_Scan_choose_widget = QtWidgets.QWidget(self.Virus_Scan_widget)
self.Virus_Scan_choose_widget.setGeometry(QtCore.QRect(480, 67, 141, 31))
self.Virus_Scan_choose_widget.setGeometry(QtCore.QRect(490, 67, 131, 31))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.Virus_Scan_choose_widget.sizePolicy().hasHeightForWidth())
self.Virus_Scan_choose_widget.setSizePolicy(sizePolicy)
self.Virus_Scan_choose_widget.setStyleSheet("background-color:rgba(200, 200, 200,200);")
self.Virus_Scan_choose_widget.setStyleSheet("QWidget {\n"
" background-color: rgb(230, 230, 230);\n"
" border-radius: 10px;\n"
" }")
self.Virus_Scan_choose_widget.setObjectName("Virus_Scan_choose_widget")
self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.Virus_Scan_choose_widget)
self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(0, 0, 141, 101))
self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(0, 0, 131, 101))
self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
self.Virus_Scan_choose_verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
self.Virus_Scan_choose_verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
@@ -616,17 +614,18 @@ class Ui_MainWindow(object):
self.File_Scan_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 5px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(50, 50, 50,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(50, 50, 50,90);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.File_Scan_Button.setIconSize(QtCore.QSize(16, 16))
self.File_Scan_Button.setCheckable(False)
self.File_Scan_Button.setObjectName("File_Scan_Button")
@@ -646,17 +645,18 @@ class Ui_MainWindow(object):
self.Path_Scan_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 5px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(50, 50, 50,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(50, 50, 50,90);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Path_Scan_Button.setIconSize(QtCore.QSize(16, 16))
self.Path_Scan_Button.setCheckable(False)
self.Path_Scan_Button.setObjectName("Path_Scan_Button")
@@ -676,23 +676,24 @@ class Ui_MainWindow(object):
self.Disk_Scan_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 5px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(50, 50, 50,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(50, 50, 50,90);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Disk_Scan_Button.setIconSize(QtCore.QSize(16, 16))
self.Disk_Scan_Button.setCheckable(False)
self.Disk_Scan_Button.setObjectName("Disk_Scan_Button")
self.Virus_Scan_choose_verticalLayout.addWidget(self.Disk_Scan_Button)
self.Virus_Scan_Solve_Button = QtWidgets.QPushButton(self.Virus_Scan_widget)
self.Virus_Scan_Solve_Button.setGeometry(QtCore.QRect(330, 35, 141, 31))
self.Virus_Scan_Solve_Button.setGeometry(QtCore.QRect(350, 35, 131, 31))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -707,16 +708,8 @@ class Ui_MainWindow(object):
self.Virus_Scan_Solve_Button.setTabletTracking(False)
self.Virus_Scan_Solve_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Virus_Scan_Solve_Button.setLayoutDirection(QtCore.Qt.LeftToRight)
self.Virus_Scan_Solve_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(230,70,70,200);\n"
" border-radius: 3px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(255,70,70,200);\n"
"}")
self.Virus_Scan_Solve_Button.setStyleSheet("QPushButton{border:none;background-color:rgb(250,190,190);border-radius: 10px;}QPushButton:hover{background-color:rgb(250,200,200);}\n"
"")
self.Virus_Scan_Solve_Button.setIconSize(QtCore.QSize(10, 10))
self.Virus_Scan_Solve_Button.setCheckable(False)
self.Virus_Scan_Solve_Button.setAutoRepeat(False)
@@ -727,7 +720,7 @@ class Ui_MainWindow(object):
self.Virus_Scan_Solve_Button.setFlat(False)
self.Virus_Scan_Solve_Button.setObjectName("Virus_Scan_Solve_Button")
self.Virus_Scan_Break_Button = QtWidgets.QPushButton(self.Virus_Scan_widget)
self.Virus_Scan_Break_Button.setGeometry(QtCore.QRect(480, 35, 141, 31))
self.Virus_Scan_Break_Button.setGeometry(QtCore.QRect(490, 35, 131, 31))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -742,16 +735,8 @@ class Ui_MainWindow(object):
self.Virus_Scan_Break_Button.setTabletTracking(False)
self.Virus_Scan_Break_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Virus_Scan_Break_Button.setLayoutDirection(QtCore.Qt.LeftToRight)
self.Virus_Scan_Break_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(230,70,70,200);\n"
" border-radius: 3px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(255,70,70,200);\n"
"}")
self.Virus_Scan_Break_Button.setStyleSheet("QPushButton{border:none;background-color:rgb(250,190,190);border-radius: 10px;}QPushButton:hover{background-color:rgb(250,200,200);}\n"
"")
self.Virus_Scan_Break_Button.setIconSize(QtCore.QSize(10, 10))
self.Virus_Scan_Break_Button.setCheckable(False)
self.Virus_Scan_Break_Button.setAutoRepeat(False)
@@ -800,6 +785,13 @@ class Ui_MainWindow(object):
self.Virus_Scan_output.setUniformItemSizes(False)
self.Virus_Scan_output.setSelectionRectVisible(False)
self.Virus_Scan_output.setObjectName("Virus_Scan_output")
self.Virus_Scan_title.raise_()
self.Virus_Scan_text.raise_()
self.Virus_Scan_choose_widget.raise_()
self.Virus_Scan_Solve_Button.raise_()
self.Virus_Scan_output.raise_()
self.Virus_Scan_Break_Button.raise_()
self.Virus_Scan_choose_Button.raise_()
self.State_widget = QtWidgets.QWidget(self.widget)
self.State_widget.setGeometry(QtCore.QRect(170, 49, 671, 481))
font = QtGui.QFont()
@@ -807,7 +799,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.State_widget.setFont(font)
self.State_widget.setStyleSheet("background-color:rgb(255, 255, 255);")
self.State_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.State_widget.setObjectName("State_widget")
self.State_title = QtWidgets.QLabel(self.State_widget)
self.State_title.setGeometry(QtCore.QRect(50, 210, 571, 41))
@@ -823,14 +815,24 @@ class Ui_MainWindow(object):
self.State_title.setAlignment(QtCore.Qt.AlignCenter)
self.State_title.setObjectName("State_title")
self.State_icon = QtWidgets.QLabel(self.State_widget)
self.State_icon.setGeometry(QtCore.QRect(250, 30, 171, 171))
self.State_icon.setGeometry(QtCore.QRect(240, 20, 191, 191))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.State_icon.sizePolicy().hasHeightForWidth())
self.State_icon.setSizePolicy(sizePolicy)
self.State_icon.setMinimumSize(QtCore.QSize(0, 171))
self.State_icon.setMaximumSize(QtCore.QSize(16777215, 16777215))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(1)
font.setStrikeOut(False)
font.setKerning(True)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.State_icon.setFont(font)
self.State_icon.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.State_icon.setToolTip("")
self.State_icon.setStyleSheet("")
self.State_icon.setFrameShape(QtWidgets.QFrame.NoFrame)
self.State_icon.setLineWidth(1)
self.State_icon.setText("")
@@ -853,6 +855,8 @@ class Ui_MainWindow(object):
self.State_output.setFont(font)
self.State_output.setAutoFillBackground(False)
self.State_output.setStyleSheet("")
self.State_output.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.State_output.setFrameShadow(QtWidgets.QFrame.Sunken)
self.State_output.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.State_output.setUndoRedoEnabled(True)
self.State_output.setTextInteractionFlags(QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
@@ -876,7 +880,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.About_widget.setFont(font)
self.About_widget.setStyleSheet("background-color:rgba(255, 255, 255,255);")
self.About_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.About_widget.setObjectName("About_widget")
self.About_Back = QtWidgets.QPushButton(self.About_widget)
self.About_Back.setGeometry(QtCore.QRect(20, 10, 101, 41))
@@ -891,17 +895,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.About_Back.setFont(font)
self.About_Back.setFocusPolicy(QtCore.Qt.StrongFocus)
self.About_Back.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" color:rgba(60,60,60,200);\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" color:rgba(60,60,60,255);\n"
"}\n"
"")
self.About_Back.setStyleSheet("QPushButton{border:none; background-color:rgba(0,0,0,0); color:rgba(60,60,60,200);} QPushButton:hover{ color:rgba(60,60,60,255);}")
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(":/icon/Back.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.About_Back.setIcon(icon5)
@@ -1026,7 +1020,13 @@ class Ui_MainWindow(object):
font.setPointSize(11)
self.License_terms.setFont(font)
self.License_terms.setStyleSheet("")
self.License_terms.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.License_terms.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.License_terms.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.License_terms.setTabChangesFocus(False)
self.License_terms.setLineWrapColumnOrWidth(0)
self.License_terms.setReadOnly(True)
self.License_terms.setOverwriteMode(False)
self.License_terms.setObjectName("License_terms")
self.License_terms_title = QtWidgets.QLabel(self.About_widget)
self.License_terms_title.setGeometry(QtCore.QRect(45, 260, 581, 31))
@@ -1046,10 +1046,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Window_widget.setFont(font)
self.Window_widget.setStyleSheet("QWidget#Window_widget\n"
"{\n"
"background-color:rgb(240, 240, 240);\n"
"}")
self.Window_widget.setStyleSheet("background-color: rgb(240, 240, 240);")
self.Window_widget.setObjectName("Window_widget")
self.Close_Button = QtWidgets.QPushButton(self.Window_widget)
self.Close_Button.setGeometry(QtCore.QRect(790, 5, 31, 31))
@@ -1172,7 +1169,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Process_widget.setFont(font)
self.Process_widget.setStyleSheet("background-color:rgba(255, 255, 255,240);")
self.Process_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Process_widget.setObjectName("Process_widget")
self.Process_Tools_Back = QtWidgets.QPushButton(self.Process_widget)
self.Process_Tools_Back.setGeometry(QtCore.QRect(20, 10, 101, 41))
@@ -1187,17 +1184,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Process_Tools_Back.setFont(font)
self.Process_Tools_Back.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Process_Tools_Back.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" color:rgba(60,60,60,200);\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" color:rgba(60,60,60,255);\n"
"}\n"
"")
self.Process_Tools_Back.setStyleSheet("QPushButton{border:none; background-color:rgba(0,0,0,0); color:rgba(60,60,60,200);} QPushButton:hover{ color:rgba(60,60,60,255);}")
self.Process_Tools_Back.setIcon(icon5)
self.Process_Tools_Back.setIconSize(QtCore.QSize(20, 20))
self.Process_Tools_Back.setCheckable(False)
@@ -1265,7 +1252,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Tools_widget.setFont(font)
self.Tools_widget.setStyleSheet("background-color:rgba(255, 255, 255,240);")
self.Tools_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Tools_widget.setObjectName("Tools_widget")
self.More_Tools_Back_Button = QtWidgets.QPushButton(self.Tools_widget)
self.More_Tools_Back_Button.setGeometry(QtCore.QRect(20, 10, 101, 41))
@@ -1280,13 +1267,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.More_Tools_Back_Button.setFont(font)
self.More_Tools_Back_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
self.More_Tools_Back_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" color:rgba(60,60,60,200);\n"
"}\n"
"")
self.More_Tools_Back_Button.setStyleSheet("QPushButton{border:none; background-color:rgba(0,0,0,0); color:rgba(60,60,60,200);} QPushButton:hover{ color:rgba(60,60,60,255);}")
self.More_Tools_Back_Button.setIconSize(QtCore.QSize(20, 20))
self.More_Tools_Back_Button.setCheckable(False)
self.More_Tools_Back_Button.setObjectName("More_Tools_Back_Button")
@@ -1312,17 +1293,18 @@ class Ui_MainWindow(object):
self.System_Process_Manage_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(20,20,20,70);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.System_Process_Manage_Button.setIconSize(QtCore.QSize(16, 16))
self.System_Process_Manage_Button.setCheckable(False)
self.System_Process_Manage_Button.setObjectName("System_Process_Manage_Button")
@@ -1342,17 +1324,18 @@ class Ui_MainWindow(object):
self.Clean_System_Files_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(20,20,20,70);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Clean_System_Files_Button.setIconSize(QtCore.QSize(16, 16))
self.Clean_System_Files_Button.setCheckable(False)
self.Clean_System_Files_Button.setObjectName("Clean_System_Files_Button")
@@ -1372,17 +1355,18 @@ class Ui_MainWindow(object):
self.Repair_System_Files_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(20,20,20,70);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Repair_System_Files_Button.setIconSize(QtCore.QSize(16, 16))
self.Repair_System_Files_Button.setCheckable(False)
self.Repair_System_Files_Button.setObjectName("Repair_System_Files_Button")
@@ -1402,17 +1386,18 @@ class Ui_MainWindow(object):
self.Repair_System_Network_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(20,20,20,70);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Repair_System_Network_Button.setIconSize(QtCore.QSize(16, 16))
self.Repair_System_Network_Button.setCheckable(False)
self.Repair_System_Network_Button.setObjectName("Repair_System_Network_Button")
@@ -1432,25 +1417,22 @@ class Ui_MainWindow(object):
self.Window_Block_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
" background-color:rgb(220,220,220);\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
" background-color:rgba(20,20,20,70);\n"
"}")
" background-color:rgb(230,230,230);\n"
"}\n"
"")
self.Window_Block_Button.setIconSize(QtCore.QSize(16, 16))
self.Window_Block_Button.setCheckable(False)
self.Window_Block_Button.setObjectName("Window_Block_Button")
self.System_verticalLayout.addWidget(self.Window_Block_Button)
self.widget_2 = QtWidgets.QWidget(self.widget)
self.widget_2.setGeometry(QtCore.QRect(170, 50, 671, 481))
self.widget_2.setStyleSheet("background-color:rgb(255, 255, 255);")
self.widget_2.setObjectName("widget_2")
self.Setting_widget = QtWidgets.QWidget(self.widget)
self.Setting_widget.setGeometry(QtCore.QRect(10, 50, 831, 481))
font = QtGui.QFont()
@@ -1458,7 +1440,7 @@ class Ui_MainWindow(object):
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Setting_widget.setFont(font)
self.Setting_widget.setStyleSheet("background-color:rgba(255, 255, 255,255);")
self.Setting_widget.setStyleSheet("background-color: rgb(255, 255, 255);")
self.Setting_widget.setObjectName("Setting_widget")
self.Show_high_sensitivity = QtWidgets.QWidget(self.Setting_widget)
self.Show_high_sensitivity.setGeometry(QtCore.QRect(30, 50, 781, 81))
@@ -1505,13 +1487,14 @@ class Ui_MainWindow(object):
self.high_sensitivity_switch_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.high_sensitivity_switch_Button.setIconSize(QtCore.QSize(16, 16))
self.high_sensitivity_switch_Button.setCheckable(False)
self.high_sensitivity_switch_Button.setObjectName("high_sensitivity_switch_Button")
@@ -1559,6 +1542,14 @@ class Ui_MainWindow(object):
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.Language_English = QtWidgets.QRadioButton(self.gridLayoutWidget)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Language_English.setFont(font)
self.Language_English.setObjectName("Language_English")
self.gridLayout.addWidget(self.Language_English, 1, 2, 1, 1)
self.Language_Traditional_Chinese = QtWidgets.QRadioButton(self.gridLayoutWidget)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
@@ -1575,14 +1566,6 @@ class Ui_MainWindow(object):
self.Language_Simplified_Chinese.setFont(font)
self.Language_Simplified_Chinese.setObjectName("Language_Simplified_Chinese")
self.gridLayout.addWidget(self.Language_Simplified_Chinese, 1, 1, 1, 1)
self.Language_English = QtWidgets.QRadioButton(self.gridLayoutWidget)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Language_English.setFont(font)
self.Language_English.setObjectName("Language_English")
self.gridLayout.addWidget(self.Language_English, 1, 2, 1, 1)
self.Language_illustrate.raise_()
self.Language_Choose_widget.raise_()
self.Language_title.raise_()
@@ -1631,13 +1614,14 @@ class Ui_MainWindow(object):
self.cloud_services_switch_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.cloud_services_switch_Button.setIconSize(QtCore.QSize(16, 16))
self.cloud_services_switch_Button.setCheckable(False)
self.cloud_services_switch_Button.setObjectName("cloud_services_switch_Button")
@@ -1657,17 +1641,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Setting_Back.setFont(font)
self.Setting_Back.setFocusPolicy(QtCore.Qt.StrongFocus)
self.Setting_Back.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(0,0,0,0);\n"
" color:rgba(60,60,60,200);\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" color:rgba(60,60,60,255);\n"
"}\n"
"")
self.Setting_Back.setStyleSheet("QPushButton{border:none; background-color:rgba(0,0,0,0); color:rgba(60,60,60,200);} QPushButton:hover{ color:rgba(60,60,60,255);}")
self.Setting_Back.setIcon(icon5)
self.Setting_Back.setIconSize(QtCore.QSize(20, 20))
self.Setting_Back.setCheckable(False)
@@ -1717,13 +1691,14 @@ class Ui_MainWindow(object):
self.Add_White_list_Button.setStyleSheet("QPushButton\n"
"{\n"
" border:none;\n"
" background-color:rgba(20,20,20,30);\n"
" border-radius: 15px;\n"
" background-color:rgb(230,230,230);\n"
" border-radius: 10px;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
" background-color:rgba(20,20,20,50);\n"
"}")
" background-color:rgb(220,220,220);\n"
"}\n"
"")
self.Add_White_list_Button.setIconSize(QtCore.QSize(16, 16))
self.Add_White_list_Button.setCheckable(False)
self.Add_White_list_Button.setObjectName("Add_White_list_Button")
@@ -1769,22 +1744,6 @@ class Ui_MainWindow(object):
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.Theme_Black = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_Black.setFont(font)
self.Theme_Black.setObjectName("Theme_Black")
self.gridLayout_2.addWidget(self.Theme_Black, 1, 1, 1, 1)
self.Theme_White = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_White.setFont(font)
self.Theme_White.setObjectName("Theme_White")
self.gridLayout_2.addWidget(self.Theme_White, 1, 0, 1, 1)
self.Theme_Yellow = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
@@ -1793,13 +1752,37 @@ class Ui_MainWindow(object):
self.Theme_Yellow.setFont(font)
self.Theme_Yellow.setObjectName("Theme_Yellow")
self.gridLayout_2.addWidget(self.Theme_Yellow, 1, 2, 1, 1)
self.Theme_Green = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
self.Theme_Green.setFont(font)
self.Theme_Green.setObjectName("Theme_Green")
self.gridLayout_2.addWidget(self.Theme_Green, 2, 0, 1, 1)
self.Theme_Blue = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_Blue.setFont(font)
self.Theme_Blue.setObjectName("Theme_Blue")
self.gridLayout_2.addWidget(self.Theme_Blue, 2, 0, 1, 1)
self.gridLayout_2.addWidget(self.Theme_Blue, 2, 1, 1, 1)
self.Theme_Customize = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_Customize.setFont(font)
self.Theme_Customize.setObjectName("Theme_Customize")
self.gridLayout_2.addWidget(self.Theme_Customize, 2, 2, 1, 1)
self.Theme_White = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_White.setFont(font)
self.Theme_White.setObjectName("Theme_White")
self.gridLayout_2.addWidget(self.Theme_White, 1, 0, 1, 1)
self.Theme_Red = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
@@ -1807,27 +1790,23 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_Red.setFont(font)
self.Theme_Red.setObjectName("Theme_Red")
self.gridLayout_2.addWidget(self.Theme_Red, 2, 1, 1, 1)
self.Theme_Green = QtWidgets.QRadioButton(self.gridLayoutWidget_2)
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(11)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.Theme_Green.setFont(font)
self.Theme_Green.setObjectName("Theme_Green")
self.gridLayout_2.addWidget(self.Theme_Green, 2, 2, 1, 1)
self.gridLayout_2.addWidget(self.Theme_Red, 1, 1, 1, 1)
self.Theme_illustrate.raise_()
self.Language_Choose_widget_2.raise_()
self.Theme_title.raise_()
self.Protection_widget.raise_()
self.Setting_widget.raise_()
self.About_widget.raise_()
self.Tools_widget.raise_()
self.widget_2 = QtWidgets.QWidget(self.widget)
self.widget_2.setGeometry(QtCore.QRect(170, 50, 671, 481))
self.widget_2.setStyleSheet("background-color: rgb(255, 255, 255);")
self.widget_2.setObjectName("widget_2")
self.widget_2.raise_()
self.Setting_widget.raise_()
self.Tools_widget.raise_()
self.Process_widget.raise_()
self.Virus_Scan_widget.raise_()
self.About_widget.raise_()
self.Protection_widget.raise_()
self.Window_widget.raise_()
self.Navigation_Bar.raise_()
self.Virus_Scan_widget.raise_()
self.State_widget.raise_()
MainWindow.setCentralWidget(self.centralwidget)
@@ -1873,16 +1852,21 @@ class Ui_MainWindow(object):
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.State_log.setText(_translate("MainWindow", "日誌:"))
self.About_Back.setText(_translate("MainWindow", "返回"))
self.PYAS_Version.setText(_translate("MainWindow", "PYAS v2.3.5"))
self.PYAS_Version.setText(_translate("MainWindow", "PYAS V0.0.0 (0000-00-00)"))
self.GUI_Made_title.setText(_translate("MainWindow", "介面製作:"))
self.GUI_Made_Name.setText(_translate("MainWindow", "mtkiao129#3921"))
self.GUI_Made_Name.setText(_translate("MainWindow", "mtkiao"))
self.Core_Made_title.setText(_translate("MainWindow", "核心製作:"))
self.Core_Made_Name.setText(_translate("MainWindow", "PYAS_Dev#0629"))
self.Core_Made_Name.setText(_translate("MainWindow", "87owo"))
self.Testers_title.setText(_translate("MainWindow", "測試人員:"))
self.Testers_Name.setText(_translate("MainWindow", "PYAS_Dev#0629"))
self.Testers_Name.setText(_translate("MainWindow", "87owo"))
self.PYAS_URL_title.setText(_translate("MainWindow", "官方網站:"))
self.PYAS_URL.setText(_translate("MainWindow", "<html><head/><body><p><a href=\"https://xiaomi69ai.wixsite.com/pyas\"><span style=\" text-decoration: underline; color:#0000ff;\">https://xiaomi69ai.wixsite.com/pyas</span></a></p></body></html>"))
self.PYAS_CopyRight.setText(_translate("MainWindow", "Copyright© 2020-2022 PYAS Security"))
self.PYAS_URL.setText(_translate("MainWindow", "<html><head/><body><p><a href=\"https://github.com/87owo/PYAS\"><span style=\" text-decoration: underline; color:#000000;\">https://github.com/87owo/PYAS</span></a></p></body></html>"))
self.PYAS_CopyRight.setText(_translate("MainWindow", "Copyright© 0000-9999 PYAS Security"))
self.License_terms.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:11pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.License_terms_title.setText(_translate("MainWindow", "許可條款:"))
self.Window_title.setText(_translate("MainWindow", "PYAS V0.0.0"))
self.Process_Tools_Back.setText(_translate("MainWindow", "返回"))
@@ -1896,26 +1880,26 @@ class Ui_MainWindow(object):
self.high_sensitivity_title.setText(_translate("MainWindow", "高靈敏度模式"))
self.high_sensitivity_illustrate.setText(_translate("MainWindow", "啟用此選項可以提高引擎的靈敏度"))
self.high_sensitivity_switch_Button.setText(_translate("MainWindow", "已關閉"))
self.Language_title.setText(_translate("MainWindow", "語言"))
self.Language_title.setText(_translate("MainWindow", "顯示語言"))
self.Language_illustrate.setText(_translate("MainWindow", "請選擇語言"))
self.Language_English.setText(_translate("MainWindow", "English"))
self.Language_Traditional_Chinese.setText(_translate("MainWindow", "繁體中文"))
self.Language_Simplified_Chinese.setText(_translate("MainWindow", "简体中文"))
self.Language_English.setText(_translate("MainWindow", "English"))
self.cloud_services_title.setText(_translate("MainWindow", "高靈敏度模式"))
self.cloud_services_illustrate.setText(_translate("MainWindow", "啟用此選項可以提高引擎的靈敏度"))
self.cloud_services_title.setText(_translate("MainWindow", "雲端掃描服務"))
self.cloud_services_illustrate.setText(_translate("MainWindow", "啟用此選項可以連接雲端掃描服務"))
self.cloud_services_switch_Button.setText(_translate("MainWindow", "已關閉"))
self.Setting_Back.setText(_translate("MainWindow", "返回"))
self.Add_White_list_title.setText(_translate("MainWindow", "高靈敏度模式"))
self.Add_White_list_illustrate.setText(_translate("MainWindow", "啟用此選項可以提高引擎的靈敏度"))
self.Add_White_list_title.setText(_translate("MainWindow", "增加到白名單"))
self.Add_White_list_illustrate.setText(_translate("MainWindow", "此選項可以選擇檔案並增加到白名單"))
self.Add_White_list_Button.setText(_translate("MainWindow", "已關閉"))
self.Theme_title.setText(_translate("MainWindow", "顯色主題"))
self.Theme_illustrate.setText(_translate("MainWindow", "請選擇主題"))
self.Theme_Black.setText(_translate("MainWindow", "黑色主題"))
self.Theme_White.setText(_translate("MainWindow", "白色主題"))
self.Theme_Yellow.setText(_translate("MainWindow", "粉色主題"))
self.Theme_Blue.setText(_translate("MainWindow", "藍色主題"))
self.Theme_Red.setText(_translate("MainWindow", "紅色主題"))
self.Theme_Yellow.setText(_translate("MainWindow", "黃色主題"))
self.Theme_Green.setText(_translate("MainWindow", "綠色主題"))
self.Theme_Blue.setText(_translate("MainWindow", "藍色主題"))
self.Theme_Customize.setText(_translate("MainWindow", "自訂主題"))
self.Theme_White.setText(_translate("MainWindow", "白色主題"))
self.Theme_Red.setText(_translate("MainWindow", "紅色主題"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
+7 -6
View File
@@ -10,12 +10,12 @@ translate_dict = {
"攔":"拦","請":"请","統":"统","刪":"删","進":"进","個":"个","選":"选",
"啟":"启","監":"监","並":"并","徑":"径","盤":"盘","隱":"隐","動":"动",
"狀":"状","誌":"志","這":"这","會":"会","題":"题","擇":"择","語":"语",
"無":"无","顯":"显","變":"变","戶":"户","碼":"码","雲":"云","訂":"订",
"無":"无","顯":"显","變":"变","戶":"户","碼":"码","雲":"云","介":"界",
"稱":"称","類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网",
"詢":"询","製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红",
"綠":"绿","態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关",
"強":"强","驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开",
"惡":"恶","介":"界"},
"惡":"恶","據":"据","庫":"库","經":"经","敗":"败"},
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
"惡意檔案":"Virus ","惡意軟體":"Malware ","勒索軟體":"Ransom ",
@@ -23,9 +23,9 @@ translate_dict = {
"許可條款":"License Terms","惡意":"Malicious","可疑":"Suspicious",
"啟用":"Enable ","禁用":"Disable ","正在初始化中":"Initializing ",
"正在掃描":"Scanning ","正在刪除":"Deleting ","最小化到":"Minimize To ",
"確定要":"Sure Want To ","靈敏度":"Sensitivity ","更新":"Update",
"白色主題":"White","黑色主題":"Black","黃色主題":"Yellow","紅色主題":"Red",
"藍色主題":"Blue","綠色主題":"Green","語言":"Language ","製作":"Make",
"確定要":"Sure Want To ","靈敏度":"Sensitivity ","更新":"Update ",
"白色主題":"White","黃色主題":"Yellow","紅色主題":"Red","語言":"Language ",
"藍色主題":"Blue","綠色主題":"Green","自定主題":"Custom","最新":"Latest ",
"測試人員":"Testers","版本資訊":"Information","通訊":"Communication ",
"註冊表":"Registry ","退出":"Quit ","檔案":"File ","當前":"Currently ",
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
@@ -47,7 +47,8 @@ translate_dict = {
"增加到":"Add File To ","白名單":"White List ","軟體":"Software ",
"增加":"Add","移除":"Delete","項目":"Items ","生成":"Create ","稱":"",
"複製":"Copy ","開啟":"Open ","此":"This ","並":"And ","全盤":"Full ",
"已經是":"Already ","數據庫":"Database ","誤報":"False Positive ",
"高":"High ","新":"New ","和":"And ","可能會":"Possible ","會":"Can ",
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","驅動":"Drive ",
"的":"","顯示":"","個":"","嗎":"","中":"","了":"","行":"","立即":"",
"密鑰":"Key ","檢測":"Detect ","誤報":"False Positive "," ":" "}}
"密鑰":"Key ","檢測":"Detect ","製作":"Make"," ":" "}}
+5649 -6472
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1,7 +1,7 @@
import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='2.9.5',
version='3.0.2',
company_name="PYAS Security",
file_description="Python Antivirus Software",
internal_name="PYAS",
+157 -9
View File
@@ -1,22 +1,170 @@
# PYAS (Python Antivirus Software)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/153bcad9-18ab-4c81-bcb6-186434d0ef1b)
## File Information
PYAS.py -> Main PYAS Program (including animation, scanning, protection functions, etc.)
PYAS_Compress.py -> Conversion Database (used to convert database dict and list to and from each other)
PYAS_Extension.py -> File Extension (including scanned file extensions and common file extensions)
PYAS_Function.* -> Virus Database (the virus database must be placed in the same directory)
PYAS_Interface.py -> PyQt5 Interface (designed by QT designer, must be matched with the main program)
PYAS_Resource.py -> PyQt5 Resource (status pictures, icon packages, button icons, etc.)
PYAS_Language.py -> Translate Dict (Traditional Chinese, Simplified Chinese, English)
PYAS_Version.py -> Pyinstaller Info (file information, version information, original name, etc.)
## Requirements
Use pip install requirements to install import module
```
psutil==5.9.5
pefile==2023.2.7
requests==2.31.0
pyperclip==1.8.2
pywin32==306
PyQt5==5.15.9
```
## Hash Scanning
Use Qihoo 360 cloud service to scan known malicious files
```
import hashlib, requests
import xml.etree.ElementTree as xmlet
def hash_scan(file):
try:
with open(file, "rb") as f:
text = str(hashlib.md5(f.read()).hexdigest())
strBody = f'-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="md5s"\r\n\r\n{text}\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="format"\r\n\r\nXML\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="product"\r\n\r\n360zip\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="combo"\r\n\r\n360zip_main\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="v"\r\n\r\n2\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="osver"\r\n\r\n5.1\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="vk"\r\n\r\na03bc211\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="mid"\r\n\r\n8a40d9eff408a78fe9ec10a0e7e60f62\r\n-------------------------------7d83e2d7a141e--'
response = requests.post('http://qup.f.360.cn/file_health_info.php', data=strBody, timeout=3)
if response.status_code == 200:
level = float(xmlet.fromstring(response.text).find('.//e_level').text)
if level > 50:
return "Virus"
elif level <= 10:
return "Safe"
return "Unknown"
return f"Error: {response.status_code}"
except Exception as e:
return f"Error: {e}"
info = hash_scan("path to file")
print(info)
```
## Pefile Scanning
Get the pefile file function import table for scanning
```
import pefile
def pe_scan(file):
try:
fn = []
with pefile.PE(file) as pe:
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for func in entry.imports:
try:
fn.append(str(func.name, "utf-8"))
except:
pass
if fn in known_malicious_list:
return "Virus"
return "Safe"
return "Unknown"
except Exception as e:
return f"Error: {e}"
info = pe_scan("path to file")
print(info)
```
## Process Detect
Show the new process name, file path, cmd line, pid
```
import psutil, time
def proc_detect():
existing_processes = set()
for p in psutil.process_iter():
if p.pid not in existing_processes:
existing_processes.add(p.pid)
while True:
time.sleep(0.1)
for p in psutil.process_iter():
try:
if p.pid not in existing_processes:
existing_processes.add(p.pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
except:
pass
proc_detect()
```
## File Detect
Monitor file changes under the specified path
```
import os, win32file, win32con
def file_detect(path):
hDir = win32file.CreateFile(path,win32con.GENERIC_READ,win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE,None,win32con.OPEN_EXISTING,win32con.FILE_FLAG_BACKUP_SEMANTICS,None)
while True:
for action, file in win32file.ReadDirectoryChangesW(hDir,10485760,True,win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY,None,None):
try:
fpath = os.path.join(path, file)
if action == 1:
print(f"File Create: {fpath}")
elif action == 2:
print(f"File Delete: {fpath}")
elif action == 3:
print(f"File Modify: {fpath}")
elif action == 4:
print(f"File Rename: {fpath}")
elif action == 5:
print(f"File Rename: {fpath}")
except:
pass
file_detect("path")
```
## Official Website
https://pyantivirus.wixsite.com/pyas , https://github.com/87owo/PYAS
https://pyantivirus.wixsite.com/pyas
https://github.com/87owo/PYAS
## MIT license
## MIT License
https://github.com/87owo/PYAS/blob/main/LICENSE.md
## Support System
Windows 8.1, 10, 11 (64-bit), Ram 1GB, Rom 1GB or higher
## Requirements
psutil==5.9.5, pefile==2023.2.7, requests==2.31.0, pyperclip==1.8.2, pywin32==306, PyQt5==5.15.9
## Import Module
os, gc, sys, time, json, psutil, hashlib, pefile, socket, msvcrt, requests, pyperclip, win32file, win32gui, win32api, win32con, xml, PYAS_Function, PYAS_Function_Safe, PYAS_Extension, PYAS_Language, PYAS_Interface, threading, PyQt5
Other systems may experience software malfunctions or crash
## Special Thanks
360, Wix, VirusShare, mtkiao129, LenStevens, AV-T Team of LisectGroup
360, Wix, VirusShare, mtkiao129, AV-T Team of LisectGroup
Copyright© 2020~2023 PYAS Security By 87owo
Copyright© 2020~2024 PYAS Security By 87owo