Compare commits

...
29 Commits
Author SHA1 Message Date
PYDT 6e370e776a Add files via upload 2023-09-24 21:06:50 +08:00
PYDT ab6b319738 Add files via upload 2023-09-23 11:48:32 +08:00
PYDT aca03cacf9 Add files via upload 2023-09-23 00:00:56 +08:00
PYDT 01b5e7ced0 Add files via upload 2023-09-22 18:51:41 +08:00
PYDT 6d8ef1d4a4 Add files via upload 2023-09-22 18:34:39 +08:00
PYDT f029636757 Add files via upload 2023-09-22 17:42:09 +08:00
PYDT 168b396daa Add files via upload 2023-09-22 12:06:19 +08:00
PYDT 0873a59392 Add files via upload 2023-09-22 08:25:11 +08:00
PYDT 3c646f57e6 Add files via upload 2023-09-22 06:54:08 +08:00
PYDT 940db64678 Add files via upload 2023-09-22 02:39:10 +08:00
PYDT da1c980743 Add files via upload 2023-09-21 07:50:58 +08:00
PYDT e3a4b636f7 Add files via upload 2023-09-20 20:17:05 +08:00
PYDT 9434898efa Add files via upload 2023-09-20 19:54:16 +08:00
PYDT 5d1c17e6ff Add files via upload 2023-09-20 19:53:33 +08:00
PYDT 4f736b352a Add files via upload 2023-09-20 19:52:54 +08:00
PYDT 037e2fbab1 Add files via upload 2023-09-20 15:18:39 +08:00
PYDT 4b24858631 Add files via upload 2023-09-20 14:59:41 +08:00
PYDT 81904a3a7b Add files via upload 2023-09-20 12:36:14 +08:00
PYDT 6e63a789cb Add files via upload 2023-09-20 11:18:00 +08:00
PYDT 4b977ec4df Add files via upload 2023-09-20 10:05:46 +08:00
PYDT fa692caaa8 Add files via upload 2023-09-19 22:52:52 +08:00
PYDT 7082003e4a Add files via upload 2023-09-19 21:26:02 +08:00
PYDT dec35d9b8a Add files via upload 2023-09-19 21:25:42 +08:00
PYDT 90711465ba Add files via upload 2023-09-19 21:23:17 +08:00
PYDT 1bb74f20b4 Add files via upload 2023-09-19 21:22:55 +08:00
PYDT b2cce37490 Add files via upload 2023-09-19 21:22:21 +08:00
PYDT 22e41eeacc Add files via upload 2023-09-19 07:59:27 +08:00
PYDT 600f2543a6 Add files via upload 2023-09-19 00:07:05 +08:00
PYDT 9e7185ae6d Add files via upload 2023-09-18 23:56:13 +08:00
4 changed files with 255 additions and 288 deletions

No files matched your search

+252 -285
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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",