Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
241a9ffea5 | ||
|
|
3e0749ad60 | ||
|
|
0f55ff4295 | ||
|
|
d8f8c34991 | ||
|
|
7ddd323b65 | ||
|
|
36bbb6e708 | ||
|
|
06638a8cdc | ||
|
|
42d8a8fde0 | ||
|
|
e2997fbbce | ||
|
|
5dd671eb4a | ||
|
|
59aff0f196 | ||
|
|
548def29b3 | ||
|
|
84d59eb7d4 | ||
|
|
1cc3b599a9 | ||
|
|
0e02b56d20 | ||
|
|
4e8d99f557 | ||
|
|
f3add6e3e3 | ||
|
|
32a2a93eb5 | ||
|
|
0090ee516f | ||
|
|
42e4e958df | ||
|
|
b6970d1da6 | ||
|
|
d7ce6c9a4a | ||
|
|
e6d18cbec8 | ||
|
|
3140f6b19f | ||
|
|
b493bf88a8 | ||
|
|
8877609f2a | ||
|
|
d3e5aa00df |
No files matched your search
@@ -1,6 +1,6 @@
|
||||
import os, sys, time, json, psutil
|
||||
import os, gc, sys, time, json, psutil
|
||||
import ctypes, requests, subprocess
|
||||
import win32file, win32api, win32con
|
||||
import win32file, win32api, win32con, win32gui
|
||||
import xml.etree.ElementTree as ET
|
||||
from hashlib import md5, sha1, sha256
|
||||
from pefile import PE, DIRECTORY_ENTRY
|
||||
@@ -25,6 +25,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.init_config_ui()
|
||||
self.init_config_mbr()
|
||||
self.init_whitelist()
|
||||
self.init_blocklist()
|
||||
self.init_tray_icon()
|
||||
self.setup_control()
|
||||
self.init_protect()
|
||||
@@ -42,38 +43,49 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.protect_threading_init_3()
|
||||
self.protect_threading_init_4()
|
||||
self.protect_threading_init_5()
|
||||
self.block_window_threading_init()
|
||||
|
||||
def init_config(self):
|
||||
self.Safe = True
|
||||
self.Virus_Scan = False
|
||||
self.block_window = True
|
||||
self.pyas_opacity = 0
|
||||
self.ui.Theme_White.setChecked(True)
|
||||
self.pyas = str(sys.argv[0]).replace("\\", "/")
|
||||
self.sflist = [".exe",".dll",".com",".msi",".js",".jar",".vbs",".ps1",".xls",".xlsx",".doc",".docx"]
|
||||
self.md5_key = self.pyas_key()
|
||||
self.pyasConfig = self.init_config_json()
|
||||
self.init_config_lang()
|
||||
self.init_config_sens()
|
||||
|
||||
def writeConfig(self, config):
|
||||
try:
|
||||
with open("Library/PYAS.json", "w", encoding="utf-8") as f:
|
||||
with open("C:/Windows/SysWOW64/PYAS/PYAS.json", "w", encoding="utf-8") as f:
|
||||
f.write(json.dumps(config, indent=4, ensure_ascii=False))
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
def create_library(self):
|
||||
try:
|
||||
if not os.path.exists("Library"):
|
||||
os.makedirs("Library")
|
||||
if not os.path.exists("C:/Windows/SysWOW64/PYAS"):
|
||||
os.makedirs("C:/Windows/SysWOW64/PYAS")
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
def init_whitelist(self):
|
||||
try:
|
||||
with open("Library/Whitelist.file", "r", encoding="utf-8") as f:
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "r", encoding="utf-8") as f:
|
||||
self.whitelist = [line.strip() for line in f.readlines()]
|
||||
except:
|
||||
self.whitelist = []
|
||||
|
||||
def init_blocklist(self):
|
||||
try:
|
||||
with open("C:/Windows/SysWOW64/PYAS/Blocklist.txt", "r", encoding="utf-8") as f:
|
||||
self.blocklist = [line.strip() for line in f.readlines()]
|
||||
except:
|
||||
self.blocklist = []
|
||||
|
||||
def init_config_mbr(self):
|
||||
try:
|
||||
with open(r"\\.\PhysicalDrive0", "r+b") as f:
|
||||
@@ -82,9 +94,9 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.mbr_value = None
|
||||
|
||||
def init_config_json(self):
|
||||
if not os.path.exists("Library/PYAS.json"):
|
||||
if not os.path.exists("C:/Windows/SysWOW64/PYAS/PYAS.json"):
|
||||
self.writeConfig({"language":"en_US","high_sensitivity":0,"cloud_services":1})
|
||||
with open("Library/PYAS.json", "r", encoding="utf-8") as f:
|
||||
with open("C:/Windows/SysWOW64/PYAS/PYAS.json", "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def init_config_lang(self):
|
||||
@@ -131,8 +143,8 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Setting_Back.clicked.connect(self.Setting_Back)
|
||||
self.ui.Repair_System_Files_Button.clicked.connect(self.Repair_System_Files)
|
||||
self.ui.Clean_System_Files_Button.clicked.connect(self.Clean_System_Files)
|
||||
self.ui.Enable_Safe_Mode_Button.clicked.connect(self.Enable_Safe_Mode)
|
||||
self.ui.Disable_Safe_Mode_Button.clicked.connect(self.Disable_Safe_Mode)
|
||||
self.ui.Window_Block_Button.clicked.connect(self.Get_Software_Window)
|
||||
self.ui.Repair_System_Network_Button.clicked.connect(self.Repair_System_Network)
|
||||
self.ui.Process_list.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||
self.ui.Process_list.customContextMenuRequested.connect(self.Process_list_Menu)
|
||||
self.ui.Protection_switch_Button.clicked.connect(self.protect_threading_init)
|
||||
@@ -160,6 +172,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Virus_Scan_choose_widget.raise_()
|
||||
self.Process_sim = QStringListModel()
|
||||
self.Process_quantity = []
|
||||
self.Process_list_all_pid = []
|
||||
self.Process_Timer = QTimer()
|
||||
self.Process_Timer.timeout.connect(self.Process_list)
|
||||
self.ui.License_terms.setText('''Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.''')
|
||||
@@ -211,7 +224,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def lang_init_refresh(self):
|
||||
self.ui.State_title.setText(self.text_Translate("此裝置已受到防護" if self.Safe else "此裝置當前不安全"))
|
||||
self.ui.Window_title.setText(self.text_Translate(f"PYAS V{pyas_version} {self.pyas_key()}"))
|
||||
self.ui.Window_title.setText(self.text_Translate(f"PYAS V{pyas_version} {self.md5_key}"))
|
||||
self.ui.PYAS_CopyRight.setText(self.text_Translate(f"Copyright© 2020-{max(int(time.strftime('%Y')), 2020)} PYAS Security"))
|
||||
self.ui.State_Button.setText(self.text_Translate("狀態"))
|
||||
self.ui.Virus_Scan_Button.setText(self.text_Translate("掃描"))
|
||||
@@ -231,7 +244,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Protection_illustrate.setText(self.text_Translate("啟用此選項可以監控進程並攔截病毒"))
|
||||
self.ui.Protection_switch_Button.setText(self.text_Translate(self.ui.Protection_switch_Button.text()))
|
||||
self.ui.Protection_title_2.setText(self.text_Translate("檔案防護"))
|
||||
self.ui.Protection_illustrate_2.setText(self.text_Translate("啟用此選項可以刪除病毒檔案變更"))
|
||||
self.ui.Protection_illustrate_2.setText(self.text_Translate("啟用此選項可以監控病毒檔案變更"))
|
||||
self.ui.Protection_switch_Button_2.setText(self.text_Translate(self.ui.Protection_switch_Button_2.text()))
|
||||
self.ui.Protection_title_3.setText(self.text_Translate("引導防護"))
|
||||
self.ui.Protection_illustrate_3.setText(self.text_Translate("啟用此選項可以修復系統引導分區"))
|
||||
@@ -247,12 +260,12 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.System_Process_Manage_Button.setText(self.text_Translate("系統進程管理"))
|
||||
self.ui.Repair_System_Files_Button.setText(self.text_Translate("系統檔案修復"))
|
||||
self.ui.Clean_System_Files_Button.setText(self.text_Translate("系統垃圾清理"))
|
||||
self.ui.Enable_Safe_Mode_Button.setText(self.text_Translate("啟用安全模式"))
|
||||
self.ui.Disable_Safe_Mode_Button.setText(self.text_Translate("禁用安全模式"))
|
||||
self.ui.Window_Block_Button.setText(self.text_Translate("軟體彈窗攔截"))
|
||||
self.ui.Repair_System_Network_Button.setText(self.text_Translate("系統網路修復"))
|
||||
self.ui.About_Back.setText(self.text_Translate("返回"))
|
||||
self.ui.PYAS_Version.setText(self.text_Translate(f"PYAS V{pyas_version} {self.pyas_key()}"))
|
||||
self.ui.PYAS_Version.setText(self.text_Translate(f"PYAS V{pyas_version} {self.md5_key}"))
|
||||
self.ui.GUI_Made_title.setText(self.text_Translate("介面製作:"))
|
||||
self.ui.GUI_Made_Name.setText(self.text_Translate("87owo"))
|
||||
self.ui.GUI_Made_Name.setText(self.text_Translate("mtkiao"))
|
||||
self.ui.Core_Made_title.setText(self.text_Translate("核心製作:"))
|
||||
self.ui.Core_Made_Name.setText(self.text_Translate("87owo"))
|
||||
self.ui.Testers_title.setText(self.text_Translate("測試人員:"))
|
||||
@@ -367,10 +380,9 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
widget.setGraphicsEffect(self.opacity)
|
||||
else:
|
||||
self.timer.stop()
|
||||
self.timer.deleteLater()
|
||||
self.timer = QTimer()
|
||||
self.timer.timeout.connect(timeout)
|
||||
self.timer.start()
|
||||
self.timer.start(5)
|
||||
|
||||
def Change_to_State_widget(self):
|
||||
if self.ui.State_widget.isHidden():
|
||||
@@ -446,7 +458,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
def updateOpacity():
|
||||
if self.pyas_opacity > 70 and self.m_flag == True:
|
||||
if self.pyas_opacity > 80 and self.m_flag == True:
|
||||
self.pyas_opacity -= 1
|
||||
self.setWindowOpacity(self.pyas_opacity/100)
|
||||
else:
|
||||
@@ -516,7 +528,8 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.system_notification(self.text_Translate("PYAS 已最小化到系統托盤圖標"))
|
||||
|
||||
def closeEvent(self, event):
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要退出 PYAS 和相關防護嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要退出 PYAS 和所有防護嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.block_window = False
|
||||
self.proc_protect = False
|
||||
self.file_protect = False
|
||||
self.mbr_protect = False
|
||||
@@ -524,7 +537,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.enh_protect = False
|
||||
self.tray_icon.hide()
|
||||
self.hideWindow()
|
||||
app.quit()
|
||||
QApplication.instance().quit()
|
||||
event.ignore()
|
||||
|
||||
def pyas_bug_log(self, e):
|
||||
@@ -546,16 +559,19 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
try:
|
||||
with open(self.pyas, "rb") as f:
|
||||
file_md5 = str(md5(f.read()).hexdigest())
|
||||
response = requests.get("http://27.147.30.238:5001/pyas", params={"key": file_md5}, timeout=3)
|
||||
if response.status_code == 200:
|
||||
if response.text == "True":
|
||||
return ""
|
||||
elif response.text == "Update":
|
||||
return "(軟體需要更新)"
|
||||
else:
|
||||
return "(安全密鑰錯誤)"
|
||||
else:
|
||||
return "(網路連接錯誤)"
|
||||
for url in ["http://27.147.30.238:5001/pyas","https://api.pyas.cf/pyas"]:
|
||||
try:
|
||||
response = requests.get(url, params={"key": file_md5}, timeout=3)
|
||||
if response.status_code == 200:
|
||||
if response.text == "True":
|
||||
return ""
|
||||
elif response.text == "Update":
|
||||
return "(軟體需要更新)"
|
||||
else:
|
||||
return "(安全密鑰錯誤)"
|
||||
except:
|
||||
pass
|
||||
return "(網路連接錯誤)"
|
||||
except:
|
||||
return "(網路連接錯誤)"
|
||||
|
||||
@@ -623,25 +639,52 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
QPushButton:hover{background-color:rgba(20,20,20,50);}""")
|
||||
|
||||
def add_white_list(self):
|
||||
file, filetype= QFileDialog.getOpenFileName(self,self.text_Translate("增加到白名單"),"C:/","All File *.*")
|
||||
try:
|
||||
if file != "":
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
if str(file.replace("\\", "/")) not in self.whitelist:
|
||||
file, filetype= QFileDialog.getOpenFileName(self,self.text_Translate("增加到白名單"),"C:/","All File *.*")
|
||||
if file not in ["", "PYAS"]:
|
||||
if str(file.replace("\\", "/")) not in self.whitelist:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.whitelist.append(str(file.replace("\\", "/")))
|
||||
with open("Library/Whitelist.file", "a+", encoding="utf-8") as f:
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "a+", encoding="utf-8") as f:
|
||||
f.write(str(file.replace("\\", "/"))+'\n')
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate(f"成功增加到白名單: ")+str(file.replace("\\", "/")),QMessageBox.Ok)
|
||||
except:
|
||||
self.pyas_bug_log('增加到白名單失敗')
|
||||
else:
|
||||
self.pyas_bug_log('檔案已增加到白名單')
|
||||
elif QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate(f"您確定要取消增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.whitelist.remove(str(file.replace("\\", "/")))
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "w", encoding="utf-8") as f:
|
||||
for file in self.whitelist:
|
||||
f.write(f'{file}\n')
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate(f"成功取消增加到白名單: ")+str(file.replace("\\", "/")),QMessageBox.Ok)
|
||||
except:
|
||||
self.pyas_bug_log('取消增加到白名單失敗')
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
def system_safe(self):
|
||||
try:
|
||||
self.ui.State_icon.setPixmap(QtGui.QPixmap(":/icon/Icon/check.png"))
|
||||
self.ui.State_title.setText(self.text_Translate("此裝置已受到防護"))
|
||||
self.Safe = True
|
||||
except:
|
||||
pass
|
||||
|
||||
def system_unsafe(self):
|
||||
try:
|
||||
self.ui.State_icon.setPixmap(QtGui.QPixmap(":/icon/Icon/X2.png"))
|
||||
self.ui.State_title.setText(self.text_Translate("此裝置當前不安全"))
|
||||
self.Safe = False
|
||||
except:
|
||||
pass
|
||||
|
||||
def Virus_Scan_Break(self):
|
||||
self.Virus_Scan = False
|
||||
try:
|
||||
self.ui.Virus_Scan_Break_Button.hide()
|
||||
self.Virus_Scan = False
|
||||
except:
|
||||
pass
|
||||
|
||||
def Virus_Solve(self):
|
||||
try:
|
||||
@@ -658,9 +701,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
self.ui.Virus_Scan_text.setText(self.text_Translate("成功: 刪除成功"))
|
||||
self.ui.Virus_Scan_Solve_Button.hide()
|
||||
self.ui.State_icon.setPixmap(QtGui.QPixmap(":/icon/Icon/check.png"))
|
||||
self.ui.State_title.setText(self.text_Translate("此裝置已受到防護"))
|
||||
self.Safe = True
|
||||
self.system_safe()
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
@@ -693,7 +734,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
fn.append(str(func.name, "utf-8"))
|
||||
for vfl in function_list:
|
||||
QApplication.processEvents()
|
||||
if (sum(1 for num in fn if num in vfl)/len(vfl)) - (sum(1 for num in fn if num not in vfl)/len(vfl)) == 1.0:
|
||||
if sum(1 for i in range(min(len(vfl), len(fn))) if vfl[i] == fn[i]) / min(len(vfl), len(fn)) > 0.5:
|
||||
return True
|
||||
return False
|
||||
except:
|
||||
@@ -711,19 +752,15 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
if self.Virus_List != []:
|
||||
self.Virus_List_output.setStringList(self.Virus_List)
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
self.ui.State_icon.setPixmap(QtGui.QPixmap(":/icon/Icon/X2.png"))
|
||||
self.ui.State_title.setText(self.text_Translate("此裝置當前不安全"))
|
||||
self.ui.Virus_Scan_Solve_Button.show()
|
||||
self.ui.Virus_Scan_choose_Button.show()
|
||||
self.ui.Virus_Scan_Break_Button.hide()
|
||||
self.Virus_Scan = False
|
||||
self.Safe = False
|
||||
self.Virus_Scan_Break()
|
||||
self.system_unsafe()
|
||||
text = self.text_Translate(f"當前發現 {len(self.Virus_List)} 個病毒")
|
||||
else:
|
||||
self.ui.Virus_Scan_Break_Button.hide()
|
||||
self.ui.Virus_Scan_choose_Button.show()
|
||||
self.Virus_Scan = False
|
||||
self.Safe = True
|
||||
self.Virus_Scan_Break()
|
||||
self.system_safe()
|
||||
text = self.text_Translate("當前未發現病毒")
|
||||
self.ui.Virus_Scan_text.setText(text)
|
||||
self.system_notification(text)
|
||||
@@ -757,6 +794,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
if self.api_scan(file) or self.pe_scan(file):
|
||||
self.write_scan(file)
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
else:
|
||||
self.ui.Virus_Scan_text.setText(self.text_Translate("請選擇掃描方式"))
|
||||
except Exception as e:
|
||||
@@ -780,8 +818,9 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Virus_Scan_choose_Button.hide()
|
||||
self.ui.Virus_Scan_Break_Button.show()
|
||||
QApplication.processEvents()
|
||||
self.traverse_path(path,[".exe",".dll",".com",".msi",".js",".vbs",".xls",".xlsx",".doc",".docx"])
|
||||
self.traverse_path(path)
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
else:
|
||||
self.ui.Virus_Scan_text.setText(self.text_Translate("請選擇掃描方式"))
|
||||
except Exception as e:
|
||||
@@ -805,57 +844,57 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
for d in range(26):
|
||||
try:
|
||||
self.traverse_path(f"{chr(65+d)}:/",[".exe",".dll",".com",".msi",".js",".vbs",".xls",".xlsx",".doc",".docx"])
|
||||
self.traverse_path(f"{chr(65+d)}:/")
|
||||
except:
|
||||
pass
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
self.ui.Virus_Scan_text.setText(self.text_Translate("請選擇掃描方式"))
|
||||
self.ui.Virus_Scan_choose_Button.show()
|
||||
self.ui.Virus_Scan_Break_Button.hide()
|
||||
|
||||
def traverse_path(self,path,sflist):
|
||||
def traverse_path(self,path):
|
||||
for fd in os.listdir(path):
|
||||
try:
|
||||
fullpath = str(os.path.join(path,fd)).replace("\\", "/")
|
||||
if self.Virus_Scan == False:
|
||||
self.ui.Virus_Scan_Break_Button.hide()
|
||||
break
|
||||
elif fullpath in self.whitelist or ":/$Recycle.Bin" in fullpath or ":/Windows" in fullpath:
|
||||
continue
|
||||
elif os.path.isdir(fullpath):
|
||||
self.traverse_path(fullpath,sflist)
|
||||
self.traverse_path(fullpath)
|
||||
else:
|
||||
self.ui.Virus_Scan_text.setText(self.text_Translate(f"正在掃描: ")+fullpath)
|
||||
QApplication.processEvents()
|
||||
if self.high_sensitivity == 0 and self.sign_scan(fullpath):
|
||||
if str(os.path.splitext(fd)[1]).lower() in sflist:
|
||||
if str(os.path.splitext(fd)[1]).lower() in self.sflist:
|
||||
if self.api_scan(fullpath) or self.pe_scan(fullpath):
|
||||
self.write_scan(fullpath)
|
||||
elif self.high_sensitivity == 1:
|
||||
if self.api_scan(fullpath) or self.pe_scan(fullpath):
|
||||
self.write_scan(fullpath)
|
||||
gc.collect()
|
||||
except:
|
||||
continue
|
||||
|
||||
def Repair_System_Files(self):
|
||||
try:
|
||||
if QMessageBox.warning(self,self.text_Translate("修復系統檔案"),self.text_Translate("您確定要修復系統檔案嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要修復系統檔案嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.repair_system_wallpaper()
|
||||
self.repair_system_explorer()
|
||||
self.repair_system_restrictions()
|
||||
self.repair_system_file_type()
|
||||
self.repair_system_img()
|
||||
self.repair_system_image()
|
||||
self.repair_system_icon()
|
||||
QMessageBox.information(self,self.text_Translate("完成"),self.text_Translate("修復系統檔案成功"),QMessageBox.Ok)
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate("修復系統檔案成功"),QMessageBox.Ok)
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
def repair_system_icon(self):
|
||||
try:
|
||||
for file_type in ['exefile', 'comfile', 'txtfile', 'dllfile', 'inifile', 'VBSfile']:
|
||||
time.sleep(0.01)
|
||||
try:
|
||||
key = win32api.RegOpenKey(win32con.HKEY_CLASSES_ROOT, file_type, 0, win32con.KEY_ALL_ACCESS)
|
||||
win32api.RegSetValue(key, 'DefaultIcon', win32con.REG_SZ, '%1')
|
||||
@@ -869,13 +908,12 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
except:
|
||||
pass
|
||||
|
||||
def repair_system_img(self):
|
||||
def repair_system_image(self):
|
||||
try:
|
||||
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options',0,win32con.KEY_ALL_ACCESS | win32con.WRITE_OWNER)
|
||||
count = win32api.RegQueryInfoKey(key)[0]
|
||||
while count >= 0:
|
||||
try:
|
||||
time.sleep(0.01)
|
||||
subKeyName = win32api.RegEnumKey(key, count)
|
||||
win32api.RegDeleteKey(key, subKeyName)
|
||||
except:
|
||||
@@ -887,18 +925,15 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
def repair_system_file_type(self):
|
||||
try:
|
||||
data = [('jpegfile', 'JPEG Image'),('.exe', 'exefile'),('exefile', 'Application'),('.com', 'comfile'),('comfile', 'MS-DOS Application'),
|
||||
('.scr', 'scrfile'),('scrfile', 'Screen saver'),('.zip', 'CompressedFolder'),('.dll', 'dllfile'),('dllfile', 'Application Extension'),
|
||||
('.sys', 'sysfile'),('sysfile', 'System file'),('.bat', 'batfile'),('batfile', 'Windows Batch File'),('VBS', 'VB Script Language'),
|
||||
('VBSfile', 'VBScript Script File'),('.txt', 'txtfile'),('txtfile', 'Text Document'),('.ini', 'inifile'),
|
||||
('inifile', 'Configuration Settings'),('.msc', 'MSCfile'),('MSCfile', 'Microsoft Common Console Document')]
|
||||
('.zip', 'CompressedFolder'),('.dll', 'dllfile'),('dllfile', 'Application Extension'),('.sys', 'sysfile'),('sysfile', 'System file'),
|
||||
('.bat', 'batfile'),('batfile', 'Windows Batch File'),('VBS', 'VB Script Language'),('VBSfile', 'VBScript Script File'),
|
||||
('.txt', 'txtfile'),('txtfile', 'Text Document'),('.ini', 'inifile'),('inifile', 'Configuration Settings')]
|
||||
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes', 0, win32con.KEY_ALL_ACCESS)# HKEY_LOCAL_MACHINE
|
||||
for ext, value in data:
|
||||
time.sleep(0.01)
|
||||
win32api.RegSetValue(key, ext, win32con.REG_SZ, value)
|
||||
win32api.RegCloseKey(key)
|
||||
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, 'SOFTWARE\Classes', 0, win32con.KEY_ALL_ACCESS)# HKEY_CURRENT_USER
|
||||
for ext, value in data:
|
||||
time.sleep(0.01)
|
||||
win32api.RegSetValue(key, ext, win32con.REG_SZ, value)
|
||||
try:
|
||||
keyopen = win32api.RegOpenKey(key, ext + r'\shell\open', 0, win32con.KEY_ALL_ACCESS)
|
||||
@@ -910,18 +945,16 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts', 0, win32con.KEY_ALL_ACCESS)# HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts
|
||||
extensions = ['.exe', '.zip', '.dll', '.sys', '.bat', '.txt', '.msc']
|
||||
for ext in extensions:
|
||||
time.sleep(0.01)
|
||||
win32api.RegSetValue(key, ext, win32con.REG_SZ, '')
|
||||
win32api.RegCloseKey(key)
|
||||
key = win32api.RegOpenKey(win32con.HKEY_CLASSES_ROOT, None, 0, win32con.KEY_ALL_ACCESS)# HKEY_CLASSES_ROOT
|
||||
for ext, value in data:
|
||||
time.sleep(0.01)
|
||||
win32api.RegSetValue(key, ext, win32con.REG_SZ, value)
|
||||
if ext in ['.cmd', '.vbs']:
|
||||
win32api.RegSetValue(key, ext + 'file', win32con.REG_SZ, 'Windows Command Script')
|
||||
try:
|
||||
keyopen = win32api.RegOpenKey(key, ext + r'\shell\open', 0, win32con.KEY_ALL_ACCESS)
|
||||
win32api.RegSetValue(keyopen, 'command', win32con.REG_SZ, '"%1" /S')
|
||||
win32api.RegSetValue(keyopen, 'command', win32con.REG_SZ, '"%1" %*')
|
||||
win32api.RegCloseKey(keyopen)
|
||||
except:
|
||||
pass
|
||||
@@ -931,7 +964,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def repair_system_restrictions(self):
|
||||
try:
|
||||
Permission = ["NoControlPanel", "NoDrives", "NoControlPanel", "NoFileMenu", "NoFind", "NoRealMode", "NoRecentDocsMenu","NoSetFolders",
|
||||
Permission = ["NoControlPanel", "NoDrives", "NoFileMenu", "NoFind", "NoRealMode", "NoRecentDocsMenu","NoSetFolders",
|
||||
"NoSetFolderOptions", "NoViewOnDrive", "NoClose", "NoRun", "NoDesktop", "NoLogOff", "NoFolderOptions", "RestrictRun","DisableCMD",
|
||||
"NoViewContexMenu", "HideClock", "NoStartMenuMorePrograms", "NoStartMenuMyGames", "NoStartMenuMyMusic" "NoStartMenuNetworkPlaces",
|
||||
"NoStartMenuPinnedList", "NoActiveDesktop", "NoSetActiveDesktop", "NoActiveDesktopChanges", "NoChangeStartMenu", "ClearRecentDocsOnExit",
|
||||
@@ -958,7 +991,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
for key in keys:
|
||||
for i in Permission:
|
||||
try:
|
||||
time.sleep(0.01)
|
||||
win32api.RegDeleteValue(key,i)
|
||||
except:
|
||||
pass
|
||||
@@ -987,11 +1019,12 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def Clean_System_Files(self):
|
||||
try:
|
||||
if QMessageBox.warning(self,self.text_Translate("清理系統垃圾"),self.text_Translate("您確定要清理系統垃圾嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要清理系統垃圾嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.total_deleted_size = 0
|
||||
self.traverse_temp_files(f"C:/Users/{os.getlogin()}/AppData/Local/Temp")
|
||||
self.traverse_temp_files(f"C:/Windows/Temp")
|
||||
self.traverse_temp_files(f"C:/$Recycle.Bin")
|
||||
QMessageBox.information(self,self.text_Translate("完成"),self.text_Translate(f"成功清理了 {self.total_deleted_size} 位元的系統垃圾"),QMessageBox.Ok)
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate(f"成功清理了 {self.total_deleted_size} 位元的系統垃圾"),QMessageBox.Ok)
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
@@ -1003,25 +1036,61 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
if os.path.isdir(fullpath):
|
||||
self.traverse_temp_files(fullpath)
|
||||
else:
|
||||
self.total_deleted_size += os.path.getsize(fullpath)
|
||||
file_size = os.path.getsize(fullpath)
|
||||
os.remove(fullpath)
|
||||
self.total_deleted_size += file_size
|
||||
except:
|
||||
continue
|
||||
|
||||
def Enable_Safe_Mode(self):
|
||||
def Get_Software_Window(self):
|
||||
try:
|
||||
if QMessageBox.warning(self,self.text_Translate("啟用安全模式"),self.text_Translate("您確定要啟用安全模式嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
subprocess.run("bcdedit /set {default} safeboot minimal", check=True)
|
||||
if QMessageBox.warning(self,self.text_Translate("重啟"),self.text_Translate("使用此選項需要重啟,您確定要重啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
subprocess.run("shutdown -r -t 0", check=True)
|
||||
self.block_window = False
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("請選擇要攔截的軟體彈窗"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
while self.block_window == False:
|
||||
window_name = str(win32gui.GetWindowText(win32gui.GetForegroundWindow()))
|
||||
QApplication.processEvents()
|
||||
if window_name not in ["", "PYAS"]:
|
||||
if window_name not in self.blocklist:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate(f"您確定要攔截 {window_name} 嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.blocklist.append(window_name)
|
||||
with open("C:/Windows/SysWOW64/PYAS/Blocklist.txt", "a+", encoding="utf-8") as f:
|
||||
f.write(f'{window_name}\n')
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate(f"成功增加到彈窗攔截: ")+window_name,QMessageBox.Ok)
|
||||
except:
|
||||
self.pyas_bug_log('增加到彈窗攔截失敗')
|
||||
elif QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate(f"您確定要取消攔截 {window_name} 嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.blocklist.remove(window_name)
|
||||
with open("C:/Windows/SysWOW64/PYAS/Blocklist.txt", "w", encoding="utf-8") as f:
|
||||
for window_name in self.blocklist:
|
||||
f.write(f'{window_name}\n')
|
||||
QMessageBox.information(self,self.text_Translate("成功"),self.text_Translate(f"成功取消彈窗攔截: ")+window_name,QMessageBox.Ok)
|
||||
except:
|
||||
self.pyas_bug_log('取消到彈窗攔截失敗')
|
||||
self.block_window = True
|
||||
self.block_window_threading_init()
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
|
||||
def Disable_Safe_Mode(self):
|
||||
def block_window_threading_init(self):
|
||||
self.block_window = True
|
||||
Thread(target=self.block_software_window).start()
|
||||
|
||||
def block_software_window(self):
|
||||
while self.block_window:
|
||||
time.sleep(0.2)
|
||||
for window_name in self.blocklist:
|
||||
try:
|
||||
win32gui.PostMessage(win32gui.FindWindow(None, window_name), win32con.WM_SYSCOMMAND, win32con.SC_CLOSE, 0)
|
||||
except:
|
||||
pass
|
||||
|
||||
def Repair_System_Network(self):
|
||||
try:
|
||||
if QMessageBox.warning(self,self.text_Translate("禁用安全模式"),self.text_Translate("您確定要禁用安全模式嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
subprocess.run("bcdedit /deletevalue {current} safeboot", check=True)
|
||||
if QMessageBox.warning(self,self.text_Translate("重啟"),self.text_Translate("使用此選項需要重啟,您確定要重啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("您確定要修復系統網路嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
subprocess.run("netsh winsock reset", check=True)
|
||||
if QMessageBox.warning(self,self.text_Translate("警告"),self.text_Translate("使用此選項需要重啟,您確定要重啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
subprocess.run("shutdown -r -t 0", check=True)
|
||||
except Exception as e:
|
||||
self.pyas_bug_log(e)
|
||||
@@ -1033,22 +1102,18 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
def Process_list(self):
|
||||
try:
|
||||
self.Process_list_app = []
|
||||
self.Process_list_app_exe = []
|
||||
self.Process_list_app_pid = []
|
||||
self.Process_list_app_name = []
|
||||
self.Process_list_app_user = []
|
||||
for p in psutil.process_iter():
|
||||
self.Process_list_iter = psutil.process_iter()
|
||||
for p in self.Process_list_iter:
|
||||
try:
|
||||
self.Process_list_app.append(f"{p.name()} ({p.pid}) > {p.exe()}")
|
||||
self.Process_list_app_pid.append(p.pid)
|
||||
self.Process_list_app_exe.append(p.exe())
|
||||
self.Process_list_app_name.append(p.name())
|
||||
self.Process_list_app_user.append(p.username())
|
||||
QApplication.processEvents()
|
||||
except:
|
||||
pass
|
||||
if len(self.Process_list_app_name) != self.Process_quantity:
|
||||
self.Process_quantity = len(self.Process_list_app_name)
|
||||
self.Process_list_all_pid = self.Process_list_app_pid
|
||||
if len(self.Process_list_app_pid) != self.Process_quantity:
|
||||
self.Process_quantity = len(self.Process_list_app_pid)
|
||||
self.ui.Process_Total_View.setText(str(self.Process_quantity))
|
||||
self.Process_sim.setStringList(self.Process_list_app)
|
||||
self.ui.Process_list.setModel(self.Process_sim)
|
||||
@@ -1057,17 +1122,12 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def Process_list_Menu(self,pos):
|
||||
try:
|
||||
self.item = self.ui.Process_list.selectedIndexes()
|
||||
for i in self.item:
|
||||
item = i.row()
|
||||
self.pid = self.Process_list_app_pid[item]
|
||||
self.exefile = self.Process_list_app_exe[item]
|
||||
self.exename = self.Process_list_app_name[item]
|
||||
for i in self.ui.Process_list.selectedIndexes():
|
||||
self.pid = self.Process_list_all_pid[i.row()]
|
||||
self.Process_popMenu = QMenu()
|
||||
self.kill_Process = QAction(self.text_Translate("結束進程"),self)
|
||||
self.Process_popMenu.addAction(self.kill_Process)
|
||||
ques = self.Process_popMenu.exec_(self.ui.Process_list.mapToGlobal(pos))
|
||||
if ques == self.kill_Process:
|
||||
if self.Process_popMenu.exec_(self.ui.Process_list.mapToGlobal(pos)) == self.kill_Process:
|
||||
for p in psutil.process_iter():
|
||||
if p.pid == self.pid:
|
||||
p.kill()
|
||||
@@ -1081,7 +1141,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
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);}""")
|
||||
self.system_notification(self.text_Translate("進程防護已關閉"))
|
||||
else:
|
||||
self.proc_protect = True
|
||||
self.ui.Protection_switch_Button.setText(self.text_Translate("已開啟"))
|
||||
@@ -1097,7 +1156,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
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);}""")
|
||||
self.system_notification(self.text_Translate("檔案防護已關閉"))
|
||||
else:
|
||||
self.file_protect = True
|
||||
self.ui.Protection_switch_Button_2.setText(self.text_Translate("已開啟"))
|
||||
@@ -1115,7 +1173,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
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);}""")
|
||||
self.system_notification(self.text_Translate("引導分區防護已關閉"))
|
||||
else:
|
||||
self.mbr_protect = True
|
||||
self.ui.Protection_switch_Button_3.setText(self.text_Translate("已開啟"))
|
||||
@@ -1131,7 +1188,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
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);}""")
|
||||
self.system_notification(self.text_Translate("註冊表防護已關閉"))
|
||||
else:
|
||||
self.reg_protect = True
|
||||
self.ui.Protection_switch_Button_4.setText(self.text_Translate("已開啟"))
|
||||
@@ -1147,7 +1203,6 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
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);}""")
|
||||
self.system_notification(self.text_Translate("增強防護已關閉"))
|
||||
else:
|
||||
self.enh_protect = True
|
||||
self.ui.Protection_switch_Button_5.setText(self.text_Translate("已開啟"))
|
||||
@@ -1158,52 +1213,52 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
|
||||
def protect_system_processes(self):
|
||||
while self.proc_protect:
|
||||
time.sleep(0.2)
|
||||
for p in psutil.process_iter():
|
||||
try:
|
||||
time.sleep(0.001)
|
||||
file, name = str(p.exe()).replace("\\", "/"), str(p.name())
|
||||
if self.pyas == file or file in self.whitelist or ":/Windows" in file or ":/Program" in file or "AppData" in file:
|
||||
if file == self.pyas or file in self.whitelist:
|
||||
continue
|
||||
elif self.high_sensitivity == 0:
|
||||
if self.api_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("惡意軟體攔截: ")+name)
|
||||
elif self.pe_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("可疑檔案攔截: ")+name)
|
||||
elif self.high_sensitivity == 1:
|
||||
if self.sign_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("無效簽名攔截: ")+name)
|
||||
elif self.api_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("惡意軟體攔截: ")+name)
|
||||
elif self.pe_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("可疑檔案攔截: ")+name)
|
||||
elif ":/Windows" in file or ":/Program" in file or "AppData" in file:
|
||||
continue
|
||||
elif file in ["","Registry","vmmemCmZygote","MemCompression"]:
|
||||
continue
|
||||
elif self.high_sensitivity == 1 and self.sign_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("無效簽名攔截: ")+name)
|
||||
elif self.api_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("惡意軟體攔截: ")+name)
|
||||
elif self.pe_scan(file):
|
||||
p.kill()
|
||||
self.system_notification(self.text_Translate("可疑檔案攔截: ")+name)
|
||||
else:
|
||||
self.whitelist.append(str(file.replace("\\", "/")))#
|
||||
gc.collect()
|
||||
except:
|
||||
pass
|
||||
|
||||
def protect_system_file(self,path):
|
||||
sflist = [".exe",".dll",".com",".msi",".js",".vbs",".xls",".xlsx",".doc",".docx"]
|
||||
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 self.file_protect:
|
||||
try:
|
||||
for action, file in win32file.ReadDirectoryChangesW(hDir,1024,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):
|
||||
file = str(f"{path}{file}").replace("\\", "/")
|
||||
if self.pyas == file or file in self.whitelist or ":/$Recycle.Bin" in file or ":/Windows" in file:
|
||||
if file == self.pyas or file in self.whitelist:
|
||||
continue
|
||||
elif action and str(os.path.splitext(file)[1]).lower() in sflist:
|
||||
elif ":/$Recycle.Bin" in file or ":/Windows" in file or ":/Program" in file:
|
||||
continue
|
||||
elif action == 3 and str(os.path.splitext(file)[1]).lower() in self.sflist:
|
||||
if self.sign_scan(file) and self.api_scan(file):
|
||||
os.remove(file)
|
||||
self.system_notification(self.text_Translate("病毒刪除: ")+file)
|
||||
self.system_notification(self.text_Translate("惡意軟體刪除: ")+file)
|
||||
except:
|
||||
pass
|
||||
|
||||
def protect_system_mbr_repair(self):
|
||||
while self.mbr_protect and self.mbr_value != None:
|
||||
try:
|
||||
time.sleep(0.5)
|
||||
time.sleep(0.2)
|
||||
with open(r"\\.\PhysicalDrive0", "r+b") as f:
|
||||
if f.read(512) != self.mbr_value:
|
||||
f.seek(0)
|
||||
@@ -1215,6 +1270,7 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
def protect_system_reg_repair(self):
|
||||
while self.reg_protect:
|
||||
try:
|
||||
time.sleep(0.2)
|
||||
self.repair_system_restrictions()
|
||||
except:
|
||||
pass
|
||||
@@ -1222,14 +1278,15 @@ class MainWindow_Controller(QtWidgets.QMainWindow):
|
||||
def protect_system_enhanced(self):
|
||||
while self.enh_protect:
|
||||
try:
|
||||
time.sleep(0.2)
|
||||
self.repair_system_file_type()
|
||||
self.repair_system_img()
|
||||
self.repair_system_image()
|
||||
self.repair_system_icon()
|
||||
except:
|
||||
pass
|
||||
|
||||
if __name__ == '__main__':
|
||||
pyas_version = "2.7.1"
|
||||
pyas_version = "2.7.6"
|
||||
QtCore.QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
|
||||
QtGui.QGuiApplication.setAttribute(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
|
||||
+16
-21
@@ -1,10 +1,9 @@
|
||||
translations = {"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On":"已開啟","Off":"已關閉"},
|
||||
"zh_CN": {"已開啟":"已开启","已關閉":"已关闭","On":"已开启","Off":"已关闭",
|
||||
"軟體":"软件","檔案":"文件","確定":"确认","設定":"设置","關於":"关于",
|
||||
"錯誤":"错误","實時":"实时","發現":"发现","本機":"电脑","資料":"数据",
|
||||
"誤殺":"误杀","開發":"开发","關閉":"关闭","資訊":"资讯","裝置":"设备",
|
||||
"錯誤":"错误","實時":"实时","發現":"发现","關閉":"关闭","裝置":"设备",
|
||||
"總數":"总数","註冊":"注册","圖標":"图标","路徑":"路径","網路":"网络",
|
||||
"編輯":"编辑","位元":"字节","增":"增","單":"单","簽":"签","無":"无",
|
||||
"位元":"字节","彈窗":"弹窗","增":"增","單":"单","簽":"签","無":"无",
|
||||
"項":"项","掃":"扫","試":"试","黃":"黄","嗎":"吗","防":"保","鑰":"钥",
|
||||
"當":"当","後":"后","護":"护","導":"导","區":"区","復":"复","攔":"拦",
|
||||
"請":"请","統":"统","刪":"删","進":"进","個":"个","選":"选","啟":"启",
|
||||
@@ -13,8 +12,7 @@ translations = {"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On":"
|
||||
"顯":"显","變":"变","戶":"户","碼":"码","雲":"云","訂":"订","稱":"称",
|
||||
"類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网","詢":"询",
|
||||
"製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红","綠":"绿",
|
||||
"態":"态","擇":"择","務":"务","連":"连","檢":"检","測":"测","庫":"库",
|
||||
"關":"关","權":"权","強":"强"},
|
||||
"態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关","強":"强",},
|
||||
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
|
||||
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
|
||||
"許可條款":"License Terms","可疑":"Suspicious ","惡意軟體":"Malware ",
|
||||
@@ -28,26 +26,23 @@ translations = {"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On":"
|
||||
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
|
||||
"失敗":"Failed ","請":"Please ","路徑":"Path ","方式":"Method ",
|
||||
"需要":"Need ","病毒":"Virus ","選擇":"Select ","返回":"Back",
|
||||
"找到":"Find ","受到":"Been ","錯誤":"Error","完成":"Complete ",
|
||||
"托盤":"Tray ","圖標":"Icon ","不安全":"Unsafe","引擎":"Engine ",
|
||||
"受到":"Been ","錯誤":"Error","完成":"Complete ","引擎":"Engine ",
|
||||
"托盤":"Tray ","圖標":"Icon ","不安全":"Unsafe","增強":"Enhanced ",
|
||||
"系統":"System ","雲端":"Cloud ","重啟":"Reboot ","修復":"Repair ",
|
||||
"裝置":"Device ","發現":"Found ","成功":"Success ","清理":"Cleanup ",
|
||||
"確定":"OK","執行":"Execute ","警告":"Warning ","搜尋":"Search ",
|
||||
"修改":"Modify ","用戶":"User ","使用":"Use ","哈希":"Hashes",
|
||||
"更多":"More","重置":"Reset ","網路":"Network ","配置":"Config ",
|
||||
"確定":"OK","執行":"Execute ","警告":"Warning ","使用":"Use ",
|
||||
"網路":"Network ","變更":"Change ","總數":"Total","結束":"End ",
|
||||
"選項":"Options ","監控":"Monitor ","連接":"Connect ","可以":"To ",
|
||||
"進程":"Process ","攔截":"Block ","引導":"Boot ","刪除":"Delete ",
|
||||
"分區":"Partition ","設定":"Settings","關於":"About ","模式":"Mode ",
|
||||
"分區":"Partition ","設定":"Settings","關於":"About","模式":"Mode ",
|
||||
"提高":"Improve ","安全":"Security ","顯色":"Color ","主題":"Themes ",
|
||||
"風險":"Risk ","介面":"GUI ","核心":"Core ","服務":"Services ",
|
||||
"管理":"Manage","相關":"Related ","全盤":"Full ","日誌":"Log",
|
||||
"管理":"Manage","所有":"All ","全盤":"Full ","取消":"Cancel ",
|
||||
"垃圾":"Junk ","位元":"byte ","本機":"Computer ","停止":"Stop ",
|
||||
"變更":"Change ","總數":"Total","結束":"End ","權限":"Permissions ",
|
||||
"增加到":"Add File To ","白名單":"White List ","黑名單":"Black List ",
|
||||
"增加":"Add","移除":"Delete","增強":"Enhanced ","項目":"Items ",
|
||||
"前":"Before","後":"After","名":"Name","開啟":"Open ","您":"You ",
|
||||
"值":"Value ","此":"This ","但":"But ","並":"And ","嗎":"",
|
||||
"高":"High ","新":"New ","是":"Is ","和":"And ","會":"Can ",
|
||||
"到":"For ","未":"Not ","已":"Has ","個":"","顯示":"","的":"",
|
||||
"不正確":"Incorrect ","軟體":"Software ","密鑰":"Key ","立即":"",
|
||||
"生成":"Create ","中":"","了":"","行":"","稱":""," ":" "}}
|
||||
"增加到":"Add File To ","白名單":"White List ","軟體":"Software ",
|
||||
"增加":"Add","移除":"Delete","項目":"Items ","生成":"Create ",
|
||||
"開啟":"Open ","您":"You ","此":"This ","並":"And ","未":"Not ",
|
||||
"高":"High ","新":"New ","和":"And ","會":"Can ","密鑰":"Key ",
|
||||
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","立即":"",
|
||||
"的":"","顯示":"","個":"","嗎":"","中":"","了":"","行":"","稱":"",
|
||||
" ":" "}}
|
||||
+1
-1
@@ -1 +1 @@
|
||||
function_list = [['_CorExeMain'], ['GetProcessHeap', 'RtlUnwind', 'RaiseException', 'HeapSize', 'TerminateProcess', 'UnhandledExceptionFilter', 'SetUnhandledExceptionFilter', 'IsDebuggerPresent', 'HeapDestroy', 'HeapCreate', 'VirtualFree', 'Sleep', 'GetStdHandle', 'GetTimeZoneInformation', 'GetACP', 'SetHandleCount', 'GetFileType', 'GetStartupInfoA', 'GetCommandLineA', 'GetEnvironmentStrings', 'FreeEnvironmentStringsW', 'GetEnvironmentStringsW', 'QueryPerformanceCounter', 'GetSystemTimeAsFileTime', 'LCMapStringA', 'LCMapStringW', 'GetConsoleCP', 'GetConsoleMode', 'GetStringTypeA', 'GetStringTypeW', 'SetStdHandle', 'WriteConsoleA', 'GetConsoleOutputCP', 'WriteConsoleW', 'GetDateFormatA', 'GetTimeFormatA', 'GetDriveTypeA', 'SetEnvironmentVariableA', 'HeapReAlloc', 'VirtualAlloc', 'SetCurrentDirectoryA', 'HeapAlloc', 'HeapFree', 'GetTickCount', 'GetCurrentDirectoryA', 'LocalFileTimeToFileTime', 'CreateFileA', 'GetShortPathNameA', 'GetVolumeInformationA', 'GetCurrentProcess', 'DuplicateHandle', 'GetFileSize', 'SetEndOfFile', 'UnlockFile', 'LockFile', 'FlushFileBuffers', 'SetFilePointer', 'WriteFile', 'ReadFile', 'DeleteFileA', 'MoveFileA', 'GetOEMCP', 'GetCPInfo', 'InterlockedIncrement', 'SystemTimeToFileTime', 'GetThreadLocale', 'GlobalFlags', 'TlsFree', 'DeleteCriticalSection', 'LocalReAlloc', 'TlsSetValue', 'TlsAlloc', 'InitializeCriticalSection', 'GlobalHandle', 'GlobalReAlloc', 'EnterCriticalSection', 'TlsGetValue', 'LeaveCriticalSection', 'LocalAlloc', 'CloseHandle', 'GetPrivateProfileStringA', 'WritePrivateProfileStringA', 'GetPrivateProfileIntA', 'GetCurrentProcessId', 'GetCurrentThread', 'ConvertDefaultLocale', 'GetModuleFileNameA', 'EnumResourceLanguagesA', 'GetLocaleInfoA', 'lstrcmpA', 'GetDiskFreeSpaceA', 'GetFullPathNameA', 'GetTempFileNameA', 'GetFileTime', 'SetFileTime', 'GetFileAttributesA', 'FreeResource', 'GetCurrentThreadId', 'GlobalGetAtomNameA', 'GlobalAddAtomA', 'GlobalFindAtomA', 'GlobalDeleteAtom', 'lstrcmpW', 'GetVersionExA', 'GlobalFree', 'GlobalAlloc', 'FormatMessageA', 'LocalFree', 'GlobalLock', 'GlobalUnlock', 'MulDiv', 'FindFirstFileA', 'FileTimeToLocalFileTime', 'FileTimeToSystemTime', 'FindNextFileA', 'FindClose', 'FreeLibrary', 'InterlockedDecrement', 'LockResource', 'SizeofResource', 'LoadResource', 'FindResourceA', 'ExitProcess', 'GetVersion', 'CompareStringA', 'GetModuleHandleA', 'LoadLibraryA', 'GetProcAddress', 'lstrcmpiA', 'SetLastError', 'GetLastError', 'InterlockedExchange', 'GetStringTypeExA', 'MultiByteToWideChar', 'CompareStringW', 'WideCharToMultiByte', 'lstrlenA', 'FreeEnvironmentStringsA', 'GetComputerNameA', 'CopyAcceleratorTableA', 'CreateMenu', 'PostThreadMessageA', 'GetTabbedTextExtentA', 'RegisterClipboardFormatA', 'GetSysColorBrush', 'UnregisterClassA', 'LoadCursorA', 'DestroyCursor', 'SetCursorPos', 'SetCapture', 'RedrawWindow', 'InflateRect', 'UnpackDDElParam', 'ReuseDDElParam', 'LoadMenuA', 'DestroyMenu', 'ReleaseCapture', 'LoadAcceleratorsA', 'InsertMenuItemA', 'CreatePopupMenu', 'BringWindowToTop', 'SetMenu', 'TranslateAcceleratorA', 'IsZoomed', 'WindowFromPoint', 'KillTimer', 'SetTimer', 'SetRect', 'SetParent', 'GetSystemMenu', 'DeleteMenu', 'SetRectEmpty', 'IsRectEmpty', 'GetDesktopWindow', 'CreateDialogIndirectParamA', 'GetNextDlgTabItem', 'EndDialog', 'GetMessageA', 'TranslateMessage', 'GetActiveWindow', 'GetCursorPos', 'ValidateRect', 'GetWindowThreadProcessId', 'ShowOwnedPopups', 'SetCursor', 'PostQuitMessage', 'IsWindowEnabled', 'SetWindowTextA', 'IsDialogMessageA', 'SetDlgItemTextA', 'RegisterWindowMessageA', 'LoadIconA', 'SendDlgItemMessageA', 'WinHelpA', 'GetCapture', 'SetWindowsHookExA', 'CallNextHookEx', 'GetClassNameA', 'SetPropA', 'GetPropA', 'RemovePropA', 'SetFocus', 'GetWindowTextLengthA', 'GetWindowTextA', 'GetLastActivePopup', 'SetActiveWindow', 'DispatchMessageA', 'BeginDeferWindowPos', 'EndDeferWindowPos', 'GetDlgItem', 'GetTopWindow', 'DestroyWindow', 'GetMessageTime', 'GetMessagePos', 'PeekMessageA', 'MapWindowPoints', 'ScrollWindow', 'TrackPopupMenu', 'GetKeyState', 'SetScrollRange', 'GetScrollRange', 'SetScrollPos', 'GetScrollPos', 'SetForegroundWindow', 'ShowScrollBar', 'IsWindowVisible', 'GetMenu', 'PostMessageA', 'MessageBoxA', 'CreateWindowExA', 'GetClassInfoExA', 'GetClassInfoA', 'RegisterClassA', 'EqualRect', 'DeferWindowPos', 'GetScrollInfo', 'SetScrollInfo', 'PtInRect', 'DefWindowProcA', 'CallWindowProcA', 'SetWindowPos', 'OffsetRect', 'IntersectRect', 'SystemParametersInfoA', 'GetWindowPlacement', 'GetWindowRect', 'GetSystemMetrics', 'GetWindow', 'GetMenuStringA', 'AppendMenuA', 'GetMenuItemID', 'InsertMenuA', 'GetMenuItemCount', 'GetSubMenu', 'RemoveMenu', 'GetSysColor', 'EndPaint', 'BeginPaint', 'GetWindowDC', 'ClientToScreen', 'ScreenToClient', 'GrayStringA', 'DrawTextExA', 'DrawTextA', 'TabbedTextOutA', 'FillRect', 'SetWindowRgn', 'DrawIcon', 'FindWindowA', 'LockWindowUpdate', 'GetDCEx', 'DestroyIcon', 'GetClassLongA', 'GetMenuItemInfoA', 'GetDlgCtrlID', 'IsChild', 'InvalidateRect', 'IsIconic', 'AdjustWindowRectEx',Line truncated
|
||||
function_list = [['_CorExeMain'], ['GetProcessHeap', 'RtlUnwind', 'RaiseException', 'HeapSize', 'TerminateProcess', 'UnhandledExceptionFilter', 'SetUnhandledExceptionFilter', 'IsDebuggerPresent', 'HeapDestroy', 'HeapCreate', 'VirtualFree', 'Sleep', 'GetStdHandle', 'GetTimeZoneInformation', 'GetACP', 'SetHandleCount', 'GetFileType', 'GetStartupInfoA', 'GetCommandLineA', 'GetEnvironmentStrings', 'FreeEnvironmentStringsW', 'GetEnvironmentStringsW', 'QueryPerformanceCounter', 'GetSystemTimeAsFileTime', 'LCMapStringA', 'LCMapStringW', 'GetConsoleCP', 'GetConsoleMode', 'GetStringTypeA', 'GetStringTypeW', 'SetStdHandle', 'WriteConsoleA', 'GetConsoleOutputCP', 'WriteConsoleW', 'GetDateFormatA', 'GetTimeFormatA', 'GetDriveTypeA', 'SetEnvironmentVariableA', 'HeapReAlloc', 'VirtualAlloc', 'SetCurrentDirectoryA', 'HeapAlloc', 'HeapFree', 'GetTickCount', 'GetCurrentDirectoryA', 'LocalFileTimeToFileTime', 'CreateFileA', 'GetShortPathNameA', 'GetVolumeInformationA', 'GetCurrentProcess', 'DuplicateHandle', 'GetFileSize', 'SetEndOfFile', 'UnlockFile', 'LockFile', 'FlushFileBuffers', 'SetFilePointer', 'WriteFile', 'ReadFile', 'DeleteFileA', 'MoveFileA', 'GetOEMCP', 'GetCPInfo', 'InterlockedIncrement', 'SystemTimeToFileTime', 'GetThreadLocale', 'GlobalFlags', 'TlsFree', 'DeleteCriticalSection', 'LocalReAlloc', 'TlsSetValue', 'TlsAlloc', 'InitializeCriticalSection', 'GlobalHandle', 'GlobalReAlloc', 'EnterCriticalSection', 'TlsGetValue', 'LeaveCriticalSection', 'LocalAlloc', 'CloseHandle', 'GetPrivateProfileStringA', 'WritePrivateProfileStringA', 'GetPrivateProfileIntA', 'GetCurrentProcessId', 'GetCurrentThread', 'ConvertDefaultLocale', 'GetModuleFileNameA', 'EnumResourceLanguagesA', 'GetLocaleInfoA', 'lstrcmpA', 'GetDiskFreeSpaceA', 'GetFullPathNameA', 'GetTempFileNameA', 'GetFileTime', 'SetFileTime', 'GetFileAttributesA', 'FreeResource', 'GetCurrentThreadId', 'GlobalGetAtomNameA', 'GlobalAddAtomA', 'GlobalFindAtomA', 'GlobalDeleteAtom', 'lstrcmpW', 'GetVersionExA', 'GlobalFree', 'GlobalAlloc', 'FormatMessageA', 'LocalFree', 'GlobalLock', 'GlobalUnlock', 'MulDiv', 'FindFirstFileA', 'FileTimeToLocalFileTime', 'FileTimeToSystemTime', 'FindNextFileA', 'FindClose', 'FreeLibrary', 'InterlockedDecrement', 'LockResource', 'SizeofResource', 'LoadResource', 'FindResourceA', 'ExitProcess', 'GetVersion', 'CompareStringA', 'GetModuleHandleA', 'LoadLibraryA', 'GetProcAddress', 'lstrcmpiA', 'SetLastError', 'GetLastError', 'InterlockedExchange', 'GetStringTypeExA', 'MultiByteToWideChar', 'CompareStringW', 'WideCharToMultiByte', 'lstrlenA', 'FreeEnvironmentStringsA', 'GetComputerNameA', 'CopyAcceleratorTableA', 'CreateMenu', 'PostThreadMessageA', 'GetTabbedTextExtentA', 'RegisterClipboardFormatA', 'GetSysColorBrush', 'UnregisterClassA', 'LoadCursorA', 'DestroyCursor', 'SetCursorPos', 'SetCapture', 'RedrawWindow', 'InflateRect', 'UnpackDDElParam', 'ReuseDDElParam', 'LoadMenuA', 'DestroyMenu', 'ReleaseCapture', 'LoadAcceleratorsA', 'InsertMenuItemA', 'CreatePopupMenu', 'BringWindowToTop', 'SetMenu', 'TranslateAcceleratorA', 'IsZoomed', 'WindowFromPoint', 'KillTimer', 'SetTimer', 'SetRect', 'SetParent', 'GetSystemMenu', 'DeleteMenu', 'SetRectEmpty', 'IsRectEmpty', 'GetDesktopWindow', 'CreateDialogIndirectParamA', 'GetNextDlgTabItem', 'EndDialog', 'GetMessageA', 'TranslateMessage', 'GetActiveWindow', 'GetCursorPos', 'ValidateRect', 'GetWindowThreadProcessId', 'ShowOwnedPopups', 'SetCursor', 'PostQuitMessage', 'IsWindowEnabled', 'SetWindowTextA', 'IsDialogMessageA', 'SetDlgItemTextA', 'RegisterWindowMessageA', 'LoadIconA', 'SendDlgItemMessageA', 'WinHelpA', 'GetCapture', 'SetWindowsHookExA', 'CallNextHookEx', 'GetClassNameA', 'SetPropA', 'GetPropA', 'RemovePropA', 'SetFocus', 'GetWindowTextLengthA', 'GetWindowTextA', 'GetLastActivePopup', 'SetActiveWindow', 'DispatchMessageA', 'BeginDeferWindowPos', 'EndDeferWindowPos', 'GetDlgItem', 'GetTopWindow', 'DestroyWindow', 'GetMessageTime', 'GetMessagePos', 'PeekMessageA', 'MapWindowPoints', 'ScrollWindow', 'TrackPopupMenu', 'GetKeyState', 'SetScrollRange', 'GetScrollRange', 'SetScrollPos', 'GetScrollPos', 'SetForegroundWindow', 'ShowScrollBar', 'IsWindowVisible', 'GetMenu', 'PostMessageA', 'MessageBoxA', 'CreateWindowExA', 'GetClassInfoExA', 'GetClassInfoA', 'RegisterClassA', 'EqualRect', 'DeferWindowPos', 'GetScrollInfo', 'SetScrollInfo', 'PtInRect', 'DefWindowProcA', 'CallWindowProcA', 'SetWindowPos', 'OffsetRect', 'IntersectRect', 'SystemParametersInfoA', 'GetWindowPlacement', 'GetWindowRect', 'GetSystemMetrics', 'GetWindow', 'GetMenuStringA', 'AppendMenuA', 'GetMenuItemID', 'InsertMenuA', 'GetMenuItemCount', 'GetSubMenu', 'RemoveMenu', 'GetSysColor', 'EndPaint', 'BeginPaint', 'GetWindowDC', 'ClientToScreen', 'ScreenToClient', 'GrayStringA', 'DrawTextExA', 'DrawTextA', 'TabbedTextOutA', 'FillRect', 'SetWindowRgn', 'DrawIcon', 'FindWindowA', 'LockWindowUpdate', 'GetDCEx', 'DestroyIcon', 'GetClassLongA', 'GetMenuItemInfoA', 'GetDlgCtrlID', 'IsChild', 'InvalidateRect', 'IsIconic', 'AdjustWindowRectEx',Line truncated
|
||||
+55
-55
@@ -499,7 +499,7 @@ class Ui_MainWindow(object):
|
||||
self.Virus_Scan_title.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.Virus_Scan_title.setObjectName("Virus_Scan_title")
|
||||
self.Virus_Scan_text = QtWidgets.QLabel(self.Virus_Scan_widget)
|
||||
self.Virus_Scan_text.setGeometry(QtCore.QRect(45, 70, 581, 81))
|
||||
self.Virus_Scan_text.setGeometry(QtCore.QRect(45, 70, 581, 71))
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Microsoft YaHei")
|
||||
font.setPointSize(13)
|
||||
@@ -1256,36 +1256,6 @@ class Ui_MainWindow(object):
|
||||
self.System_Process_Manage_Button.setCheckable(False)
|
||||
self.System_Process_Manage_Button.setObjectName("System_Process_Manage_Button")
|
||||
self.System_verticalLayout.addWidget(self.System_Process_Manage_Button)
|
||||
self.Repair_System_Files_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.Repair_System_Files_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Repair_System_Files_Button.setSizePolicy(sizePolicy)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Microsoft YaHei")
|
||||
font.setPointSize(12)
|
||||
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
|
||||
self.Repair_System_Files_Button.setFont(font)
|
||||
self.Repair_System_Files_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Repair_System_Files_Button.setStyleSheet("QPushButton\n"
|
||||
"{\n"
|
||||
" border:none;\n"
|
||||
" background-color:rgba(20,20,20,30);\n"
|
||||
" border-radius: 15px;\n"
|
||||
"}\n"
|
||||
"QPushButton:hover\n"
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,50);\n"
|
||||
"}\n"
|
||||
"QPushButton:pressed\n"
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,70);\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")
|
||||
self.System_verticalLayout.addWidget(self.Repair_System_Files_Button)
|
||||
self.Clean_System_Files_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
@@ -1316,19 +1286,19 @@ class Ui_MainWindow(object):
|
||||
self.Clean_System_Files_Button.setCheckable(False)
|
||||
self.Clean_System_Files_Button.setObjectName("Clean_System_Files_Button")
|
||||
self.System_verticalLayout.addWidget(self.Clean_System_Files_Button)
|
||||
self.Enable_Safe_Mode_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
self.Repair_System_Files_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.Enable_Safe_Mode_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Enable_Safe_Mode_Button.setSizePolicy(sizePolicy)
|
||||
sizePolicy.setHeightForWidth(self.Repair_System_Files_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Repair_System_Files_Button.setSizePolicy(sizePolicy)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Microsoft YaHei")
|
||||
font.setPointSize(12)
|
||||
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
|
||||
self.Enable_Safe_Mode_Button.setFont(font)
|
||||
self.Enable_Safe_Mode_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Enable_Safe_Mode_Button.setStyleSheet("QPushButton\n"
|
||||
self.Repair_System_Files_Button.setFont(font)
|
||||
self.Repair_System_Files_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Repair_System_Files_Button.setStyleSheet("QPushButton\n"
|
||||
"{\n"
|
||||
" border:none;\n"
|
||||
" background-color:rgba(20,20,20,30);\n"
|
||||
@@ -1342,23 +1312,23 @@ class Ui_MainWindow(object):
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,70);\n"
|
||||
"}")
|
||||
self.Enable_Safe_Mode_Button.setIconSize(QtCore.QSize(16, 16))
|
||||
self.Enable_Safe_Mode_Button.setCheckable(False)
|
||||
self.Enable_Safe_Mode_Button.setObjectName("Enable_Safe_Mode_Button")
|
||||
self.System_verticalLayout.addWidget(self.Enable_Safe_Mode_Button)
|
||||
self.Disable_Safe_Mode_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
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")
|
||||
self.System_verticalLayout.addWidget(self.Repair_System_Files_Button)
|
||||
self.Repair_System_Network_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.Disable_Safe_Mode_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Disable_Safe_Mode_Button.setSizePolicy(sizePolicy)
|
||||
sizePolicy.setHeightForWidth(self.Repair_System_Network_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Repair_System_Network_Button.setSizePolicy(sizePolicy)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Microsoft YaHei")
|
||||
font.setPointSize(12)
|
||||
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
|
||||
self.Disable_Safe_Mode_Button.setFont(font)
|
||||
self.Disable_Safe_Mode_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Disable_Safe_Mode_Button.setStyleSheet("QPushButton\n"
|
||||
self.Repair_System_Network_Button.setFont(font)
|
||||
self.Repair_System_Network_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Repair_System_Network_Button.setStyleSheet("QPushButton\n"
|
||||
"{\n"
|
||||
" border:none;\n"
|
||||
" background-color:rgba(20,20,20,30);\n"
|
||||
@@ -1372,10 +1342,40 @@ class Ui_MainWindow(object):
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,70);\n"
|
||||
"}")
|
||||
self.Disable_Safe_Mode_Button.setIconSize(QtCore.QSize(16, 16))
|
||||
self.Disable_Safe_Mode_Button.setCheckable(False)
|
||||
self.Disable_Safe_Mode_Button.setObjectName("Disable_Safe_Mode_Button")
|
||||
self.System_verticalLayout.addWidget(self.Disable_Safe_Mode_Button)
|
||||
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")
|
||||
self.System_verticalLayout.addWidget(self.Repair_System_Network_Button)
|
||||
self.Window_Block_Button = QtWidgets.QPushButton(self.verticalLayoutWidget_4)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.Window_Block_Button.sizePolicy().hasHeightForWidth())
|
||||
self.Window_Block_Button.setSizePolicy(sizePolicy)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("Microsoft YaHei")
|
||||
font.setPointSize(12)
|
||||
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
|
||||
self.Window_Block_Button.setFont(font)
|
||||
self.Window_Block_Button.setFocusPolicy(QtCore.Qt.StrongFocus)
|
||||
self.Window_Block_Button.setStyleSheet("QPushButton\n"
|
||||
"{\n"
|
||||
" border:none;\n"
|
||||
" background-color:rgba(20,20,20,30);\n"
|
||||
" border-radius: 15px;\n"
|
||||
"}\n"
|
||||
"QPushButton:hover\n"
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,50);\n"
|
||||
"}\n"
|
||||
"QPushButton:pressed\n"
|
||||
"{\n"
|
||||
" background-color:rgba(20,20,20,70);\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);")
|
||||
@@ -1745,8 +1745,8 @@ class Ui_MainWindow(object):
|
||||
self.Navigation_Bar.raise_()
|
||||
self.Protection_widget.raise_()
|
||||
self.About_widget.raise_()
|
||||
self.Tools_widget.raise_()
|
||||
self.Virus_Scan_widget.raise_()
|
||||
self.Tools_widget.raise_()
|
||||
self.Setting_widget.raise_()
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
@@ -1802,10 +1802,10 @@ class Ui_MainWindow(object):
|
||||
self.Process_Total_title.setText(_translate("MainWindow", "進程總數:"))
|
||||
self.More_Tools_Back_Button.setText(_translate("MainWindow", "工具>"))
|
||||
self.System_Process_Manage_Button.setText(_translate("MainWindow", "系統進程管理"))
|
||||
self.Repair_System_Files_Button.setText(_translate("MainWindow", "修復系統檔案"))
|
||||
self.Clean_System_Files_Button.setText(_translate("MainWindow", "清理系統檔案"))
|
||||
self.Enable_Safe_Mode_Button.setText(_translate("MainWindow", "啟動安全模式"))
|
||||
self.Disable_Safe_Mode_Button.setText(_translate("MainWindow", "關閉安全模式"))
|
||||
self.Repair_System_Files_Button.setText(_translate("MainWindow", "修復系統檔案"))
|
||||
self.Repair_System_Network_Button.setText(_translate("MainWindow", "修復系統網路"))
|
||||
self.Window_Block_Button.setText(_translate("MainWindow", "軟體彈窗攔截"))
|
||||
self.high_sensitivity_title.setText(_translate("MainWindow", "高靈敏度模式"))
|
||||
self.high_sensitivity_illustrate.setText(_translate("MainWindow", "啟用此選項可以提高引擎的靈敏度"))
|
||||
self.high_sensitivity_switch_Button.setText(_translate("MainWindow", "已關閉"))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import pyinstaller_versionfile
|
||||
pyinstaller_versionfile.create_versionfile(
|
||||
output_file="versionfile.txt",
|
||||
version='2.7.1',
|
||||
version='2.7.6',
|
||||
company_name="PYAS Security",
|
||||
file_description="Python Antivirus Software",
|
||||
internal_name="PYAS",
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# PYAS (Python Antivirus Software)
|
||||

|
||||

|
||||
|
||||
|
||||
## Official Website
|
||||
## Official Website
|
||||
https://pyantivirus.wixsite.com/pyas ,
|
||||
https://github.com/87owo/PYAS
|
||||
|
||||
@@ -13,9 +12,9 @@ https://github.com/87owo/PYAS/blob/main/LICENSE.md
|
||||
Windows 8.1, 10, 11 (64-bit), Ram 1GB, Rom 1GB or higher
|
||||
|
||||
## Import Module
|
||||
os, sys, time, json, psutil, struct, win32api, win32con, requests, socket, platform, cryptocode, subprocess, pefile, hashlib, PYAS_Language, threading, random, PyQt5, PYAS_UI
|
||||
os, sys, time, json, psutil, ctypes, requests, subprocess, win32file, win32api, win32con, elementpath, hashlib, pefile, threading, PyQt5, PYAS_Language, PYAS_Model, PYAS_UI
|
||||
|
||||
## Special Thanks
|
||||
Wix, VirusShare, mtkiao129, LenStevens
|
||||
360, Wix, VirusShare, mtkiao129, LenStevens
|
||||
|
||||
Copyright© 2020~2023 PYAS Security By 87owo
|
||||
@@ -1,5 +0,0 @@
|
||||
psutil==5.9.5
|
||||
pywin32==306
|
||||
pefile==2023.2.7
|
||||
PyQt5==5.15.9
|
||||
requests==2.31.0
|
||||
Reference in new issue
Block a user