Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e370e776a | ||
|
|
ab6b319738 | ||
|
|
aca03cacf9 | ||
|
|
01b5e7ced0 | ||
|
|
6d8ef1d4a4 | ||
|
|
f029636757 | ||
|
|
168b396daa | ||
|
|
0873a59392 | ||
|
|
3c646f57e6 | ||
|
|
940db64678 | ||
|
|
da1c980743 | ||
|
|
e3a4b636f7 | ||
|
|
9434898efa | ||
|
|
5d1c17e6ff | ||
|
|
4f736b352a | ||
|
|
037e2fbab1 | ||
|
|
4b24858631 | ||
|
|
81904a3a7b | ||
|
|
6e63a789cb | ||
|
|
4b977ec4df | ||
|
|
fa692caaa8 | ||
|
|
7082003e4a | ||
|
|
dec35d9b8a | ||
|
|
90711465ba | ||
|
|
1bb74f20b4 | ||
|
|
b2cce37490 | ||
|
|
22e41eeacc | ||
|
|
600f2543a6 | ||
|
|
9e7185ae6d |
No files matched your search
@@ -1,9 +1,8 @@
|
||||
import os, gc, sys, time, json, psutil
|
||||
import requests, subprocess, win32con
|
||||
import win32file, win32gui, win32api
|
||||
import subprocess, requests, msvcrt
|
||||
import win32gui, win32api, win32con
|
||||
import hashlib, pefile, win32file
|
||||
import xml.etree.ElementTree as xmlet
|
||||
from hashlib import md5, sha1, sha256
|
||||
from pefile import PE, DIRECTORY_ENTRY
|
||||
from PYAS_Scripts import scripts_list
|
||||
from PYAS_Function import function_list
|
||||
from PYAS_Extension import slist, alist
|
||||
@@ -19,22 +18,22 @@ 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.8.4"
|
||||
self.ui = Ui_MainWindow()
|
||||
self.ui.setupUi(self)
|
||||
self.init_library()
|
||||
self.init_configs()
|
||||
self.init_whitelist()
|
||||
self.init_blocklist()
|
||||
self.init_tray_icon()
|
||||
self.init_virus_list()
|
||||
self.init_state_safe()
|
||||
self.init_config_path()
|
||||
self.init_config_list()
|
||||
self.init_config_boot()
|
||||
self.init_config_json()
|
||||
self.init_config_qtui()
|
||||
self.init_change_lang()
|
||||
self.init_control()
|
||||
self.init_threads()
|
||||
self.show_pyas_ui()
|
||||
|
||||
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.show()
|
||||
self.init_threads()
|
||||
|
||||
def init_threads(self):
|
||||
self.protect_proc_init()
|
||||
@@ -44,21 +43,13 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.protect_enh_init()
|
||||
self.block_window_init()
|
||||
|
||||
def init_configs(self):
|
||||
self.scan_file = False
|
||||
self.block_window = True
|
||||
self.pyas_opacity = 0
|
||||
self.pyas_version = "2.8.3"
|
||||
self.pyas = str(sys.argv[0]).replace("\\", "/")
|
||||
self.ui.Theme_White.setChecked(True)
|
||||
self.json = self.init_config_json()
|
||||
self.set_system_safe()
|
||||
self.init_config_lang()
|
||||
self.init_config_sens()
|
||||
self.init_boot_config()
|
||||
self.init_config_ui()
|
||||
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.show()
|
||||
|
||||
def init_library(self):
|
||||
def init_config_path(self):
|
||||
try:
|
||||
if not os.path.exists("C:/Windows/SysWOW64/PYAS"):
|
||||
os.makedirs("C:/Windows/SysWOW64/PYAS")
|
||||
@@ -69,47 +60,44 @@ class MainWindow_Controller(QMainWindow):
|
||||
try:
|
||||
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.bug_event(e)
|
||||
|
||||
def init_whitelist(self):
|
||||
try:
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "r", encoding="utf-8") as f:
|
||||
self.whitelist = [line.strip() for line in f.readlines()]
|
||||
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 = []
|
||||
|
||||
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:
|
||||
if os.path.exists("C:/Windows/SysWOW64/PYAS/Whitelist.txt"):
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "r", encoding="utf-8") as f:
|
||||
self.whitelist = [line.strip() for line in f.readlines()]
|
||||
self.blocklist = []
|
||||
if os.path.exists("C:/Windows/SysWOW64/PYAS/Blocklist.txt"):
|
||||
with open("C:/Windows/SysWOW64/PYAS/Blocklist.txt", "r", encoding="utf-8") as f:
|
||||
self.blocklist = [line.strip() for line in f.readlines()]
|
||||
except:
|
||||
pass
|
||||
|
||||
def init_boot_config(self):
|
||||
def init_config_boot(self):
|
||||
try:
|
||||
with open(r"\\.\PhysicalDrive0", "r+b") as f:
|
||||
self.mbr_value = f.read(512)
|
||||
if self.mbr_value[510:512] != b'\x55\xAA':
|
||||
self.mbr_value = False
|
||||
except:
|
||||
self.mbr_value = None
|
||||
self.mbr_value = False
|
||||
|
||||
def init_config_json(self):
|
||||
if not os.path.exists("C:/Windows/SysWOW64/PYAS/PYAS.json"):
|
||||
self.write_config({"language":"en_US","high_sensitivity":0,"cloud_services":1})
|
||||
with open("C:/Windows/SysWOW64/PYAS/PYAS.json", "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def init_config_lang(self):
|
||||
self.language = self.json.get("language", "en_US")
|
||||
if self.language == "zh_TW":
|
||||
self.ui.Language_Traditional_Chinese.setChecked(True)
|
||||
elif self.language == "zh_CN":
|
||||
self.ui.Language_Simplified_Chinese.setChecked(True)
|
||||
else:
|
||||
self.ui.Language_English.setChecked(True)
|
||||
self.init_lang_text()
|
||||
|
||||
def init_config_sens(self):
|
||||
self.json = json.load(f)
|
||||
self.high_sensitivity = self.json.get("high_sensitivity", 0)
|
||||
if self.high_sensitivity == 1:
|
||||
self.ui.high_sensitivity_switch_Button.setText(self.trans("已開啟"))
|
||||
@@ -122,8 +110,16 @@ class MainWindow_Controller(QMainWindow):
|
||||
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":
|
||||
self.ui.Language_Traditional_Chinese.setChecked(True)
|
||||
elif self.language == "zh_CN":
|
||||
self.ui.Language_Simplified_Chinese.setChecked(True)
|
||||
else:
|
||||
self.ui.Language_English.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)
|
||||
@@ -155,9 +151,9 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.ui.high_sensitivity_switch_Button.clicked.connect(self.change_sensitive)
|
||||
self.ui.cloud_services_switch_Button.clicked.connect(self.change_cloud_service)
|
||||
self.ui.Add_White_list_Button.clicked.connect(self.add_white_list)
|
||||
self.ui.Language_Traditional_Chinese.clicked.connect(self.change_lang)
|
||||
self.ui.Language_Simplified_Chinese.clicked.connect(self.change_lang)
|
||||
self.ui.Language_English.clicked.connect(self.change_lang)
|
||||
self.ui.Language_Traditional_Chinese.clicked.connect(self.init_change_lang)
|
||||
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_Green.clicked.connect(self.change_theme)
|
||||
@@ -165,7 +161,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.ui.Theme_Blue.clicked.connect(self.change_theme)
|
||||
self.ui.Theme_Red.clicked.connect(self.change_theme)
|
||||
|
||||
def init_config_ui(self):
|
||||
def init_config_qtui(self):
|
||||
self.ui.widget_2.lower()
|
||||
self.ui.Navigation_Bar.raise_()
|
||||
self.ui.Window_widget.raise_()
|
||||
@@ -201,7 +197,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.ui.Setting_widget.hide()
|
||||
self.ui.About_widget.hide()
|
||||
|
||||
def change_lang(self):
|
||||
def init_change_lang(self):
|
||||
try:
|
||||
self.ui.State_output.clear()
|
||||
if self.ui.Language_Traditional_Chinese.isChecked():
|
||||
@@ -316,8 +312,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(0,190,255);}""")
|
||||
|
||||
def change_animation(self,widget):
|
||||
x = 170
|
||||
y = widget.pos().y()
|
||||
x, y = 170, widget.pos().y()
|
||||
self.anim = QPropertyAnimation(widget, b"geometry")
|
||||
widget.setGeometry(QRect(x - 100,y, 671,481))
|
||||
self.anim.setKeyValueAt(0.2, QRect(x - 60,y,671,481))
|
||||
@@ -327,8 +322,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.anim.start()
|
||||
|
||||
def change_animation_2(self,nx,ny):
|
||||
x = self.ui.label.pos().x()
|
||||
y = self.ui.label.pos().y()
|
||||
x, y = self.ui.label.pos().x(), self.ui.label.pos().y()
|
||||
self.anim2 = QPropertyAnimation(self.ui.label, b"geometry")
|
||||
if y > ny:
|
||||
self.anim2.setKeyValueAt(0.4, QRect(nx,ny + 25, 5, 35))
|
||||
@@ -349,13 +343,22 @@ class MainWindow_Controller(QMainWindow):
|
||||
def change_animation_3(self,widget,time):
|
||||
self.opacity = QGraphicsOpacityEffect()
|
||||
self.opacity.setOpacity(0)
|
||||
self.opacity.i = self.opacity.opacity()
|
||||
widget.setGraphicsEffect(self.opacity)
|
||||
widget.setAutoFillBackground(True)
|
||||
self.draw(widget=widget,time=time)
|
||||
self.timer = QTimer()
|
||||
self.timer.timeout.connect(self.timeout)
|
||||
self.timer.start(0)
|
||||
|
||||
def timeout(self):
|
||||
if self.opacity.i < 1:
|
||||
self.opacity.i += 0.02
|
||||
self.opacity.setOpacity(self.opacity.i)
|
||||
else:
|
||||
self.timer.stop()
|
||||
|
||||
def change_animation_4(self,widget,time,ny,ny2):
|
||||
x = widget.pos().x()
|
||||
y = widget.pos().y()
|
||||
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))
|
||||
@@ -371,19 +374,6 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.anim.setKeyValueAt(1, QRect(x,y,nx,ny))
|
||||
self.anim.start()
|
||||
|
||||
def draw(self,widget,time):
|
||||
self.opacity.i = 0
|
||||
def timeout():
|
||||
if self.opacity.i < 100:
|
||||
self.opacity.i += 2
|
||||
self.opacity.setOpacity(self.opacity.i/100)
|
||||
widget.setGraphicsEffect(self.opacity)
|
||||
else:
|
||||
self.timer.stop()
|
||||
self.timer = QTimer()
|
||||
self.timer.timeout.connect(timeout)
|
||||
self.timer.start(5)
|
||||
|
||||
def change_state_widget(self):
|
||||
if self.ui.State_widget.isHidden():
|
||||
self.change_animation_2(20,50)
|
||||
@@ -463,8 +453,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.setWindowOpacity(self.pyas_opacity/100)
|
||||
else:
|
||||
self.timer.stop()
|
||||
x = event.x()
|
||||
y = event.y()
|
||||
x, y = event.x(), event.y()
|
||||
if event.button()==Qt.LeftButton and x >= 10 and x <= 841 and y >= 10 and y <= 49:
|
||||
self.m_flag=True
|
||||
self.m_Position=event.globalPos()-self.pos()
|
||||
@@ -509,6 +498,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
|
||||
def show_pyas_ui(self):
|
||||
self.show()
|
||||
self.pyas_opacity = 0
|
||||
while self.pyas_opacity < 100:
|
||||
time.sleep(0.001)
|
||||
self.pyas_opacity += 1
|
||||
@@ -529,22 +519,15 @@ class MainWindow_Controller(QMainWindow):
|
||||
|
||||
def closeEvent(self, event):
|
||||
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要退出 PYAS 和所有防護嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.block_window = False
|
||||
self.proc_protect = False
|
||||
self.file_protect = False
|
||||
self.mbr_protect = False
|
||||
self.reg_protect = False
|
||||
self.enh_protect = False
|
||||
self.scan_file = False
|
||||
self.tray_icon.hide()
|
||||
self.hide_pyas_ui()
|
||||
QApplication.instance().quit()
|
||||
event.ignore()
|
||||
event.accept()
|
||||
else:
|
||||
event.ignore()
|
||||
|
||||
def bug_event(self, error):
|
||||
try:
|
||||
print(f"[Error] {error}")
|
||||
QMessageBox.critical(self,self.trans("錯誤"),self.trans(f"錯誤: {error}"),QMessageBox.Ok)
|
||||
QMessageBox.critical(self,self.trans("錯誤"),error,QMessageBox.Ok)
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -552,7 +535,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
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, 5)
|
||||
self.tray_icon.showMessage(now_time, text, 5000)
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -563,49 +546,45 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.WindowMenu.addAction(Main_Settings)
|
||||
self.WindowMenu.addAction(Main_About)
|
||||
Qusetion = self.WindowMenu.exec_(self.ui.Menu_Button.mapToGlobal(QPoint(0, 30)))
|
||||
if Qusetion == Main_About:
|
||||
if self.ui.About_widget.isHidden():
|
||||
self.ui.About_widget.show()
|
||||
self.ui.About_widget.raise_()
|
||||
self.ui.Navigation_Bar.raise_()
|
||||
self.ui.Window_widget.raise_()
|
||||
self.change_animation_3(self.ui.About_widget,0.5)
|
||||
self.change_animation_5(self.ui.About_widget,170,50,671,481)
|
||||
self.setting_back()
|
||||
if Qusetion == Main_Settings:
|
||||
if self.ui.Setting_widget.isHidden():
|
||||
self.ui.Setting_widget.show()
|
||||
self.ui.About_widget.hide()
|
||||
self.ui.Setting_widget.raise_()
|
||||
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_About and self.ui.About_widget.isHidden():
|
||||
self.ui.About_widget.show()
|
||||
self.ui.About_widget.raise_()
|
||||
self.ui.Navigation_Bar.raise_()
|
||||
self.ui.Window_widget.raise_()
|
||||
self.change_animation_3(self.ui.About_widget,0.5)
|
||||
self.change_animation_5(self.ui.About_widget,170,50,671,481)
|
||||
self.setting_back()
|
||||
if Qusetion == Main_Settings and self.ui.Setting_widget.isHidden():
|
||||
self.ui.Setting_widget.show()
|
||||
self.ui.About_widget.hide()
|
||||
self.ui.Setting_widget.raise_()
|
||||
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)
|
||||
|
||||
def change_sensitive(self):
|
||||
sw_state = self.ui.high_sensitivity_switch_Button.text()
|
||||
if sw_state == self.trans("已關閉") and QMessageBox.warning(self,self.trans("警告"),self.trans("高靈敏度模式可能會誤報檔案,您確定要開啟嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.high_sensitivity = 1
|
||||
self.json["high_sensitivity"] = 1
|
||||
self.write_config(self.json)
|
||||
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);}""")
|
||||
elif sw_state == self.trans("已開啟"):
|
||||
if sw_state == self.trans("已開啟"):
|
||||
self.high_sensitivity = 0
|
||||
self.json["high_sensitivity"] = 0
|
||||
self.write_config(self.json)
|
||||
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
|
||||
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.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.write_config(self.json)
|
||||
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;}
|
||||
@@ -613,13 +592,13 @@ class MainWindow_Controller(QMainWindow):
|
||||
elif sw_state == self.trans("已開啟"):
|
||||
self.cloud_services = 0
|
||||
self.json["cloud_services"] = 0
|
||||
self.write_config(self.json)
|
||||
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);}""")
|
||||
self.write_config(self.json)
|
||||
|
||||
def set_system_safe(self):
|
||||
def init_state_safe(self):
|
||||
try:
|
||||
self.safe = True
|
||||
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
|
||||
@@ -627,7 +606,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
except:
|
||||
pass
|
||||
|
||||
def set_system_unsafe(self):
|
||||
def init_state_unsafe(self):
|
||||
try:
|
||||
self.safe = False
|
||||
self.ui.State_icon.setPixmap(QPixmap(":/icon/Close.png"))
|
||||
@@ -636,18 +615,76 @@ class MainWindow_Controller(QMainWindow):
|
||||
pass
|
||||
|
||||
def init_scan(self):
|
||||
self.scan_file = True
|
||||
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()
|
||||
self.ui.Virus_Scan_Break_Button.show()
|
||||
self.Virus_List_output=QStringListModel()
|
||||
self.Virus_List_output.setStringList(self.Virus_List)
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
self.ui.Virus_Scan_text.setText(self.trans("正在初始化中"))
|
||||
QApplication.processEvents()
|
||||
try:
|
||||
self.ui.Virus_Scan_text.setText(self.trans("正在初始化中"))
|
||||
QApplication.processEvents()
|
||||
for file in self.virus_list:
|
||||
try:
|
||||
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
|
||||
os.close(self.virus_lock[file])
|
||||
del self.virus_lock[file]
|
||||
except:
|
||||
continue
|
||||
self.scan_file = True
|
||||
self.init_virus_list()
|
||||
self.ui.Virus_Scan_Solve_Button.hide()
|
||||
self.ui.Virus_Scan_choose_widget.hide()
|
||||
self.ui.Virus_Scan_choose_Button.hide()
|
||||
self.ui.Virus_Scan_Break_Button.show()
|
||||
self.virus_list_output = QStringListModel()
|
||||
self.virus_list_output.setStringList(self.virus_list)
|
||||
self.ui.Virus_Scan_output.setModel(self.virus_list_output)
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
|
||||
def virus_solve(self):
|
||||
try:
|
||||
self.ui.Virus_Scan_Solve_Button.hide()
|
||||
for file in self.virus_list:
|
||||
try:
|
||||
self.ui.Virus_Scan_text.setText(self.trans("正在刪除: ")+file)
|
||||
QApplication.processEvents()
|
||||
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
|
||||
os.close(self.virus_lock[file])
|
||||
os.remove(file)
|
||||
except:
|
||||
continue
|
||||
self.init_state_safe()
|
||||
self.init_virus_list()
|
||||
self.virus_list_output.setStringList(self.virus_list)
|
||||
self.ui.Virus_Scan_output.setModel(self.virus_list_output)
|
||||
self.ui.Virus_Scan_text.setText(self.trans("成功: 刪除成功"))
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
|
||||
def write_scan(self, state, file):
|
||||
try:
|
||||
self.virus_list.append(file)
|
||||
self.virus_list_ui.append(f"[{state}] {file}")
|
||||
self.virus_list_output.setStringList(self.virus_list_ui)
|
||||
self.ui.Virus_Scan_output.setModel(self.virus_list_output)
|
||||
self.virus_lock[file] = os.open(file, os.O_RDWR)
|
||||
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
|
||||
except:
|
||||
pass
|
||||
|
||||
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)
|
||||
gc.collect()
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
|
||||
def virus_scan_break(self):
|
||||
self.scan_file = False
|
||||
@@ -662,57 +699,13 @@ class MainWindow_Controller(QMainWindow):
|
||||
else:
|
||||
self.ui.Virus_Scan_choose_widget.hide()
|
||||
|
||||
def write_scan(self,state,file):
|
||||
try:
|
||||
self.Virus_List.append(file)
|
||||
self.Virus_List_Ui.append(f"[{state}] {file}")
|
||||
self.Virus_List_output.setStringList(self.Virus_List_Ui)
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
except:
|
||||
pass
|
||||
|
||||
def answer_scan(self):
|
||||
if self.Virus_List == []:
|
||||
self.set_system_safe()
|
||||
self.virus_scan_break()
|
||||
text = self.trans("當前未發現病毒")
|
||||
else:
|
||||
self.virus_scan_break()
|
||||
self.set_system_unsafe()
|
||||
self.Virus_List_output.setStringList(self.Virus_List_Ui)
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
self.ui.Virus_Scan_Solve_Button.show()
|
||||
text = self.trans(f"當前發現 {len(self.Virus_List)} 個病毒")
|
||||
self.ui.Virus_Scan_text.setText(text)
|
||||
self.send_notify(text)
|
||||
|
||||
def virus_solve(self):
|
||||
try:
|
||||
self.ui.Virus_Scan_Solve_Button.hide()
|
||||
for file in self.Virus_List:
|
||||
try:
|
||||
self.ui.Virus_Scan_text.setText(self.trans("正在刪除: ")+file)
|
||||
QApplication.processEvents()
|
||||
os.remove(file)
|
||||
except:
|
||||
continue
|
||||
self.set_system_safe()
|
||||
self.Virus_List = []
|
||||
self.Virus_List_Ui = []
|
||||
self.Virus_List_output.setStringList(self.Virus_List)
|
||||
self.ui.Virus_Scan_output.setModel(self.Virus_List_output)
|
||||
self.ui.Virus_Scan_text.setText(self.trans("成功: 刪除成功"))
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
|
||||
def file_scan(self):
|
||||
try:
|
||||
file = str(QFileDialog.getOpenFileName(self,self.trans("病毒掃描"),"C:/")[0])
|
||||
if file:
|
||||
if file and file != self.pyas:
|
||||
self.init_scan()
|
||||
self.start_scan(file)
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
self.virus_scan_break()
|
||||
@@ -724,7 +717,6 @@ class MainWindow_Controller(QMainWindow):
|
||||
self.init_scan()
|
||||
self.traverse_path(path)
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
self.virus_scan_break()
|
||||
@@ -736,14 +728,13 @@ class MainWindow_Controller(QMainWindow):
|
||||
if os.path.exists(f"{chr(65+d)}:/"):
|
||||
self.traverse_path(f"{chr(65+d)}:/")
|
||||
self.answer_scan()
|
||||
gc.collect()
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
self.virus_scan_break()
|
||||
|
||||
def start_scan(self, file):
|
||||
try:
|
||||
file_type = str("."+file.split(".")[-1]).lower()
|
||||
file_type = str(f".{file.split('.')[-1]}").lower()
|
||||
if self.high_sensitivity == 1:
|
||||
if self.api_scan(file):
|
||||
self.write_scan(self.trans("惡意"),file)
|
||||
@@ -771,11 +762,11 @@ class MainWindow_Controller(QMainWindow):
|
||||
continue
|
||||
elif os.path.isdir(file):
|
||||
self.traverse_path(file)
|
||||
else:
|
||||
elif file != self.pyas:
|
||||
self.ui.Virus_Scan_text.setText(self.trans(f"正在掃描: ")+file)
|
||||
QApplication.processEvents()
|
||||
self.start_scan(file)
|
||||
gc.collect()
|
||||
gc.collect()
|
||||
except:
|
||||
continue
|
||||
|
||||
@@ -783,7 +774,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
try:
|
||||
if self.cloud_services == 1:
|
||||
with open(file, "rb") as f:
|
||||
text = str(md5(f.read()).hexdigest())
|
||||
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)
|
||||
return response.status_code == 200 and float(xmlet.fromstring(response.text).find('.//e_level').text) > 50
|
||||
@@ -792,15 +783,16 @@ class MainWindow_Controller(QMainWindow):
|
||||
|
||||
def sign_scan(self, file):
|
||||
try:
|
||||
with PE(file, fast_load=True) as pe:
|
||||
return pe.OPTIONAL_HEADER.DATA_DIRECTORY[DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]].VirtualAddress == 0
|
||||
with pefile.PE(file, fast_load=True) as pe:
|
||||
return pe.OPTIONAL_HEADER.DATA_DIRECTORY[pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]].VirtualAddress == 0
|
||||
except:
|
||||
return True
|
||||
|
||||
def scr_scan(self, file):
|
||||
def scr_scan(self, text):
|
||||
try:
|
||||
with open(file, "r", encoding="utf-8") as f:
|
||||
text = f.read()
|
||||
if os.path.isfile(text):
|
||||
with open(text, "r", encoding="utf-8") as f:
|
||||
text = f.read()
|
||||
return any(sn in text for sn in scripts_list)
|
||||
except:
|
||||
return False
|
||||
@@ -808,7 +800,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
def pe_scan(self, file):
|
||||
try:
|
||||
fn = []
|
||||
with PE(file) as pe:
|
||||
with pefile.PE(file) as pe:
|
||||
for entry in pe.DIRECTORY_ENTRY_IMPORT:
|
||||
for func in entry.imports:
|
||||
try:
|
||||
@@ -953,9 +945,9 @@ class MainWindow_Controller(QMainWindow):
|
||||
try:
|
||||
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要清理系統垃圾嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
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")
|
||||
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)
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
@@ -977,25 +969,18 @@ class MainWindow_Controller(QMainWindow):
|
||||
def add_white_list(self):
|
||||
try:
|
||||
file = str(QFileDialog.getOpenFileName(self,self.trans("增加到白名單"),"C:/")[0]).replace("\\", "/")
|
||||
if file and file != self.pyas:
|
||||
if file not in self.whitelist:
|
||||
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.whitelist.append(file.replace("\\", "/"))
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "a+", encoding="utf-8") as f:
|
||||
f.write(file.replace("\\", "/")+'\n')
|
||||
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功增加到白名單: ")+file,QMessageBox.Ok)
|
||||
except:
|
||||
self.bug_event('增加到白名單失敗')
|
||||
elif QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要取消增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
try:
|
||||
self.whitelist.remove(file.replace("\\", "/"))
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "w", encoding="utf-8") 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)
|
||||
except:
|
||||
self.bug_event('取消增加到白名單失敗')
|
||||
if file and file not in self.whitelist:
|
||||
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要增加到白名單嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
|
||||
self.whitelist.append(file)
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "a+", encoding="utf-8") 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.whitelist.remove(file)
|
||||
with open("C:/Windows/SysWOW64/PYAS/Whitelist.txt", "w", encoding="utf-8") 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)
|
||||
except Exception as e:
|
||||
self.bug_event(e)
|
||||
|
||||
@@ -1009,22 +994,16 @@ class MainWindow_Controller(QMainWindow):
|
||||
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:
|
||||
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.trans("成功"),self.trans(f"成功增加到彈窗攔截: ")+window_name,QMessageBox.Ok)
|
||||
except:
|
||||
self.bug_event('增加到彈窗攔截失敗')
|
||||
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.trans("成功"),self.trans(f"成功增加到彈窗攔截: ")+window_name,QMessageBox.Ok)
|
||||
elif QMessageBox.warning(self,self.trans("警告"),self.trans(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 block_name in self.blocklist:
|
||||
f.write(f'{block_name}\n')
|
||||
QMessageBox.information(self,self.trans("成功"),self.trans(f"成功取消彈窗攔截: ")+window_name,QMessageBox.Ok)
|
||||
except:
|
||||
self.bug_event('取消到彈窗攔截失敗')
|
||||
self.blocklist.remove(window_name)
|
||||
with open("C:/Windows/SysWOW64/PYAS/Blocklist.txt", "w", encoding="utf-8") 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.block_window = True
|
||||
self.block_window_init()
|
||||
except Exception as e:
|
||||
@@ -1060,8 +1039,7 @@ class MainWindow_Controller(QMainWindow):
|
||||
try:
|
||||
self.Process_list_app = []
|
||||
self.Process_list_app_pid = []
|
||||
self.Process_list_iter = psutil.process_iter()
|
||||
for p in self.Process_list_iter:
|
||||
for p in psutil.process_iter():
|
||||
try:
|
||||
self.Process_list_app.append(f"{p.name()} ({p.pid}) > {p.exe()}")
|
||||
self.Process_list_app_pid.append(p.pid)
|
||||
@@ -1171,67 +1149,55 @@ class MainWindow_Controller(QMainWindow):
|
||||
if p.pid not in existing_processes:
|
||||
existing_processes.add(p.pid)
|
||||
while self.proc_protect:
|
||||
try:
|
||||
time.sleep(0.1)
|
||||
for p in psutil.process_iter():
|
||||
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()
|
||||
if file == self.pyas or file in self.whitelist:
|
||||
continue
|
||||
elif ":\\Windows" in file and self.enh_protect:
|
||||
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
|
||||
if ":/Windows" in file and self.enh_protect:
|
||||
if "powershell" in name and self.api_scan(cmd[-1].split("'")[-2]):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意腳本攔截: ")+name)
|
||||
elif "cmd" in name and self.api_scan(" ".join(cmd[2:])):
|
||||
elif "cmd.exe" in name and self.api_scan(" ".join(cmd[2:])):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意腳本攔截: ")+name)
|
||||
elif "msiexec" in name and self.api_scan(cmd[-1]):
|
||||
elif self.api_scan(cmd[-1]) or self.scr_scan(cmd):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意軟體攔截: ")+name)
|
||||
elif ":\\Program" in file and self.enh_protect:
|
||||
elif ":/Program" in file and self.enh_protect:
|
||||
if self.sign_scan(file) and self.api_scan(file):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意軟體攔截: ")+name)
|
||||
elif self.api_scan(file) or self.pe_scan(file):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意軟體攔截: ")+name)
|
||||
elif self.sign_scan(file):
|
||||
self.p_name = name
|
||||
elif file != self.pyas and file not in self.whitelist:
|
||||
self.proc = p
|
||||
if self.api_scan(file) or self.pe_scan(file):
|
||||
p.kill()
|
||||
self.send_notify(self.trans("惡意軟體攔截: ")+name)
|
||||
gc.collect()
|
||||
except:
|
||||
pass
|
||||
|
||||
def protect_proc_kill(self,proc):
|
||||
try:
|
||||
for p in psutil.process_iter():
|
||||
if p.name() == proc:
|
||||
p.kill()
|
||||
return True
|
||||
return False
|
||||
except:
|
||||
return False
|
||||
except:
|
||||
pass
|
||||
|
||||
def protect_file_thread(self):
|
||||
hDir = win32file.CreateFile(f"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)
|
||||
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:
|
||||
try:
|
||||
action, file = 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)[0]
|
||||
file = str(f"C:/Users/{file}").replace("\\", "/")
|
||||
file_end = str(f".{file.split('.')[-1]}").lower()
|
||||
file_mid = str(f".{file.split('.')[-2]}").lower()
|
||||
if action == 3 and file_end in slist and self.api_scan(file):
|
||||
os.remove(file)
|
||||
self.send_notify(self.trans("惡意檔案刪除: ")+file)
|
||||
elif action == 1 and file_mid in alist and self.protect_proc_kill(self.p_name):
|
||||
self.send_notify(self.trans("勒索軟體攔截: ")+self.p_name)
|
||||
elif action == 2 and file_end in alist and self.protect_proc_kill(self.p_name):
|
||||
self.send_notify(self.trans("勒索軟體攔截: ")+self.p_name)
|
||||
elif action == 4 and file_end in alist and self.protect_proc_kill(self.p_name):
|
||||
self.send_notify(self.trans("勒索軟體攔截: ")+self.p_name)
|
||||
gc.collect()
|
||||
except:
|
||||
pass
|
||||
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):
|
||||
try:
|
||||
if action and "AppData" not in file:
|
||||
if action == 1 and str(f".{file.split('.')[-2]}").lower() in alist:
|
||||
self.proc.kill()
|
||||
self.send_notify(self.trans("勒索軟體攔截: ")+self.proc.name())
|
||||
elif action == 2 and str(f".{file.split('.')[-1]}").lower() in alist:
|
||||
if self.ransom_block:
|
||||
self.proc.kill()
|
||||
self.ransom_block = False
|
||||
self.send_notify(self.trans("勒索軟體攔截: ")+self.proc.name())
|
||||
else:
|
||||
self.ransom_block = True
|
||||
gc.collect()
|
||||
except:
|
||||
pass
|
||||
|
||||
def protect_boot_thread(self):
|
||||
while self.mbr_protect and self.mbr_value:
|
||||
@@ -1242,11 +1208,12 @@ class MainWindow_Controller(QMainWindow):
|
||||
if f.read(512) != self.mbr_value:
|
||||
f.seek(0)
|
||||
f.write(self.mbr_value)
|
||||
if self.protect_proc_kill(self.p_name):
|
||||
self.send_notify(self.trans("惡意行為攔截: ")+self.p_name)
|
||||
elif self.protect_proc_kill(self.p_name):
|
||||
self.send_notify(self.trans("惡意行為攔截: ")+self.p_name)
|
||||
self.init_boot_config()
|
||||
self.proc.kill()
|
||||
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name())
|
||||
else:
|
||||
self.proc.kill()
|
||||
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name())
|
||||
self.init_config_boot()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
function_list = [['LoadLibraryA', 'GetProcAddress', 'SetUnhandledExceptionFilter', 'GetCurrentProcess', 'TerminateProcess', 'IsProcessorFeaturePresent', 'QueryPerformanceCounter', 'GetCurrentProcessId', 'GetCurrentThreadId', 'GetSystemTimeAsFileTime', 'InitializeSListHead', 'IsDebuggerPresent', 'GetModuleHandleW', 'UnhandledExceptionFilter', 'GetDC', '?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ', '?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z', '?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ', '?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z', '??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ', '?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ', '?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z', '?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ', '?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ', '?unshift@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z', '?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z', '?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ', '?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z', '??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ', '??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z', '?in@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z', '?out@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z', '?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z', '?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ', '?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z', '?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z', '?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z', '?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ', '??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ', '?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JXZ', '?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPAD_J@Z', '?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPBD_J@Z', '??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ', '??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z', '??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ', '?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z', '?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z', '?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ', '?width@ios_base@std@@QAE_J_J@Z', '?width@ios_base@std@@QBE_JXZ', '?flags@ios_base@std@@QBEHXZ', '?good@ios_base@std@@QBE_NXZ', '?always_noconv@codecvt_base@std@@QBE_NXZ', '??Bid@locale@std@@QAEIXZ', '?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z', '??1_Lockit@std@@QAE@XZ', '??0_Lockit@std@@QAE@H@Z', '?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A', '?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ', '?uncaught_exception@std@@YA_NXZ', '?_Xout_of_range@std@@YAXPBD@Z', '?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A', '?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z', '?_Xlength_error@std@@YAXPBD@Z', '?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ', '_CxxThrowException', '__current_exception_context', '__std_exception_copy', '__std_exception_destroy', '__CxxFrameHandler3', 'memcpy', '__current_exception', 'memset', '_except_handler4_common', 'memmove', '_fseeki64', '__p__commode', 'fsetpos', 'ungetc', 'setvbuf', 'fgetpos', 'fwrite', '_set_fmode', '_get_stream_buffer_pointers', '__stdio_common_vfprintf', 'fgetc', 'fclose', 'fflush', '__acrt_iob_func', 'fputc', 'fread', '_lock_file', '_unlock_file', 'exit', '_exit', '_configure_narrow_argv', '__p___argc', '_initterm_e', '_cexit', '_c_exit', '_register_thread_local_exe_atexit_callback', '_initterm', '_set_app_type', '_get_initial_narrow_environment', '_seh_filter_exe', '_initialize_onexit_table', '_register_onexit_function', '_crt_atexit', '_controlfp_s', 'terminate', '_initialize_narrow_environment', '_invalid_parameter_noinfo_noreturn', '__p___argv', 'free', '_set_new_mode', 'malloc', '_callnewh', '__setusermatherr', '_configthreadlocale'], ['GetCurrentProcess', 'FindNextFileA', 'FindClose', 'GetSystemDirectoryA', 'DeleteFileA', 'SetFileAttributesA', 'ExitProcess', 'FLine truncated
|
||||
function_list = [['LoadLibraryA', 'GetProcAddress', 'SetUnhandledExceptionFilter', 'GetCurrentProcess', 'TerminateProcess', 'IsProcessorFeaturePresent', 'QueryPerformanceCounter', 'GetCurrentProcessId', 'GetCurrentThreadId', 'GetSystemTimeAsFileTime', 'InitializeSListHead', 'IsDebuggerPresent', 'GetModuleHandleW', 'UnhandledExceptionFilter', 'GetDC', '?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ', '?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z', '?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ', '?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z', '??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ', '?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ', '?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z', '?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ', '?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ', '?unshift@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PAD1AAPAD@Z', '?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z', '?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ', '?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z', '??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ', '??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z', '?in@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z', '?out@?$codecvt@DDU_Mbstatet@@@std@@QBEHAAU_Mbstatet@@PBD1AAPBDPAD3AAPAD@Z', '?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z', '?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ', '?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ', '?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z', '?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ', '?_Getcat@?$codecvt@DDU_Mbstatet@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z', '?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z', '?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ', '??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ', '?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JXZ', '?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPAD_J@Z', '?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE_JPBD_J@Z', '??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ', '??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z', '??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ', '?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PAD_J@Z', '?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@_JH@Z', '?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@U_Mbstatet@@@2@XZ', '?width@ios_base@std@@QAE_J_J@Z', '?width@ios_base@std@@QBE_JXZ', '?flags@ios_base@std@@QBEHXZ', '?good@ios_base@std@@QBE_NXZ', '?always_noconv@codecvt_base@std@@QBE_NXZ', '??Bid@locale@std@@QAEIXZ', '?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z', '??1_Lockit@std@@QAE@XZ', '??0_Lockit@std@@QAE@H@Z', '?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A', '?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ', '?uncaught_exception@std@@YA_NXZ', '?_Xout_of_range@std@@YAXPBD@Z', '?id@?$codecvt@DDU_Mbstatet@@@std@@2V0locale@2@A', '?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z', '?_Xlength_error@std@@YAXPBD@Z', '?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBE_JXZ', '_CxxThrowException', '__current_exception_context', '__std_exception_copy', '__std_exception_destroy', '__CxxFrameHandler3', 'memcpy', '__current_exception', 'memset', '_except_handler4_common', 'memmove', '_fseeki64', '__p__commode', 'fsetpos', 'ungetc', 'setvbuf', 'fgetpos', 'fwrite', '_set_fmode', '_get_stream_buffer_pointers', '__stdio_common_vfprintf', 'fgetc', 'fclose', 'fflush', '__acrt_iob_func', 'fputc', 'fread', '_lock_file', '_unlock_file', 'exit', '_exit', '_configure_narrow_argv', '__p___argc', '_initterm_e', '_cexit', '_c_exit', '_register_thread_local_exe_atexit_callback', '_initterm', '_set_app_type', '_get_initial_narrow_environment', '_seh_filter_exe', '_initialize_onexit_table', '_register_onexit_function', '_crt_atexit', '_controlfp_s', 'terminate', '_initialize_narrow_environment', '_invalid_parameter_noinfo_noreturn', '__p___argv', 'free', '_set_new_mode', 'malloc', '_callnewh', '__setusermatherr', '_configthreadlocale'], ['GetCurrentProcess', 'FindNextFileA', 'FindClose', 'GetSystemDirectoryA', 'DeleteFileA', 'SetFileAttributesA', 'ExitProcess', 'FLine truncated
|
||||
+1
-1
@@ -13,7 +13,7 @@ translate_dict = {"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On"
|
||||
"類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网","詢":"询",
|
||||
"製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红","綠":"绿",
|
||||
"態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关","強":"强",
|
||||
"驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开"},
|
||||
"驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开","惡":"恶"},
|
||||
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
|
||||
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
|
||||
"惡意檔案":"Virus ","惡意軟體":"Malware ","勒索軟體":"Ransom ",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import pyinstaller_versionfile
|
||||
pyinstaller_versionfile.create_versionfile(
|
||||
output_file="versionfile.txt",
|
||||
version='2.8.3',
|
||||
version='2.8.4',
|
||||
company_name="PYAS Security",
|
||||
file_description="Python Antivirus Software",
|
||||
internal_name="PYAS",
|
||||
|
||||
Reference in new issue
Block a user