Compare commits

...
67 Commits
Author SHA1 Message Date
PYDT 5700039d42 Add files via upload 2024-06-21 18:09:06 +08:00
PYDT 22445c79d4 Add files via upload 2024-06-21 18:08:07 +08:00
PYDT 2be05ac76c Add files via upload 2024-06-20 21:06:48 +08:00
PYDT 84e397aeed Add files via upload 2024-06-20 19:45:53 +08:00
PYDT bb513b9115 Add files via upload 2024-06-20 19:45:03 +08:00
PYDT 01b680e278 Add files via upload 2024-06-19 23:15:16 +08:00
PYDT ef7c1cba2e Add files via upload 2024-06-19 22:17:23 +08:00
PYDT 40bbc57c82 Add files via upload 2024-06-19 21:51:41 +08:00
PYDT 457e5bebbb Add files via upload 2024-06-19 15:31:19 +08:00
PYDT 99abc56177 Add files via upload 2024-06-19 10:25:09 +08:00
PYDT 9eeb0b6376 Add files via upload 2024-06-19 10:23:10 +08:00
PYDT 0b2da187ee Add files via upload 2024-06-19 00:47:25 +08:00
PYDT 06f5410a4d Add files via upload 2024-06-18 22:41:34 +08:00
PYDT 2551ada3b7 Add files via upload 2024-06-18 16:00:15 +08:00
PYDT 56df08879e Delete Rules directory 2024-06-18 15:57:32 +08:00
PYDT d41685c86e Add files via upload 2024-06-17 21:08:46 +08:00
PYDT 14b942970e Add files via upload 2024-06-17 16:01:26 +08:00
PYDT b6103c845d Add files via upload 2024-06-17 10:24:41 +08:00
PYDT 7927f12e84 Add files via upload 2024-06-16 18:34:14 +08:00
PYDT 7774ff77b2 Add files via upload 2024-06-16 15:18:23 +08:00
PYDT aaa2ed7eef Add files via upload 2024-06-16 00:05:38 +08:00
PYDT b83674e9b7 Add files via upload 2024-06-15 21:42:39 +08:00
PYDT 017356780c Add files via upload 2024-06-15 21:42:02 +08:00
PYDT 45916004d2 Add files via upload 2024-06-14 12:24:23 +08:00
PYDT 388c8b615e Add files via upload 2024-06-14 09:22:05 +08:00
PYDT 4219473632 Add files via upload 2024-06-14 08:49:55 +08:00
PYDT f2283cdb7f Add files via upload 2024-06-13 22:36:25 +08:00
PYDT 72ce9cfd6b Add files via upload 2024-06-13 22:35:18 +08:00
PYDT b26375d25a Add files via upload 2024-06-12 15:40:07 +08:00
PYDT a2a823f358 Update README_zh_CN.md 2024-06-12 13:50:03 +08:00
PYDT 62164cf628 Update README_zh_TW.md 2024-06-12 13:48:43 +08:00
PYDT 0b5fc22181 Update README.md 2024-06-12 13:46:15 +08:00
PYDT 0df905f777 Update README.md 2024-06-12 13:44:28 +08:00
PYDT a539a948f6 Add files via upload 2024-06-11 19:48:57 +08:00
PYDT 6bd8364b5f Delete Driver/PYAS_Proc.sys 2024-06-11 19:48:25 +08:00
PYDT 70b70bc3e7 Add files via upload 2024-06-11 19:47:58 +08:00
PYDT ac50f8917e Add files via upload 2024-06-11 15:52:05 +08:00
PYDT f935b2c0b6 Update README_zh_CN.md 2024-06-11 15:35:46 +08:00
PYDT 245c9d1119 Update README_zh_TW.md 2024-06-11 15:35:12 +08:00
PYDT 9476313725 Update README.md 2024-06-11 15:34:25 +08:00
PYDT 2d27a74278 Add files via upload 2024-06-11 15:31:48 +08:00
PYDT 823a5115eb Add files via upload 2024-06-11 15:29:25 +08:00
PYDT 33ab1e1f5e Delete PYAS_Model.json 2024-06-11 15:25:23 +08:00
PYDT 8db984d1fd Update README_zh_TW.md 2024-06-05 15:27:55 +08:00
PYDT a00415657a Update README_zh_CN.md 2024-06-05 15:27:20 +08:00
PYDT 527837cc56 Add files via upload 2024-06-05 15:25:07 +08:00
PYDT ac9ddff8b1 Add files via upload 2024-06-05 06:46:18 +08:00
PYDT 4ebae2a167 Add files via upload 2024-06-03 18:06:13 +08:00
PYDT 11f1685f42 Add files via upload 2024-05-30 09:47:58 +08:00
PYDT 8199101891 Add files via upload 2024-05-29 14:40:48 +08:00
PYDT 4f3ce323ae Add files via upload 2024-05-29 14:09:52 +08:00
PYDT 76befc7c70 Add files via upload 2024-05-28 02:00:56 +08:00
PYDT 8b0ad06676 Update README_zh_TW.md 2024-05-24 10:43:20 +08:00
PYDT d7f091a3a9 Update README.md 2024-05-24 10:42:39 +08:00
PYDT 679b00229c Update README_zh_CN.md 2024-05-24 10:42:10 +08:00
PYDT 0cfc636fb6 Update README.md 2024-05-24 10:40:25 +08:00
PYDT bd3c31e150 Update README.md 2024-05-24 10:39:18 +08:00
PYDT 8e9547b75a Update README_zh_CN.md 2024-05-24 10:27:54 +08:00
PYDT d38ecc0f96 Update README_zh_CN.md 2024-05-24 10:26:26 +08:00
PYDT 85834497e0 Create README_zh_CN.md 2024-05-24 10:24:42 +08:00
PYDT 0d8997db02 Update README.md 2024-05-24 10:18:38 +08:00
PYDT cb53450ca5 Update and rename README_zh.md to README_zh_TW.md 2024-05-24 10:16:52 +08:00
PYDT f38ae36eb6 Update README_zh.md 2024-05-24 10:14:35 +08:00
PYDT 8218b0c8a6 Update README_zh.md 2024-05-24 10:12:48 +08:00
PYDT ea036d2d53 Update README.md 2024-05-24 10:10:21 +08:00
PYDT b163eb2cdb Update README_zh.md 2024-05-24 10:07:52 +08:00
PYDT ba3568f312 Add files via upload 2024-05-24 10:07:17 +08:00
14 changed files with 1892 additions and 153 deletions

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
@echo off
setlocal
:: Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\icacls.exe" "%SYSTEMROOT%\system32\config\system"
if %errorlevel% NEQ 0 goto NoAdmin
goto gotAdmin
:NoAdmin
echo You do not have administrator rights, please run this script as administrator.
pause
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"
set "script_dir=%~dp0"
set "script_dir=%script_dir:~0,-1%"
bcdedit -debug on
bcdedit /set testsigning on
bcdedit /deletevalue {current} safeboot
powershell.exe -ExecutionPolicy Bypass -Command ^
"$endDate = (Get-Date).AddYears(100); ^
$cert = New-SelfSignedCertificate -DnsName PYAS -CertStoreLocation cert:\LocalMachine\My -Type CodeSigning -NotAfter $endDate; ^
$pwd = ConvertTo-SecureString -String 'PYAS' -Force -AsPlainText; ^
Export-PfxCertificate -Cert $cert -FilePath '%script_dir%\PYAS.pfx' -Password $pwd;"
"%script_dir%\signtool.exe" sign /f "%script_dir%\PYAS.pfx" /p PYAS "%script_dir%\PYAS_Driver.sys"
sc create PYAS_Driver type= kernel start= demand binPath= "%script_dir%\PYAS_Driver.sys"
shutdown -r -t 0
endlocal
View File
Whitespace-only changes.
Binary file not shown.
+25
View File
@@ -0,0 +1,25 @@
@echo off
setlocal
:: Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\icacls.exe" "%SYSTEMROOT%\system32\config\system"
if %errorlevel% NEQ 0 goto NoAdmin
goto gotAdmin
:NoAdmin
echo You do not have administrator rights, please run this script as administrator.
pause
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs"
sc stop PYAS_Driver
sc delete PYAS_Driver
bcdedit /set testsigning off
bcdedit -debug off
shutdown -r -t 0
endlocal
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
{"Unknown": [38413146381396798812836662586219087594480760119241756145287379993031670453973, 96759775057307603829199050115151442660431386536877578909394799687553144825391], "White": [92860071170291586757870565976957954052649178883790647665503983139114277816413, 50625869624179221836524636484722091669820057030729734765256925026245308185143, 79303266820014134748061006437377483029320717142203104125806969476209010566146, 50391760446499089493384482654016917630509060287507523223191455177998253781572, 34733894651460458125941968926483828168477919119649839915356573816494375383659, 16447578251589668808184123721615810667991570306415913809506896532563163557975, 18668853151306203943053249777678854424409647574074706653144503993068509738028, 16447129799599854768187525514242197965987640167415805965954293039200573272151, 42965648781535883376480003940402366467478625051031283341289116138472520399484, 45637511530246203537935382208327538642024163565740899790237852717178844340385, 100662025713257198141308144602569453810226448934776598411982222249289646045820, 2813878798545665948450767843887867208740292941021073849284371582085785669685, 54695748401254225125045716155327877471149349614359435230254611073117412307518, 27428665293760567560050957450577436769403462770366418052177943137905489504373, 32018095881556959863902669246154132691484124511748151111295836576906027842532, 82735669648112373508385530969898006750362429118827185652448450648454052106395, 27853809242729492000984914092533936796891917926358854729439436487683423285261, 20030429995379197455160031864140436552884002299333955332088108013764717533796, 82338140557728967648601024370995428985866052631101882076231147335348455671038, 71339449324799277130427957011381342555145697382104653874846579353871764366968, 2432232479351500614611699169184443988440809841079862157291791071419485606436, 9463527399566410848087352636323112952591923803840644609432039785310381355253, 17287926889345790925003722717807755244540044472850272987265624141065166747251, 31507509644511868166890345905396462199402122513677304280568315890707028374136, 92802443753971611323223428952970105040389824130209263287070763891097867755624, 45133408084728538869955951560598604064861024543940290379768365214821771604584, 43161770374046173333870752071317153674965637163816017117315179871715332666383, 55200886519442939000007636174371797768786544863806926514781108850256791225983, 102124766481586899841647737641698083212305154684644839980199278690335383712492, 52992286898317605666180786036367620316269750824654214415314225077986227890804, 96307454545313440124283308270263825589093792315386382296096934270155352236733, 36073459579994433898643313577597321150634749356791285363958792075031385371364, 2671602537216404752611755689384448521170725107261295121211275163689399347529, 31174448189678483951801405655647041557287598300853213718404097030076935043252, 6997953573828232905847825866256444005094471443450029313008738013465446666864, 41288968033780608769032189481784193916730262129846893330891418484950645535282, 56724589038911745751056508177185337741291265472470897077742981563488398484126, 3353938097938067320481103667469354721822387389147415219233498938990215839034, 21195721951654457114265478558602466514207347021822959737607658828495062116920, 2916561284514958799877078174216081002558870786437593202464334407456915288119, 93137488384582768487662730765406914258099784103320160609442537879778117334700, 21195721951654457114265478558602377311225888285332501136798116331518898022972, 85036278951571446667616241901438186945472743486751871120301019617002115253240, 14623491695050192413097067629676318500123044497134202517578785087180871258165, 2022308710750553104057453378681448926020203033444470910346149752954363011822, 16435447118324352510213480738895714506136417806014749563314727656196027207884, 20110908101408861236178371339075650317185505287106087252378028881915405550816, 97262306467112548995108413358594977802790545321935863056096364390382492643957, 96614497885586867524036482497010189662872359368622249290846422070379022959337, 1895288773648887609359329471072769468085207279473521707976899919066265183340, 2651591106060448314208209841614702280337184080195391257416359882876000875095, 114619913163036058498985801603082782363327281628924544162718017899237779173997, 2481883953883130814217575190747389944608730963897863224598923997640828351014, 45000300637061336566799421885334051647634671537987073940268834014403441552901, 79047998258892679051555952202178856054614923426747250310189496005785954516966, 92887093185298651693450115442544102614083847612212241647641096093293220418098, 7140769773119319253009453104401896171570019200295580355390762162793695491644, 17012496707164921800767104952565848716212381967476981614870260538046339441223, 55577404054451500506896476492698809966352434385747804245366700591039970820656, 42705951800174486650758821275676750976088492908259259071295096144374682903086, 49945662818205539045803005800855628211260206264132745568273429553565001939621, 1971375Line truncated
{"Unknown": [38413146381396798812836662586219087594480760119241756145287379993031670453973, 96759775057307603829199050115151442660431386536877578909394799687553144825391], "White": [92860071170291586757870565976957954052649178883790647665503983139114277816413, 50625869624179221836524636484722091669820057030729734765256925026245308185143, 79303266820014134748061006437377483029320717142203104125806969476209010566146, 50391760446499089493384482654016917630509060287507523223191455177998253781572, 34733894651460458125941968926483828168477919119649839915356573816494375383659, 16447578251589668808184123721615810667991570306415913809506896532563163557975, 18668853151306203943053249777678854424409647574074706653144503993068509738028, 16447129799599854768187525514242197965987640167415805965954293039200573272151, 42965648781535883376480003940402366467478625051031283341289116138472520399484, 45637511530246203537935382208327538642024163565740899790237852717178844340385, 100662025713257198141308144602569453810226448934776598411982222249289646045820, 2813878798545665948450767843887867208740292941021073849284371582085785669685, 54695748401254225125045716155327877471149349614359435230254611073117412307518, 27428665293760567560050957450577436769403462770366418052177943137905489504373, 32018095881556959863902669246154132691484124511748151111295836576906027842532, 82735669648112373508385530969898006750362429118827185652448450648454052106395, 27853809242729492000984914092533936796891917926358854729439436487683423285261, 20030429995379197455160031864140436552884002299333955332088108013764717533796, 82338140557728967648601024370995428985866052631101882076231147335348455671038, 71339449324799277130427957011381342555145697382104653874846579353871764366968, 2432232479351500614611699169184443988440809841079862157291791071419485606436, 9463527399566410848087352636323112952591923803840644609432039785310381355253, 17287926889345790925003722717807755244540044472850272987265624141065166747251, 31507509644511868166890345905396462199402122513677304280568315890707028374136, 92802443753971611323223428952970105040389824130209263287070763891097867755624, 60491018752293550079699763462944244393253888103551546202593483014975813742967, 45133408084728538869955951560598604064861024543940290379768365214821771604584, 6759146298068049614085390992799666053918974602489525613718797088468975708017, 43161770374046173333870752071317153674965637163816017117315179871715332666383, 55200886519442939000007636174371797768786544863806926514781108850256791225983, 102124766481586899841647737641698083212305154684644839980199278690335383712492, 52992286898317605666180786036367620316269750824654214415314225077986227890804, 96307454545313440124283308270263825589093792315386382296096934270155352236733, 36073459579994433898643313577597321150634749356791285363958792075031385371364, 5354562433688861244299028006341553420425390015040147574513776499404802540118, 2671602537216404752611755689384448521170725107261295121211275163689399347529, 31174448189678483951801405655647041557287598300853213718404097030076935043252, 817984956081990458969224676381868506770627801582748844000835755782736667191, 6997953573828232905847825866256444005094471443450029313008738013465446666864, 41288968033780608769032189481784193916730262129846893330891418484950645535282, 56724589038911745751056508177185337741291265472470897077742981563488398484126, 3353938097938067320481103667469354721822387389147415219233498938990215839034, 21195721951654457114265478558602466514207347021822959737607658828495062116920, 2916561284514958799877078174216081002558870786437593202464334407456915288119, 93137488384582768487662730765406914258099784103320160609442537879778117334700, 21195721951654457114265478558602377311225888285332501136798116331518898022972, 85036278951571446667616241901438186945472743486751871120301019617002115253240, 14623491695050192413097067629676318500123044497134202517578785087180871258165, 2022308710750553104057453378681448926020203033444470910346149752954363011822, 16435447118324352510213480738895714506136417806014749563314727656196027207884, 20110908101408861236178371339075650317185505287106087252378028881915405550816, 97262306467112548995108413358594977802790545321935863056096364390382492643957, 96614497885586867524036482497010189662872359368622249290846422070379022959337, 1895288773648887609359329471072769468085207279473521707976899919066265183340, 2651591106060448314208209841614702280337184080195391257416359882876000875095, 114619913163036058498985801603082782363327281628924544162718017899237779173997, 2481883953883130814217575190747389944608730963897863224598923997640828351014, 45000300637061336566799421885334051647634671537987073940268834014403441552901, 79047998258892679051555952202178856054614923426747250310189496005785954516966, 92887093185298651693450115442544102614083847612212241647641096093293220418098, 7140769773119319253009453104401896171570019200295580355390762162793695491644, 17012496707Line truncated
+76 -72
View File
@@ -10,6 +10,7 @@ from threading import Thread
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from subprocess import *
class MainWindow_Controller(QMainWindow):
def __init__(self):
@@ -19,10 +20,10 @@ class MainWindow_Controller(QMainWindow):
self.pyas = sys.argv[0].replace("\\", "/")
self.dir = os.path.dirname(self.pyas)
self.pyae_version = "Fusion Engine"
self.pyas_version = "3.1.0"
self.pyas_version = "3.1.3"
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.init_startup()
self.init_sys_drive()
self.init_rule_dict()
self.init_data_base()
self.init_read_json()
@@ -31,10 +32,9 @@ class MainWindow_Controller(QMainWindow):
self.init_config_json()
self.init_config_list()
self.init_config_qtui()
self.init_change_lang()
self.init_theme_color()
self.init_control()
self.init_threads()
self.init_startup()
def init_threads(self):
self.protect_proc_init()
@@ -63,6 +63,14 @@ class MainWindow_Controller(QMainWindow):
except Exception as e:
self.bug_event(e)
def init_sys_drive(self):
try:
file_path = os.path.join(self.dir, "Driver")
if os.path.exists(file_path):
Popen("sc start PYAS_Driver", shell=True, stdout=PIPE, stderr=PIPE).wait()
except Exception as e:
self.bug_event(e)
def init_data_base(self):
try:
file_path = os.path.join(self.dir, "Model")
@@ -73,8 +81,6 @@ class MainWindow_Controller(QMainWindow):
if ftype in [".json", ".txt"]:
self.pe = ListSimHash()
self.pe.load_model(model_path)
elif ftype in [".h5", ".pkl"]:
pass # Not Sp Yet !
except Exception as e:
self.bug_event(e)
@@ -128,22 +134,21 @@ class MainWindow_Controller(QMainWindow):
if not os.path.exists("C:/ProgramData/PYAS"):
os.makedirs("C:/ProgramData/PYAS")
if not os.path.exists("C:/ProgramData/PYAS/PYAS.json"):
self.write_config({"high_sensitive":0,"cloud_services":"http://127.0.0.1/",
"language":"en_US","theme_color":"White","theme_custom":""})
self.write_config({"language":"en_US","theme_color":"White",
"high_sensitive":0,"cloud_services":"http://127.0.0.1/"})
with open("C:/ProgramData/PYAS/PYAS.json", "r") as f:
self.json = json.load(f)
except:
self.write_config({"high_sensitive":0,"cloud_services":"http://127.0.0.1/",
"language":"en_US","theme_color":"White","theme_custom":""})
self.write_config({"language":"en_US","theme_color":"White",
"high_sensitive":0,"cloud_services":"http://127.0.0.1/"})
with open("C:/ProgramData/PYAS/PYAS.json", "r") as f:
self.json = json.load(f)
def init_config_json(self):
self.json["high_sensitive"] = self.json.get("high_sensitive", 0)
self.json["cloud_services"] = self.json.get("cloud_services", "http://127.0.0.1/")
self.json["language"] = self.json.get("language", "en_US")
self.json["theme_color"] = self.json.get("theme_color", "White")
self.json["theme_custom"] = self.json.get("theme_custom", "")
self.json["high_sensitive"] = self.json.get("high_sensitive", 0)
self.json["cloud_services"] = self.json.get("cloud_services", "http://127.0.0.1/")
if self.json["high_sensitive"] == 1:
self.ui.high_sensitivity_switch_Button.setText(self.trans("已開啟"))
self.ui.high_sensitivity_switch_Button.setStyleSheet("""
@@ -165,7 +170,7 @@ class MainWindow_Controller(QMainWindow):
self.ui.Theme_Yellow.setChecked(True)
elif self.json["theme_color"] == "Blue":
self.ui.Theme_Blue.setChecked(True)
elif self.json["theme_color"] == "Custom":
elif os.path.exists(self.json["theme_color"]):
self.ui.Theme_Customize.setChecked(True)
def init_control(self):
@@ -205,12 +210,12 @@ class MainWindow_Controller(QMainWindow):
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_Customize.clicked.connect(self.change_theme)
self.ui.Theme_Green.clicked.connect(self.change_theme)
self.ui.Theme_Yellow.clicked.connect(self.change_theme)
self.ui.Theme_Blue.clicked.connect(self.change_theme)
self.ui.Theme_Red.clicked.connect(self.change_theme)
self.ui.Theme_White.clicked.connect(self.init_theme_color)
self.ui.Theme_Customize.clicked.connect(self.init_theme_color)
self.ui.Theme_Green.clicked.connect(self.init_theme_color)
self.ui.Theme_Yellow.clicked.connect(self.init_theme_color)
self.ui.Theme_Blue.clicked.connect(self.init_theme_color)
self.ui.Theme_Red.clicked.connect(self.init_theme_color)
def init_config_qtui(self):
self.ui.widget_2.lower()
@@ -315,8 +320,8 @@ class MainWindow_Controller(QMainWindow):
self.ui.GUI_Made_Name.setText(self.trans("mtkiao"))
self.ui.Core_Made_title.setText(self.trans("核心製作:"))
self.ui.Core_Made_Name.setText(self.trans("87owo"))
self.ui.Testers_title.setText(self.trans("測試人員:"))
self.ui.Testers_Name.setText(self.trans("87owo"))
self.ui.Testers_title.setText(self.trans("特別感謝:"))
self.ui.Testers_Name.setText(self.trans("0sha0"))
self.ui.PYAS_URL_title.setText(self.trans("官方網站:"))
self.ui.PYAS_URL.setText(self.trans("<html><head/><body><p><a href=\"https://github.com/87owo/PYAS\"><span style=\" text-decoration: underline; color:#000000;\">https://github.com/87owo/PYAS</span></a></p></body></html>"))
self.ui.high_sensitivity_title.setText(self.trans("高靈敏度模式"))
@@ -344,64 +349,50 @@ class MainWindow_Controller(QMainWindow):
def init_theme_color(self):
try:
if self.json["theme_color"] == "White":
if self.ui.Theme_White.isChecked():
self.json["theme_color"] = "White"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(240,240,240);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(230,230,230);}")
elif self.json["theme_color"] == "Red":
elif self.ui.Theme_Red.isChecked():
self.json["theme_color"] = "Red"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(250,230,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(250,220,220);}")
elif self.json["theme_color"] == "Yellow":
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(250,250,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(250,250,220);}")
elif self.json["theme_color"] == "Green":
elif self.ui.Theme_Green.isChecked():
self.json["theme_color"] = "Green"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(230,250,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(220,250,220);}")
elif self.json["theme_color"] == "Blue":
elif self.ui.Theme_Blue.isChecked():
self.json["theme_color"] = "Blue"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(230,250,250);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(220,250,250);}")
elif self.json["theme_color"] == "Custom":
with open(os.path.join(self.json["theme_custom"],"Color.ini"), "r") as f:
elif self.ui.Theme_Yellow.isChecked():
self.json["theme_color"] = "Yellow"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(250,250,230);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(250,250,220);}")
elif self.ui.Theme_Customize.isChecked():
if not os.path.exists(os.path.join(self.json["theme_color"],"Color.ini")):
path = str(QFileDialog.getExistingDirectory(self,self.trans("自定主題"),"C:/"))
if path and os.path.exists(os.path.join(path,"Color.ini")):
self.json["theme_color"] = path
with open(os.path.join(self.json["theme_color"],"Color.ini"), "r") as f:
self.themecolor = [line.strip() for line in f.readlines()]
self.ui.Window_widget.setStyleSheet(self.themecolor[0])
self.ui.Navigation_Bar.setStyleSheet(self.themecolor[1])
file = os.path.join(self.json["theme_custom"],"Check.png")
file = os.path.join(self.json["theme_color"],"Check.png")
self.ui.State_icon.setPixmap(QPixmap(file))
self.write_config(self.json)
except:
self.ui.Theme_White.setChecked(True)
self.json["theme_color"] = "White"
self.ui.State_icon.setPixmap(QPixmap(":/icon/Check.png"))
self.ui.Window_widget.setStyleSheet("QWidget#Window_widget {background-color:rgb(240,240,240);}")
self.ui.Navigation_Bar.setStyleSheet("QWidget#Navigation_Bar {background-color:rgb(230,230,230);}")
def read_custom_theme(self):
try:
path = str(QFileDialog.getExistingDirectory(self,self.trans("自定主題"),"C:/"))
if os.path.exists(os.path.join(path,"Color.ini")):
self.json["theme_custom"] = path
except:
pass
def change_theme(self):
if self.ui.Theme_White.isChecked():
self.json["theme_color"] = "White"
elif self.ui.Theme_Red.isChecked():
self.json["theme_color"] = "Red"
elif self.ui.Theme_Green.isChecked():
self.json["theme_color"] = "Green"
elif self.ui.Theme_Yellow.isChecked():
self.json["theme_color"] = "Yellow"
elif self.ui.Theme_Blue.isChecked():
self.json["theme_color"] = "Blue"
elif self.ui.Theme_Customize.isChecked():
self.read_custom_theme()
self.json["theme_color"] = "Custom"
self.write_config(self.json)
self.init_theme_color()
def change_animation(self,widget):
x, y = 170, widget.pos().y()
self.anim = QPropertyAnimation(widget, b"geometry")
@@ -599,6 +590,8 @@ class MainWindow_Controller(QMainWindow):
self.timer = QTimer()
self.timer.timeout.connect(update_opacity)
self.timer.start(2)
self.init_change_lang()
self.init_theme_color()
def init_hide_pyas(self):
def update_opacity():
@@ -619,6 +612,7 @@ class MainWindow_Controller(QMainWindow):
def closeEvent(self, event):
if self.question_event("您確定要退出 PYAS 和所有防護嗎?"):
Popen("sc stop PYAS_Driver", shell=True, stdout=PIPE, stderr=PIPE).wait()
self.block_window = False
self.proc_protect = False
self.file_protect = False
@@ -759,9 +753,9 @@ class MainWindow_Controller(QMainWindow):
try:
if lock:
self.virus_lock[file] = os.open(file, os.O_RDWR)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, os.path.getsize(file))
else:
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, os.path.getsize(file))
os.close(self.virus_lock[file])
except:
pass
@@ -772,7 +766,8 @@ class MainWindow_Controller(QMainWindow):
for file in self.virus_list:
try:
if self.ui.Virus_Scan_output.findItems(file, Qt.MatchContains)[0].checkState() == Qt.Checked:
self.ui.Virus_Scan_text.setText(self.trans("正在刪除: ")+file)
self.ui.Virus_Scan_title.setText(self.trans("正在刪除"))
self.ui.Virus_Scan_text.setText(file)
QApplication.processEvents()
self.lock_file(file, False)
os.remove(file)
@@ -784,7 +779,8 @@ class MainWindow_Controller(QMainWindow):
self.virus_list = []
self.virus_list_ui = []
self.ui.Virus_Scan_output.clear()
self.ui.Virus_Scan_text.setText(self.trans("成功: 刪除成功"))
self.ui.Virus_Scan_title.setText(self.trans("病毒掃描"))
self.ui.Virus_Scan_text.setText(self.trans("刪除成功"))
except Exception as e:
self.bug_event(e)
@@ -804,6 +800,7 @@ class MainWindow_Controller(QMainWindow):
def answer_scan(self):
try:
self.ui.Virus_Scan_title.setText(self.trans("病毒掃描"))
if self.virus_list:
self.ui.Virus_Scan_Solve_Button.show()
self.ui.Virus_Scan_Break_Button.hide()
@@ -823,6 +820,7 @@ class MainWindow_Controller(QMainWindow):
self.ui.Virus_Scan_Break_Button.hide()
self.ui.Virus_Scan_choose_Button.show()
self.ui.Virus_Scan_text.setText(self.trans("請選擇掃描方式"))
self.ui.Virus_Scan_title.setText(self.trans("病毒掃描"))
def virus_scan_menu(self):
if self.ui.Virus_Scan_choose_widget.isHidden():
@@ -873,7 +871,8 @@ class MainWindow_Controller(QMainWindow):
elif os.path.isdir(file):
self.traverse_path(file)
elif file not in self.whitelist and file != self.pyas:
self.ui.Virus_Scan_text.setText(self.trans(f"正在掃描: ")+file)
self.ui.Virus_Scan_title.setText(self.trans("正在掃描"))
self.ui.Virus_Scan_text.setText(file)
QApplication.processEvents()
self.write_scan(self.start_scan(file),file)
gc.collect()
@@ -890,8 +889,10 @@ class MainWindow_Controller(QMainWindow):
elif label and "White" not in label:
if self.json["high_sensitive"]:
return label
elif level and level >= 0.9:
elif level and level >= 1.0:
return label
elif self.rule_scan(file):
return "Rules"
elif self.json["high_sensitive"]:
if self.rule_scan(file):
return "Rules"
@@ -902,15 +903,19 @@ class MainWindow_Controller(QMainWindow):
def pe_scan(self, file):
try:
fn = []
with pefile.PE(file) as pe:
with pefile.PE(file, fast_load=True) as pe:
pe.parse_data_directories(directories=[pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT']])
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for func in entry.imports:
try:
fn.append(str(func.name, "utf-8"))
except:
pass
QApplication.processEvents()
return self.pe.predict(fn)
if func.name:
try:
fn.append(str(func.name, "utf-8"))
except:
pass
if fn:
QApplication.processEvents()
return self.pe.predict(fn)
return False, False
except:
return False, False
@@ -1349,7 +1354,6 @@ class MainWindow_Controller(QMainWindow):
elif action == 4 and ftype in alist:
self.ransom_counts += 1
elif action == 3 and ftype in slist and os.path.getsize(fpath) <= 52428800:
self.send_notify(self.trans(f"正在掃描: ")+fpath)
if self.sign_scan(file) and self.start_scan(fpath):
os.remove(fpath)
self.send_notify(self.trans("惡意軟體刪除: ")+fpath)
+4 -4
View File
@@ -49,13 +49,13 @@ class ListSimHash:
bitarray = numpy.unpackbits(numpy.frombuffer(b''.join(digests), dtype='>B'))
return numpy.sum(numpy.reshape(bitarray, (-1, 256)), 0)
def progress_bar(self, iteration, total, prefix='', suffix='', length=50, fill='█'):
percent = min(100.0, max(0.0, 100 * (iteration / float(total))))
def progress_bar(self, items, total, prefix='', suffix='', length=50, fill='█'):
percent = min(100.0, max(0.0, 100 * (items / float(total))))
end_char = '\n' if percent >= 100 else '\r'
percent_string = "{0:.2f}".format(percent)
filled_length = int(length * iteration // total)
filled_length = int(length * items // total)
bar = fill * filled_length + ' ' * (length - filled_length)
print(f'\r {prefix: <10} |{bar}| {percent_string}% {suffix}', end=end_char)
print(f'\r{prefix: <15} |{bar}| {percent_string}% {suffix}', end=end_char)
def predict_all(self, query):
label_similarities = {}
+5 -5
View File
@@ -15,18 +15,18 @@ translate_dict = {
"詢":"询","製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红",
"綠":"绿","態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关",
"強":"强","驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开",
"惡":"恶","據":"据","庫":"库","經":"经","敗":"败"},
"惡":"恶","據":"据","庫":"库","經":"经","敗":"败","謝":"谢","別":"别"},
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website ",
"惡意檔案":"Virus ","惡意軟體":"Malware ","勒索行為":"Ransom ",
"惡意腳本":"Script ","惡意行為":"Behavior ","可疑軟體":"Suspicious ",
"許可條款":"License Terms","惡意":"Malicious","可疑":"Suspicious",
"許可條款":"License Terms ","惡意":"Malicious","可疑":"Suspicious",
"啟用":"Enable ","禁用":"Disable ","正在初始化中":"Initializing ",
"正在掃描":"Scanning ","正在刪除":"Deleting ","最小化到":"Minimize To ",
"確定要":"Sure Want To ","靈敏度":"Sensitivity ","更新":"Update ",
"白色主題":"White","黃色主題":"Yellow","紅色主題":"Red","語言":"Language ",
"藍色主題":"Blue","綠色主題":"Green","自定主題":"Custom","最新":"Latest ",
"測試人員":"Testers","版本資訊":"Information","通訊":"Communication ",
"特別感謝":"Contributors ","版本資訊":"Information","通訊":"Communication ",
"註冊表":"Registry ","退出":"Quit ","檔案":"File ","當前":"Currently ",
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
"失敗":"Failed ","請":"Please ","路徑":"Path ","方式":"Method ",
@@ -51,5 +51,5 @@ translate_dict = {
"高":"High ","新":"New ","和":"And ","可能會":"Possible ","會":"Can ",
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","驅動":"Drive ",
"的":"","顯示":"","個":"","嗎":"","中":"","了":"","行":"","立即":"",
"密鑰":"Key ","檢測":"Detect ","製作":"Make","運行":"Running",
"密鑰":"Key ","檢測":"Detect ","製作":"Maker ","運行":"Running",
"自動":"Auto ","上報":"Report ","分析":"Analysis "," ":" "}}
+1 -1
View File
@@ -2,7 +2,7 @@ import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='3.0.9',
version='3.1.3',
company_name="PYAS Security",
file_description="Python Antivirus Software",
internal_name="PYAS",
+46 -17
View File
@@ -4,7 +4,8 @@
## Readme Language
[繁體中文](https://github.com/zackzheng1121/PYAS/blob/main/README_zh.md)
[繁體中文](https://github.com/87owo/PYAS/blob/main/README_zh_TW.md) ,
[简体中文](https://github.com/87owo/PYAS/blob/main/README_zh_CN.md)
## File Information
@@ -24,6 +25,29 @@ PYAS_Language.py -> Translate Dict (Traditional Chinese, Simplified Chinese, Eng
PYAS_Version.py -> Pyinstaller Info (file information, version information, original name, etc.)
## Dir Information
```
PYAS/
├── Driver/
│ ├── PYAS_Driver.sys
│ └── ...
│
├── Model/
│ ├── PYAS_Model.json
│ ├── PYAS_Model.txt
│ └── ...
│
├── Rules/
│ ├── Yara_Rules.yar
│ ├── Compile_Rules.yrc
│ └── ...
│
├── PYAS.py
├── PYAS_Engine.py
└── ...
```
## Requirements
Use pip install requirements to install import module
@@ -73,25 +97,25 @@ Show the new process name, file path, cmd line, pid
import psutil, time
def proc_detect():
existing_processes = set()
existing_process = set()
for p in psutil.process_iter():
if p.pid not in existing_processes:
existing_processes.add(p.pid)
existing_process.add(p.pid)
while True:
time.sleep(0.1)
new_process = set()
for p in psutil.process_iter():
new_process.add(p.pid)
for pid in new_process - existing_process:
try:
if p.pid not in existing_processes:
existing_processes.add(p.pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
elif not psutil.pid_exists(p.pid):
existing_processes.remove(p.pid)
except:
pass
p = psutil.Process(pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
except Exception as e:
print(f"Error: {e}")
existing_process = new_process
proc_detect()
```
@@ -131,17 +155,22 @@ https://pyantivirus.wixsite.com/pyas
https://github.com/87owo/PYAS
## PYAS Driver
https://github.com/0sha0/PYAS_Protection
## MIT license
https://github.com/87owo/PYAS/blob/main/LICENSE.md
## Support System
Windows 8.1, 10, 11 (64-bit), Ram 1GB, Rom 1GB or higher
Windows 8.1, 10, 11 (64-bit), Ram 500MB, Rom 200MB or higher
Other systems may experience software malfunctions or crash
## Special Thanks
360, Wix, VirusShare, mtkiao129, AV-T Team of LisectGroup
Wix, 0sha0, mtkiao129, AV-T Team of LisectGroup
Copyright© 2020~2024 PYAS Security By 87owo
+171
View File
@@ -0,0 +1,171 @@
# PYAS (Python 杀毒软件)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/8136aaca-d388-4321-bedb-abc4fcecfa8b)
## 文件信息
PYAS.py -> PYAS主程式(包括动画、扫描、保护功能等)
PYAS_Engine.py -> 转换资料库(用于相互转换资料库字典和清单)
PYAS_Extension.py -> 副文件名(包括扫描文件副文件名和常用副文件名)
PYAS_Model.* -> 病毒库(病毒库必须放在同一目录下)
PYAS_Interface.py -> PyQt5界面(由QT设计师设计,必须与主程式相符)
PYAS_Resource.py -> PyQt5资源(状态图片、图示包、按钮图示等)
PYAS_Language.py -> 翻译字典(繁体中文、简体中文、英文)
PYAS_Version.py -> Pyinstaller资讯(文件资讯、版本资讯、原名等)
## 目录信息
```
PYAS/
├── Driver/
│ ├── PYAS_Driver.sys
│ └── ...
│
├── Model/
│ ├── PYAS_Model.json
│ ├── PYAS_Model.txt
│ └── ...
│
├── Rules/
│ ├── Yara_Rules.yar
│ ├── Compile_Rules.yrc
│ └── ...
│
├── PYAS.py
├── PYAS_Engine.py
└── ...
```
## 安装要求
使用 pip install requirements 来安装需要的模组
```
psutil==5.9.5
pefile==2023.2.7
requests==2.31.0
pyperclip==1.8.2
pywin32==306
PyQt5==5.15.9
```
## 文件扫描
取得pefile文件函数导入表进行扫描
```
import pefile
def pe_scan(file):
try:
fn = []
with pefile.PE(file) as pe:
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for func in entry.imports:
try:
fn.append(str(func.name, "utf-8"))
except:
pass
if fn in known_malicious_list:
return "Virus"
return "Safe"
return "Unknown"
except Exception as e:
return f"Error: {e}"
info = pe_scan("path to file")
print(info)
```
## 进程监控
显示新进程名称、文件路径、cmd 行、pid
```
import psutil, time
def proc_detect():
existing_process = set()
for p in psutil.process_iter():
existing_process.add(p.pid)
while True:
time.sleep(0.1)
new_process = set()
for p in psutil.process_iter():
new_process.add(p.pid)
for pid in new_process - existing_process:
try:
p = psutil.Process(pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
except Exception as e:
print(f"Error: {e}")
existing_process = new_process
proc_detect()
```
## 文件监控
监控指定路径下的文件变化
```
import os, win32file, win32con
def file_detect(path):
hDir = win32file.CreateFile(path,win32con.GENERIC_READ,win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE,None,win32con.OPEN_EXISTING,win32con.FILE_FLAG_BACKUP_SEMANTICS,None)
while True:
for action, file in win32file.ReadDirectoryChangesW(hDir,10485760,True,win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY,None,None):
try:
fpath = os.path.join(path, file)
if action == 1:
print(f"File Create: {fpath}")
elif action == 2:
print(f"File Delete: {fpath}")
elif action == 3:
print(f"File Modify: {fpath}")
elif action == 4:
print(f"File Rename: {fpath}")
elif action == 5:
print(f"File Rename: {fpath}")
except:
pass
file_detect("path")
```
## 官方网页
https://pyantivirus.wixsite.com/pyas
https://github.com/87owo/PYAS
## 开源协议
https://github.com/87owo/PYAS/blob/main/LICENSE.md
## 驱动程序
https://github.com/0sha0/PYAS_Protection
## 支援系统
Windows 8.1, 10, 11 (64-bit), 内存 500MB, 存储 200MB 或更高
其他系统或版本可能会遇到软体功能故障或程序崩溃
## 特别感谢
360, Wix, VirusShare, mtkiao129, AV-T Team of LisectGroup
Copyright© 2020~2024 PYAS Security By 87owo
+55 -53
View File
@@ -1,8 +1,8 @@
# PYAS (Python 防毒軟體)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/153bcad9-18ab-4c81-bcb6-186434d0ef1b)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/8136aaca-d388-4321-bedb-abc4fcecfa8b)
## 文件訊息
## 檔案資訊
PYAS.py -> PYAS主程式(包括動畫、掃描、保護功能等)
@@ -20,7 +20,30 @@ PYAS_Language.py -> 翻譯字典(繁體中文、簡體中文、英文)
PYAS_Version.py -> Pyinstaller Info(檔案資訊、版本資訊、原名等)
## 要求
## 目錄資訊
```
PYAS/
├── Driver/
│ ├── PYAS_Driver.sys
│ └── ...
│
├── Model/
│ ├── PYAS_Model.json
│ ├── PYAS_Model.txt
│ └── ...
│
├── Rules/
│ ├── Yara_Rules.yar
│ ├── Compile_Rules.yrc
│ └── ...
│
├── PYAS.py
├── PYAS_Engine.py
└── ...
```
## 安裝要求
使用 pip install requirements 來安裝需要的模組
@@ -33,36 +56,7 @@ pywin32==306
PyQt5==5.15.9
```
## 哈希掃描
使用奇虎360雲端服務掃描已知惡意文件
```
import hashlib, requests
import xml.etree.ElementTree as xmlet
def hash_scan(file):
try:
with open(file, "rb") as f:
text = str(hashlib.md5(f.read()).hexdigest())
strBody = f'-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="md5s"\r\n\r\n{text}\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="format"\r\n\r\nXML\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="product"\r\n\r\n360zip\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="combo"\r\n\r\n360zip_main\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="v"\r\n\r\n2\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="osver"\r\n\r\n5.1\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="vk"\r\n\r\na03bc211\r\n-------------------------------7d83e2d7a141e\r\nContent-Disposition: form-data; name="mid"\r\n\r\n8a40d9eff408a78fe9ec10a0e7e60f62\r\n-------------------------------7d83e2d7a141e--'
response = requests.post('http://qup.f.360.cn/file_health_info.php', data=strBody, timeout=3)
if response.status_code == 200:
level = float(xmlet.fromstring(response.text).find('.//e_level').text)
if level > 50:
return "Virus"
elif level <= 10:
return "Safe"
return "Unknown"
return f"Error: {response.status_code}"
except Exception as e:
return f"Error: {e}"
info = hash_scan("path to file")
print(info)
```
## 文件掃描
## 檔案掃描
取得pefile檔案函數導入表進行掃描
@@ -90,35 +84,37 @@ info = pe_scan("path to file")
print(info)
```
## 進程偵測
## 進程監控
顯示新進程名稱、檔案路徑、cmd 行、pid
```
import psutil, time
def proc_detect():
existing_processes = set()
existing_process = set()
for p in psutil.process_iter():
if p.pid not in existing_processes:
existing_processes.add(p.pid)
existing_process.add(p.pid)
while True:
time.sleep(0.1)
new_process = set()
for p in psutil.process_iter():
new_process.add(p.pid)
for pid in new_process - existing_process:
try:
if p.pid not in existing_processes:
existing_processes.add(p.pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
except:
pass
p = psutil.Process(pid)
name, file, cmd = p.name(), p.exe(), p.cmdline()
print(f"Name: {name}")
print(f"File: {file}")
print(f"Pid: {p.pid}")
print(f"Cmd: {cmd}")
except Exception as e:
print(f"Error: {e}")
existing_process = new_process
proc_detect()
```
## 檔案偵測
## 檔案監控
監控指定路徑下的檔案變化
```
@@ -152,16 +148,22 @@ https://pyantivirus.wixsite.com/pyas
https://github.com/87owo/PYAS
## 開源許可證
## 開源協議
https://github.com/87owo/PYAS/blob/main/LICENSE.md
## 支援的系統
## 驅動程式
Windows 8.1, 10, 11 (64-bit),記憶體 1GB, 磁碟容量 1GB 或更高
Other systems may experience software malfunctions or crash
https://github.com/0sha0/PYAS_Protection
## Special Thanks
360, Wix, VirusShare, mtkiao129, AV-T Team of LisectGroup
## 支援系統
Windows 8.1, 10, 11 (64-bit),記憶體 500MB, 磁碟容量 200MB 或更高
其他系統或版本可能會遇到軟體功能故障或程序崩潰
## 特別感謝
Wix, 0sha0, mtkiao129, AV-T Team of LisectGroup
Copyright© 2020~2024 PYAS Security By 87owo
File diff suppressed because it is too large. Load diff