Compare commits

...
236 Commits
Author SHA1 Message Date
PYDT 2d68400670 Delete PYAS_Function.7z 2023-12-29 09:42:48 +08:00
PYDT 8acaae3f0d Add files via upload 2023-12-29 09:42:10 +08:00
PYDT a5cb26528f Add files via upload 2023-12-15 08:58:39 +08:00
PYDT ac2520a03f Add files via upload 2023-12-15 08:43:04 +08:00
PYDT 9c15cc7b33 Add files via upload 2023-12-14 22:49:20 +08:00
PYDT c38f460163 Add files via upload 2023-12-14 22:25:15 +08:00
PYDT 9bda8c9e77 Add files via upload 2023-12-14 15:48:01 +08:00
PYDT 558be68bad Add files via upload 2023-12-14 15:25:36 +08:00
PYDT 6b9d27ce9b Add files via upload 2023-12-14 09:57:22 +08:00
PYDT 412745eede Add files via upload 2023-12-14 09:44:59 +08:00
PYDT 91ea771af1 Add files via upload 2023-12-14 07:17:45 +08:00
PYDT 238ab03db3 Add files via upload 2023-12-14 07:16:10 +08:00
PYDT 2d63da193d Add files via upload 2023-12-13 09:31:18 +08:00
PYDT fa4c20a241 Add files via upload 2023-12-12 18:00:47 +08:00
PYDT 6294fc33d1 Add files via upload 2023-12-11 18:17:39 +08:00
PYDT c4cf48a94b Add files via upload 2023-12-11 09:12:24 +08:00
PYDT 2934c7eb57 Add files via upload 2023-12-11 07:53:44 +08:00
PYDT 46ce454105 Add files via upload 2023-12-10 18:02:52 +08:00
PYDT 9ab06a0ea9 Add files via upload 2023-12-10 12:33:37 +08:00
PYDT e6f742380a Add files via upload 2023-12-09 17:43:10 +08:00
PYDT 2686812470 Add files via upload 2023-12-09 17:01:08 +08:00
PYDT cd11b5b7b2 Add files via upload 2023-12-08 21:28:06 +08:00
PYDT aae35dc640 Add files via upload 2023-12-08 18:21:31 +08:00
PYDT f0b669ff85 Add files via upload 2023-12-08 08:18:32 +08:00
PYDT 237605bb9f Add files via upload 2023-12-07 16:17:34 +08:00
PYDT 1778046581 Add files via upload 2023-12-07 09:45:20 +08:00
PYDT ff10adfabb Add files via upload 2023-12-06 14:35:52 +08:00
PYDT 1cb0f8d7ba Add files via upload 2023-12-06 14:29:34 +08:00
PYDT 5813bbdcd1 Add files via upload 2023-12-06 09:52:59 +08:00
PYDT b38e5b177e Add files via upload 2023-12-06 09:08:11 +08:00
PYDT 9d66cf248c Add files via upload 2023-12-06 06:37:25 +08:00
PYDT ebcf90d426 Add files via upload 2023-12-05 15:58:41 +08:00
PYDT 51904db187 Add files via upload 2023-12-05 15:15:21 +08:00
PYDT 4fc8755b8d Add files via upload 2023-12-05 11:27:36 +08:00
PYDT 7afcbfaa26 Add files via upload 2023-12-05 09:16:49 +08:00
PYDT 55cb96d978 Add files via upload 2023-12-05 08:44:24 +08:00
PYDT a1de099974 Add files via upload 2023-12-04 21:24:39 +08:00
PYDT a0238732fe Add files via upload 2023-12-04 19:59:48 +08:00
PYDT 6c100b0679 Add files via upload 2023-12-04 19:25:29 +08:00
PYDT e4d159840f Add files via upload 2023-12-04 19:25:10 +08:00
PYDT 0375b3ff02 Add files via upload 2023-12-04 17:01:02 +08:00
PYDT 746bae5103 Add files via upload 2023-12-04 14:10:23 +08:00
PYDT 70eb2c4500 Add files via upload 2023-12-03 23:18:21 +08:00
PYDT 69175f3ae1 Add files via upload 2023-12-02 20:21:07 +08:00
PYDT ed5fab2c54 Add files via upload 2023-12-01 22:26:39 +08:00
PYDT 1425ff8e6c Add files via upload 2023-12-01 19:43:30 +08:00
PYDT 832ab549a1 Add files via upload 2023-12-01 09:25:11 +08:00
PYDT 4ec1661c26 Add files via upload 2023-12-01 08:26:16 +08:00
PYDT ea27712b62 Add files via upload 2023-12-01 08:25:59 +08:00
PYDT 6f65efe2d8 Add files via upload 2023-11-30 21:11:48 +08:00
PYDT 8edcf60baf Add files via upload 2023-11-30 17:23:46 +08:00
PYDT 74f6aec367 Add files via upload 2023-11-30 16:02:10 +08:00
PYDT 62c65a766a Add files via upload 2023-11-30 15:09:35 +08:00
PYDT acbcaa337e Add files via upload 2023-11-30 08:21:54 +08:00
PYDT f4dbe57244 Add files via upload 2023-11-30 00:07:59 +08:00
PYDT b494c64a2f Add files via upload 2023-11-29 22:28:22 +08:00
PYDT 321e086b95 Add files via upload 2023-11-29 15:12:49 +08:00
PYDT fb60d6b867 Add files via upload 2023-11-29 13:08:38 +08:00
PYDT 8ff2e2074a Delete PYAS_Function_Safe.7z 2023-11-28 18:45:40 +08:00
PYDT 1151a1c43f Add files via upload 2023-11-28 18:45:16 +08:00
PYDT 13bc6cecc4 Add files via upload 2023-11-28 13:29:09 +08:00
PYDT a4ea572458 Add files via upload 2023-11-28 01:02:21 +08:00
PYDT 880df4dee9 Add files via upload 2023-11-27 19:31:39 +08:00
PYDT b75e86dd11 Add files via upload 2023-11-27 18:08:54 +08:00
PYDT 75c84092ae Add files via upload 2023-11-27 12:42:50 +08:00
PYDT c69db97da8 Add files via upload 2023-11-27 12:16:53 +08:00
PYDT 9c2a8892ae Add files via upload 2023-11-27 06:39:02 +08:00
PYDT f92111563c Add files via upload 2023-11-26 22:01:51 +08:00
PYDT 0abb3e78cb Add files via upload 2023-11-26 15:51:40 +08:00
PYDT fb83071419 Add files via upload 2023-11-26 12:56:33 +08:00
PYDT f593c6df8b Add files via upload 2023-11-26 12:51:13 +08:00
PYDT 9b452b25c2 Add files via upload 2023-11-25 21:47:21 +08:00
PYDT c835fcf99a Add files via upload 2023-11-25 20:23:47 +08:00
PYDT e4373edc54 Add files via upload 2023-11-25 19:59:51 +08:00
PYDT 686c05785f Add files via upload 2023-11-25 17:12:59 +08:00
PYDT 994358a793 Add files via upload 2023-11-25 16:58:41 +08:00
PYDT b02ca3757c Add files via upload 2023-11-25 16:14:41 +08:00
PYDT 164ec25415 Add files via upload 2023-11-25 14:58:27 +08:00
PYDT 8ee85cd9ca Add files via upload 2023-11-25 14:20:24 +08:00
PYDT c07bf05754 Add files via upload 2023-11-25 13:09:25 +08:00
PYDT 2e2a08a765 Add files via upload 2023-11-24 23:30:33 +08:00
PYDT 10be5f442f Add files via upload 2023-11-24 20:21:25 +08:00
PYDT 0fcd8565d8 Add files via upload 2023-11-24 12:08:55 +08:00
PYDT e07eee86dd Add files via upload 2023-11-24 09:09:49 +08:00
PYDT f25d5d73c6 Add files via upload 2023-11-23 23:31:26 +08:00
PYDT 28b4d00d3c Add files via upload 2023-11-23 22:48:46 +08:00
PYDT c75cf8a539 Add files via upload 2023-11-23 20:08:54 +08:00
PYDT ff7199b857 Add files via upload 2023-11-23 17:58:09 +08:00
PYDT 5613fd81b7 Update README.md 2023-11-23 16:00:46 +08:00
PYDT c1458502f7 Update README.md 2023-11-23 15:56:19 +08:00
PYDT b2f620bd3d Add files via upload 2023-11-23 15:07:41 +08:00
PYDT 0e1030f186 Add files via upload 2023-11-23 14:55:15 +08:00
PYDT ff4ffb8ec5 Add files via upload 2023-11-23 14:34:25 +08:00
PYDT 941458a381 Add files via upload 2023-11-22 14:49:09 +08:00
PYDT 560eb924b8 Add files via upload 2023-11-21 20:48:57 +08:00
PYDT c3fab9e48b Add files via upload 2023-11-21 20:31:50 +08:00
PYDT fc4dc74f9e Add files via upload 2023-11-21 20:16:16 +08:00
PYDT 35f0362910 Update README.md 2023-11-21 14:59:18 +08:00
PYDT 27dfaa5f06 Add files via upload 2023-11-21 14:52:06 +08:00
PYDT cf1866710a Delete PYAS_Function.zip 2023-11-21 14:51:37 +08:00
PYDT b3a5d06c4a Add files via upload 2023-11-21 14:40:38 +08:00
PYDT 7c904ff331 Add files via upload 2023-11-16 14:25:47 +08:00
PYDT c7855a9dd1 Add files via upload 2023-11-16 13:40:33 +08:00
PYDT 5faee6a05f Add files via upload 2023-11-16 11:41:33 +08:00
PYDT 9213f9f54f Add files via upload 2023-11-16 10:39:56 +08:00
PYDT c5e8351d76 Delete PYAS_Rules.py 2023-11-16 10:39:12 +08:00
PYDT e8e245ac0b Add files via upload 2023-11-15 12:49:31 +08:00
PYDT 2d8d6851d1 Add files via upload 2023-11-15 11:39:51 +08:00
PYDT 54f3e2ceda Add files via upload 2023-11-15 00:27:26 +08:00
PYDT 81d98917c3 Add files via upload 2023-11-14 21:10:40 +08:00
PYDT 8651f1e5d6 Add files via upload 2023-11-10 16:14:39 +08:00
PYDT db1a26424d Add files via upload 2023-11-10 15:20:38 +08:00
PYDT 16405810dd Add files via upload 2023-11-10 10:07:45 +08:00
PYDT f4f7fc1b0c Add files via upload 2023-11-09 22:02:06 +08:00
PYDT e1145a743a Add files via upload 2023-11-09 21:33:02 +08:00
PYDT 6e5b54bbfe Add files via upload 2023-11-09 21:21:20 +08:00
PYDT a948219e1a Add files via upload 2023-11-09 10:45:41 +08:00
PYDT 5675e926d5 Add files via upload 2023-11-09 09:19:56 +08:00
PYDT cb7f8bbaab Add files via upload 2023-11-09 09:14:14 +08:00
PYDT 61e7fd8f40 Add files via upload 2023-11-08 19:49:30 +08:00
PYDT 76fab2671a Add files via upload 2023-11-08 09:33:31 +08:00
PYDT dbc2bd2d62 Add files via upload 2023-11-07 23:48:08 +08:00
PYDT 73e62935ff Add files via upload 2023-11-07 14:35:09 +08:00
PYDT c9e28b5482 Add files via upload 2023-11-07 11:15:32 +08:00
PYDT 6bf58eae4a Add files via upload 2023-11-07 07:26:43 +08:00
PYDT 3e09574b3c Add files via upload 2023-11-06 16:23:59 +08:00
PYDT a7a00b9ca6 Add files via upload 2023-11-06 08:24:54 +08:00
PYDT 7a62e2df27 Add files via upload 2023-11-05 17:49:37 +08:00
PYDT 317f1ccae7 Add files via upload 2023-11-05 17:38:51 +08:00
PYDT 884631409a Add files via upload 2023-11-05 14:44:08 +08:00
PYDT 14dca5e2cb Add files via upload 2023-11-04 13:38:04 +08:00
PYDT 3a0b856d47 Add files via upload 2023-11-03 20:36:21 +08:00
PYDT e66f8af022 Add files via upload 2023-11-03 18:02:13 +08:00
PYDT 13e4560d86 Add files via upload 2023-11-03 08:20:39 +08:00
PYDT 5ea789df7f Add files via upload 2023-11-03 08:14:52 +08:00
PYDT debda9ec11 Add files via upload 2023-11-02 20:36:42 +08:00
PYDT b3f126181b Add files via upload 2023-11-02 14:35:57 +08:00
PYDT 6bd110cae7 Add files via upload 2023-11-02 14:30:26 +08:00
PYDT 635f4ccde3 Add files via upload 2023-11-02 10:52:47 +08:00
PYDT 01da2685a5 Add files via upload 2023-11-02 10:51:45 +08:00
PYDT b040aad8d1 Add files via upload 2023-11-02 08:47:53 +08:00
PYDT 84a0f08618 Add files via upload 2023-11-01 19:44:29 +08:00
PYDT 1f64c0d672 Add files via upload 2023-11-01 12:55:25 +08:00
PYDT 5bfff87e21 Add files via upload 2023-11-01 11:19:25 +08:00
PYDT 47db0e1c46 Delete PYAS_Scripts.py 2023-10-31 15:02:10 +08:00
PYDT 9a9fdc418f Delete PYAS_Function_Safe.zip 2023-10-31 15:01:31 +08:00
PYDT c30c89ed40 Add files via upload 2023-10-31 15:01:01 +08:00
PYDT d7bb89968f Add files via upload 2023-10-30 21:05:07 +08:00
PYDT f9b431d158 Add files via upload 2023-10-30 20:56:16 +08:00
PYDT a1364896af Add files via upload 2023-10-30 20:07:24 +08:00
PYDT 2870a999a2 Add files via upload 2023-10-30 20:05:04 +08:00
PYDT 98646a6bd9 Add files via upload 2023-10-29 15:47:10 +08:00
PYDT 8ec894f576 Add files via upload 2023-10-29 13:15:09 +08:00
PYDT 254a67b9a8 Add files via upload 2023-10-29 12:13:14 +08:00
PYDT eebfb79c27 Add files via upload 2023-10-29 11:56:02 +08:00
PYDT 1a1d7ec783 Add files via upload 2023-10-29 08:25:17 +08:00
PYDT 4482144b4d Add files via upload 2023-10-28 18:25:08 +08:00
PYDT 827279c9a8 Add files via upload 2023-10-28 15:32:10 +08:00
PYDT b1d3488842 Add files via upload 2023-10-27 18:57:00 +08:00
PYDT 90112ae1ae Add files via upload 2023-10-27 15:48:25 +08:00
PYDT 1f4b9390b9 Add files via upload 2023-10-27 10:53:02 +08:00
PYDT cc142aca40 Add files via upload 2023-10-27 08:28:38 +08:00
PYDT 89513b2c0d Add files via upload 2023-10-27 00:33:05 +08:00
PYDT bfcd00acec Add files via upload 2023-10-27 00:26:21 +08:00
PYDT 9833b28a50 Add files via upload 2023-10-27 00:03:41 +08:00
PYDT d0404dd29c Add files via upload 2023-10-26 20:52:20 +08:00
PYDT 9d3761e7f6 Add files via upload 2023-10-26 20:14:54 +08:00
PYDT 03515acc68 Add files via upload 2023-10-26 18:06:31 +08:00
PYDT f8413f4cfb Add files via upload 2023-10-26 17:50:39 +08:00
PYDT 24f7f67e63 Add files via upload 2023-10-26 14:29:49 +08:00
PYDT 85129cdfe1 Add files via upload 2023-10-25 15:58:42 +08:00
PYDT 6d4f8b2731 Add files via upload 2023-10-25 13:39:48 +08:00
PYDT 24a0efcce1 Add files via upload 2023-10-24 21:28:11 +08:00
PYDT ce6be1b4d5 Add files via upload 2023-10-24 19:53:41 +08:00
PYDT 723ac47c48 Add files via upload 2023-10-24 19:52:58 +08:00
PYDT 720d163bdb Add files via upload 2023-10-24 13:15:05 +08:00
PYDT a74047d4e5 Add files via upload 2023-10-24 13:12:21 +08:00
PYDT f6538f93c7 Add files via upload 2023-10-24 13:08:41 +08:00
PYDT 49cb0b3ef5 Add files via upload 2023-10-24 09:40:15 +08:00
PYDT c81845ba3a Add files via upload 2023-10-24 09:23:43 +08:00
PYDT 053ae64008 Add files via upload 2023-10-24 09:16:11 +08:00
PYDT 48989840b8 Add files via upload 2023-10-23 20:47:18 +08:00
PYDT 36c7bcd87f Add files via upload 2023-10-23 18:56:42 +08:00
PYDT a50eca1600 Add files via upload 2023-10-22 15:38:01 +08:00
PYDT f70dc8eb46 Add files via upload 2023-10-22 15:09:01 +08:00
PYDT f13d816c5b Add files via upload 2023-10-21 23:46:01 +08:00
PYDT 3429e658b6 Add files via upload 2023-10-21 10:46:45 +08:00
PYDT 0c6f9d6041 Add files via upload 2023-10-20 11:21:47 +08:00
PYDT 4a668499b0 Add files via upload 2023-10-20 07:29:21 +08:00
PYDT f1057252b3 Add files via upload 2023-10-19 19:56:21 +08:00
PYDT 4e3c866536 Add files via upload 2023-10-19 13:42:22 +08:00
PYDT c585cb370c Add files via upload 2023-10-19 12:04:53 +08:00
PYDT 2211a2b1d4 Add files via upload 2023-10-18 10:15:49 +08:00
PYDT 42069e2aac Add files via upload 2023-10-18 09:17:55 +08:00
PYDT fd499a17fe Add files via upload 2023-10-18 06:25:51 +08:00
PYDT 0cc56d3da7 Add files via upload 2023-10-17 16:08:49 +08:00
PYDT 2096f55ce8 Add files via upload 2023-10-17 15:56:09 +08:00
PYDT a4afe0ac10 Add files via upload 2023-10-17 15:24:15 +08:00
PYDT d523b66970 Add files via upload 2023-10-17 15:17:25 +08:00
PYDT 192335249c Add files via upload 2023-10-17 14:07:09 +08:00
PYDT e02879b3d7 Add files via upload 2023-10-17 13:01:37 +08:00
PYDT bf7157fb3e Add files via upload 2023-10-17 11:22:52 +08:00
PYDT 7c2ae87c73 Add files via upload 2023-10-17 10:14:09 +08:00
PYDT c1357bb2e1 Add files via upload 2023-10-16 08:32:32 +08:00
PYDT c298c3773e Add files via upload 2023-10-15 21:10:07 +08:00
PYDT 7d09c6501c Add files via upload 2023-10-15 21:00:37 +08:00
PYDT 1a051d42af Add files via upload 2023-10-15 18:25:43 +08:00
PYDT 22bbcc5217 Add files via upload 2023-10-15 18:23:10 +08:00
PYDT 017f153002 Add files via upload 2023-10-15 14:37:23 +08:00
PYDT cf4762ad04 Add files via upload 2023-10-15 09:17:04 +08:00
PYDT 6ba920e26a Add files via upload 2023-10-14 17:07:00 +08:00
PYDT a66acf0ef9 Delete requirements.txt 2023-10-14 17:01:56 +08:00
PYDT 8ab982ac38 Update README.md 2023-10-14 17:00:02 +08:00
PYDT 0c32a126a9 Update README.md 2023-10-14 16:56:45 +08:00
PYDT fd47881f88 Update README.md 2023-10-14 16:53:26 +08:00
PYDT 61298235fd Add files via upload 2023-10-14 12:24:43 +08:00
PYDT 4a38277c3e Add files via upload 2023-10-14 00:05:34 +08:00
PYDT fd7912f631 Add files via upload 2023-10-13 21:04:42 +08:00
mtkiao129 4f1b0e99e4 Add files via upload
add Python module list
2023-10-13 20:57:16 +08:00
PYDT 086e375cea Add files via upload 2023-10-13 20:00:57 +08:00
PYDT f90b132ccb Add files via upload 2023-10-13 18:42:29 +08:00
PYDT f4bd217445 Add files via upload 2023-10-13 18:28:58 +08:00
PYDT 5524e2f689 Add files via upload 2023-10-13 17:38:57 +08:00
PYDT 42b8201f37 Add files via upload 2023-10-13 15:15:19 +08:00
PYDT f71c821128 Add files via upload 2023-10-13 12:47:20 +08:00
PYDT 28330d3ad6 Add files via upload 2023-10-13 09:01:57 +08:00
PYDT 5afd576a3c Add files via upload 2023-10-12 11:39:03 +08:00
PYDT edcf82d139 Add files via upload 2023-10-12 09:50:21 +08:00
PYDT 69e5143a27 Add files via upload 2023-10-11 20:43:54 +08:00
PYDT 215d0faa53 Add files via upload 2023-10-11 20:11:28 +08:00
PYDT 470142a640 Add files via upload 2023-10-11 11:54:56 +08:00
PYDT 8e67a8d679 Add files via upload 2023-10-11 11:52:38 +08:00
PYDT be5baf9c87 Add files via upload 2023-10-11 11:04:42 +08:00
PYDT 7a05e42f3f Delete PYAS_Function_Full.zip 2023-10-11 11:04:19 +08:00
PYDT 34240ec01f Delete PYAS_Function.py 2023-10-11 11:03:55 +08:00
PYDT 0bf6eccb8b Add files via upload 2023-10-11 11:03:09 +08:00
13 changed files with 419 additions and 225 deletions

No files matched your search

+181 -104
View File
@@ -3,11 +3,14 @@ import hashlib, pefile, socket, msvcrt
import requests, pyperclip, win32file
import win32gui, win32api, win32con
import xml.etree.ElementTree as xmlet
from PYAS_Scripts import scripts_list
from PYAS_Function import function_list
from PYAS_Database import model_dict
from PYAS_Function_Virus import func_virus
from PYAS_Function_Safe import func_safe
from PYAS_Extension import slist, alist
from PYAS_Language import translate_dict
from PYAS_Interface import Ui_MainWindow
from PYML import ListClassifier
from binascii import hexlify
from threading import Thread
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
@@ -19,22 +22,28 @@ class MainWindow_Controller(QMainWindow):
self.setAttribute(Qt.WA_TranslucentBackground)
self.setWindowFlags(Qt.FramelessWindowHint)
self.pyas = str(sys.argv[0]).replace("\\", "/")
self.pyas_version = "2.8.6"
self.pyas_version = "2.9.7"
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.init_tray_icon()
self.init_data_base()
self.init_virus_list()
self.init_state_safe()
self.init_config_path()
self.init_config_read()
self.init_config_json()
self.init_config_list()
self.init_config_boot()
self.init_config_json()
self.init_config_qtui()
self.init_change_lang()
self.init_control()
self.show_pyas_ui()
self.init_threads()
def init_data_base(self):
self.ml = ListClassifier()
self.ml.load_model(model_dict)
def init_threads(self):
self.protect_proc_init()
self.protect_file_init()
@@ -93,11 +102,18 @@ class MainWindow_Controller(QMainWindow):
except:
self.mbr_value = False
def init_config_json(self):
if not os.path.exists("C:/ProgramData/PYAS/PYAS.json"):
def init_config_read(self):
try:
if not os.path.exists("C:/ProgramData/PYAS/PYAS.json"):
self.write_config({"language":"en_US","high_sensitivity":0,"cloud_services":1})
with open("C:/ProgramData/PYAS/PYAS.json", "r", encoding="utf-8") as f:
self.json = json.load(f)
except:
self.write_config({"language":"en_US","high_sensitivity":0,"cloud_services":1})
with open("C:/ProgramData/PYAS/PYAS.json", "r", encoding="utf-8") as f:
self.json = json.load(f)
with open("C:/ProgramData/PYAS/PYAS.json", "r", encoding="utf-8") as f:
self.json = json.load(f)
def init_config_json(self):
self.high_sensitivity = self.json.get("high_sensitivity", 0)
if self.high_sensitivity == 1:
self.ui.high_sensitivity_switch_Button.setText(self.trans("已開啟"))
@@ -261,7 +277,7 @@ class MainWindow_Controller(QMainWindow):
self.ui.Window_Block_Button.setText(self.trans("軟體彈窗攔截"))
self.ui.Repair_System_Network_Button.setText(self.trans("系統網路修復"))
self.ui.About_Back.setText(self.trans("返回"))
self.ui.PYAS_Version.setText(self.trans(f"PYAS V{self.pyas_version}"))
self.ui.PYAS_Version.setText(self.trans(f"PYAS V{self.pyas_version} (ML Engine Beta)"))
self.ui.GUI_Made_title.setText(self.trans("介面製作:"))
self.ui.GUI_Made_Name.setText(self.trans("mtkiao"))
self.ui.Core_Made_title.setText(self.trans("核心製作:"))
@@ -297,21 +313,21 @@ class MainWindow_Controller(QMainWindow):
if self.ui.Theme_White.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(240,240,240);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(230,230,230);}""")
elif self.ui.Theme_Red.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(255,150,150);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(255,140,140);}""")
elif self.ui.Theme_Black.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(150,150,150);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(140,140,140);}""")
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(230,230,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(220,220,220);}""")
elif self.ui.Theme_Red.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(250,230,230);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(250,220,220);}""")
elif self.ui.Theme_Green.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(150,255,150);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(130,255,130);}""")
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.ui.Theme_Yellow.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(255,255,150);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(240,240,140);}""")
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_Blue.isChecked():
self.ui.Window_widget.setStyleSheet("""QWidget#Window_widget {background-color:rgb(0,200,255);}""")
self.ui.Navigation_Bar.setStyleSheet("""QWidget#Navigation_Bar {background-color:rgb(0,190,255);}""")
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);}""")
def change_animation(self,widget):
x, y = 170, widget.pos().y()
@@ -350,7 +366,7 @@ class MainWindow_Controller(QMainWindow):
widget.setAutoFillBackground(True)
self.timer = QTimer()
self.timer.timeout.connect(self.timeout)
self.timer.start(0)
self.timer.start(2)
def timeout(self):
if self.opacity.i < 1:
@@ -457,7 +473,7 @@ class MainWindow_Controller(QMainWindow):
self.timer.stop()
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_flag = True
self.m_Position=event.globalPos()-self.pos()
event.accept()
self.timer = QTimer()
@@ -480,7 +496,7 @@ class MainWindow_Controller(QMainWindow):
self.setWindowOpacity(self.pyas_opacity/100)
else:
self.timer.stop()
self.m_flag=False
self.m_flag = False
self.setCursor(QCursor(Qt.ArrowCursor))
self.timer = QTimer()
self.timer.timeout.connect(update_opacity)
@@ -499,37 +515,46 @@ class MainWindow_Controller(QMainWindow):
pat2.drawRoundedRect(rect, 1, 1)
def show_pyas_ui(self):
def update_opacity():
if self.pyas_opacity <= 100:
self.pyas_opacity += 1
self.setWindowOpacity(self.pyas_opacity/100)
else:
self.timer.stop()
self.show()
self.pyas_opacity = 0
while self.pyas_opacity < 100:
time.sleep(0.001)
self.pyas_opacity += 1
self.setWindowOpacity(self.pyas_opacity/100)
QApplication.processEvents()
self.timer = QTimer()
self.timer.timeout.connect(update_opacity)
self.timer.start(2)
def hide_pyas_ui(self):
while self.pyas_opacity > 0:
time.sleep(0.001)
self.pyas_opacity -= 1
self.setWindowOpacity(self.pyas_opacity/100)
QApplication.processEvents()
self.hide()
def update_opacity():
if self.pyas_opacity >= 0:
self.pyas_opacity -= 1
self.setWindowOpacity(self.pyas_opacity/100)
else:
self.timer.stop()
self.hide()
self.timer = QTimer()
self.timer.timeout.connect(update_opacity)
self.timer.start(2)
def showMinimized(self):
self.hide_pyas_ui()
self.send_notify(self.trans("PYAS 已最小化到系統托盤圖標"))
if self.block_window:
self.hide_pyas_ui()
self.send_notify(self.trans("PYAS 已最小化到系統托盤圖標"))
def closeEvent(self, event):
if QMessageBox.warning(self,self.trans("警告"),self.trans("您確定要退出 PYAS 和所有防護嗎?"),QMessageBox.Yes|QMessageBox.No) == 16384:
self.hide_pyas_ui()
self.virus_scan_break()
event.accept()
else:
event.ignore()
def bug_event(self, error):
def bug_event(self, text):
try:
print(f"[Error] {error}")
QMessageBox.critical(self,self.trans("錯誤"),error,QMessageBox.Ok)
print(f"[Error] {text}")
QMessageBox.critical(self,self.trans("錯誤"), text, QMessageBox.Ok)
except:
pass
@@ -621,11 +646,7 @@ class MainWindow_Controller(QMainWindow):
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])
except:
continue
self.unlock_file(file)
self.scan_file = True
self.init_virus_list()
self.ui.Virus_Scan_Solve_Button.hide()
@@ -638,7 +659,7 @@ class MainWindow_Controller(QMainWindow):
def Virus_Scan_output_menu(self, point):
def copyPathFunc():
item_row = None
item_row = False
for i in self.ui.Virus_Scan_output.selectedIndexes():
item_row = self.virus_list[i.row()]
if item_row:
@@ -648,6 +669,20 @@ class MainWindow_Controller(QMainWindow):
copyPath.triggered.connect(lambda: copyPathFunc())
menu.exec_(self.ui.Virus_Scan_output.mapToGlobal(point))
def lock_file(self, file):
try:
self.virus_lock[file] = os.open(file, os.O_RDWR)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
except:
pass
def unlock_file(self, file):
try:
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
os.close(self.virus_lock[file])
except:
pass
def virus_solve(self):
try:
self.ui.Virus_Scan_Solve_Button.hide()
@@ -656,12 +691,10 @@ class MainWindow_Controller(QMainWindow):
if self.ui.Virus_Scan_output.findItems(file, Qt.MatchContains)[0].checkState() == Qt.Checked:
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])
self.unlock_file(file)
os.remove(file)
else:
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
os.close(self.virus_lock[file])
self.unlock_file(file)
except:
continue
self.init_state_safe()
@@ -673,6 +706,7 @@ class MainWindow_Controller(QMainWindow):
def write_scan(self, state, file):
try:
self.lock_file(file)
self.virus_list.append(file)
self.virus_list_ui.append(f"[{state}] {file}")
item = QListWidgetItem()
@@ -680,8 +714,6 @@ class MainWindow_Controller(QMainWindow):
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
self.ui.Virus_Scan_output.addItem(item)
self.virus_lock[file] = os.open(file, os.O_RDWR)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
except:
pass
@@ -754,14 +786,18 @@ class MainWindow_Controller(QMainWindow):
file_type = str(f".{file.split('.')[-1]}").lower()
if self.high_sensitivity and file != self.pyas:
if self.api_scan(file):
self.write_scan(self.trans("惡意"),file)
self.write_scan(self.trans("Vir.cloud.md5"),file)
elif self.ml_scan(file):
self.write_scan(self.trans("Sus.hdfile.ml"),file)
elif self.pe_scan(file):
self.write_scan(self.trans("可疑"),file)
elif file_type in slist and self.sign_scan(file):
self.write_scan(self.trans("Sus.pefile.he"),file)
elif file_type in slist and file != self.pyas:
if self.api_scan(file):
self.write_scan(self.trans("惡意"),file)
self.write_scan(self.trans("Vir.cloud.md5"),file)
elif self.ml_scan(file):
self.write_scan(self.trans("Sus.hdfile.ml"),file)
elif self.pe_scan(file):
self.write_scan(self.trans("可疑"),file)
self.write_scan(self.trans("Sus.pefile.he"),file)
except:
pass
@@ -769,15 +805,15 @@ class MainWindow_Controller(QMainWindow):
for fd in os.listdir(path):
try:
file = str(os.path.join(path,fd)).replace("\\", "/")
self.ui.Virus_Scan_text.setText(self.trans(f"正在掃描: ")+file)
QApplication.processEvents()
if self.scan_file == False:
return
break
elif ":/Windows" in file:
continue
elif os.path.isdir(file):
self.traverse_path(file)
elif file not in self.whitelist:
self.ui.Virus_Scan_text.setText(self.trans(f"正在掃描: ")+file)
QApplication.processEvents()
self.start_scan(file)
gc.collect()
except:
@@ -802,26 +838,58 @@ class MainWindow_Controller(QMainWindow):
except:
return True
def scr_scan(self, text):
try:
if os.path.isfile(text):
with open(text, "r", encoding="utf-8") as f:
text = f.read()
return any(sn in str(text) for sn in scripts_list)
except:
return False
def pe_scan(self, file):
try:
fn = []
with pefile.PE(file) as pe:
fn = []
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for func in entry.imports:
try:
fn.append(str(func.name, "utf-8"))
except:
pass
return fn in function_list
max_vfl = []
for vfl in func_virus:
QApplication.processEvents()
max_vfl.append(len(set(fn)&set(vfl))/len(set(fn)|set(vfl)))
max_sfl = []
for sfl in func_safe:
QApplication.processEvents()
max_sfl.append(len(set(fn)&set(sfl))/len(set(fn)|set(sfl)))
if self.high_sensitivity:
return max(max_vfl) >= max(max_sfl)
elif "_CorExeMain" not in fn:
return max(max_vfl) >= max(max_sfl)
return False
except:
return False
def ml_scan(self, file):
try:
data = []
if os.path.getsize(file) <= 209715200:
with open(file, 'rb') as f:
for block in iter(lambda: f.read(3),b''):
QApplication.processEvents()
data.append(str(hexlify(block),'utf-8'))
if self.high_sensitivity:
return self.ml.predict(data) == 1
elif self.sign_scan(file):
return self.ml.predict(data) == 1
return False
except:
return False
def scan_proc(self, value):
try:
if isinstance(value, int):
for entry in psutil.Process(value).memory_maps():
file = entry.path.replace("\\", "/")
if ":/Windows" not in file and ":/Program" not in file and "/AppData/" not in file:
if self.api_scan(file) or self.pe_scan(file) or self.ml_scan(file):
return True
elif self.api_scan(value) or self.pe_scan(value) or self.ml_scan(value):
return True
return False
except:
return False
@@ -927,6 +995,8 @@ class MainWindow_Controller(QMainWindow):
for i in Permission:
try:
win32api.RegDeleteValue(key,i)
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name().replace("\\", "/"))
except:
pass
win32api.RegCloseKey(key)
@@ -1151,28 +1221,28 @@ class MainWindow_Controller(QMainWindow):
if p.pid not in existing_processes:
existing_processes.add(p.pid)
while self.proc_protect:
time.sleep(0.1)
time.sleep(0.05)
for p in psutil.process_iter():
try:
if p.pid not in existing_processes:
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
if p.pid not in existing_processes and file not in self.whitelist:
existing_processes.add(p.pid)
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
if ":/Windows" in file or ":/Program" in file:
if "powershell" in name and self.api_scan(cmd[-1].split("'")[-2]):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+name)
elif "cmd.exe" in name and self.api_scan(" ".join(cmd[2:])):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+name)
elif self.scr_scan(cmd) or self.api_scan(cmd[-1]):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+name)
elif file != self.pyas and file not in self.whitelist:
if self.sign_scan(file):
self.proc = p
if self.api_scan(file) or self.pe_scan(file):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+name)
psutil.Process(p.pid).suspend()
if "powershell" in name and self.scan_proc(cmd[-1].split("'")[-2]):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+str(cmd[-1].split("'")[-2]))
elif "cmd.exe" in name and self.scan_proc(" ".join(cmd[2:])):
p.kill()
self.send_notify(self.trans("惡意腳本攔截: ")+str(" ".join(cmd[2:])))
elif ":/Program" not in file and self.scan_proc(cmd[-1]):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+str(cmd[-1]))
elif ":/Windows" not in file and self.scan_proc(p.pid):
p.kill()
self.send_notify(self.trans("惡意軟體攔截: ")+file)
elif file != self.pyas and self.sign_scan(file):
self.proc = p
psutil.Process(p.pid).resume()
gc.collect()
except:
pass
@@ -1181,14 +1251,21 @@ class MainWindow_Controller(QMainWindow):
hDir = win32file.CreateFile("C:/Users/",win32con.GENERIC_READ,win32con.FILE_SHARE_READ|win32con.FILE_SHARE_WRITE|win32con.FILE_SHARE_DELETE,None,win32con.OPEN_EXISTING,win32con.FILE_FLAG_BACKUP_SEMANTICS,None)
self.ransom_block = False
while self.file_protect:
for action, file in win32file.ReadDirectoryChangesW(hDir,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):
for action, file in win32file.ReadDirectoryChangesW(hDir,1048576,True,win32con.FILE_NOTIFY_CHANGE_FILE_NAME|win32con.FILE_NOTIFY_CHANGE_DIR_NAME|win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES|win32con.FILE_NOTIFY_CHANGE_SIZE|win32con.FILE_NOTIFY_CHANGE_LAST_WRITE|win32con.FILE_NOTIFY_CHANGE_SECURITY,None,None):
try:
if action == 2 and str(f".{file.split('.')[-1]}").lower() in alist:
if self.ransom_block and "AppData" not in file:
full_path = str(f"C:/Users/{file}").replace("\\", "/")
file_type = str(f".{full_path.split('.')[-1]}").lower()
if action == 2 and "/AppData/" not in full_path and file_type in alist:
if self.ransom_block:
self.proc.kill()
self.ransom_block = False
self.send_notify(self.trans("勒索軟體攔截: ")+self.proc.name())
self.send_notify(self.trans("勒索軟體攔截: ")+self.proc.exe().replace("\\", "/"))
self.ransom_block = True
#elif action == 3 and "/AppData/" not in full_path and file_type in slist:
#if os.path.getsize(full_path) <= 20971520:
#if self.sign_scan(full_path) and self.api_scan(full_path):
#self.lock_file(full_path)
#self.send_notify(self.trans("惡意軟體攔截: ")+full_path)
except:
pass
@@ -1197,15 +1274,14 @@ class MainWindow_Controller(QMainWindow):
try:
time.sleep(0.5)
with open(r"\\.\PhysicalDrive0", "r+b") as f:
if self.mbr_value[510:512] == b'\x55\xAA':
if f.read(512) != self.mbr_value:
f.seek(0)
f.write(self.mbr_value)
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name())
else:
if self.mbr_value[510:512] != b'\x55\xAA':
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.name())
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.exe().replace("\\", "/"))
elif f.read(512) != self.mbr_value:
f.seek(0)
f.write(self.mbr_value)
self.proc.kill()
self.send_notify(self.trans("惡意行為攔截: ")+self.proc.exe().replace("\\", "/"))
except:
pass
@@ -1224,10 +1300,11 @@ class MainWindow_Controller(QMainWindow):
while self.net_protect:
try:
time.sleep(0.5)
local_host = socket.gethostbyname(socket.gethostname())
for conn in self.proc.connections():
if socket.gethostbyname(socket.gethostname()) == conn.laddr.ip:
if conn.laddr.ip == local_host:
self.proc.kill()
self.send_notify(self.trans("網路通訊攔截: ")+self.proc.name())
self.send_notify(self.trans("網路通訊攔截: ")+self.proc.exe().replace("\\", "/"))
except:
pass
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -1,5 +1,5 @@
slist = [".exe",".dll",".com",".msi",".scr",
".bat",".cmd",".ps1",".vbs",".js"]
".js",".bat",".cmd",".ps1",".vbs"]
alist = [".ppt",".pptx",".wps",".txt",".rtf",
".pdf",".xls",".xlsx",".doc",".docx",
-1
View File
@@ -1 +0,0 @@
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
Binary file not shown.
Binary file not shown.
Binary file not shown.
+9 -58
View File
@@ -1,15 +1,8 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'C:\Users\User\Documents\Project\Python\PYAS\Library\Qtui\PYAS_Interface.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys, PYAS_Resource
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
@@ -21,8 +14,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
MainWindow.setFont(font)
MainWindow.setFocusPolicy(QtCore.Qt.TabFocus)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icon/Icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
icon = QtGui.QIcon(QFileIconProvider().icon(QFileInfo(str(sys.argv[0]))))
MainWindow.setWindowIcon(icon)
MainWindow.setIconSize(QtCore.QSize(64, 64))
MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
@@ -831,7 +823,7 @@ class Ui_MainWindow(object):
self.State_title.setAlignment(QtCore.Qt.AlignCenter)
self.State_title.setObjectName("State_title")
self.State_icon = QtWidgets.QLabel(self.State_widget)
self.State_icon.setGeometry(QtCore.QRect(250, 20, 171, 171))
self.State_icon.setGeometry(QtCore.QRect(250, 30, 171, 171))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei")
font.setPointSize(1)
@@ -860,38 +852,7 @@ class Ui_MainWindow(object):
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.State_output.setFont(font)
self.State_output.setAutoFillBackground(False)
self.State_output.setStyleSheet("QScrollBar:vertical\n"
"{\n"
" border: none;\n"
" background: transparent;\n"
" width: 10px;\n"
"}\n"
" \n"
"QScrollBar::handle:vertical\n"
"{\n"
" background-color: rgba(200, 200, 200,1);\n"
" min-height: 30px;\n"
" border-radius:3px;\n"
" width: 6px;\n"
" }\n"
" \n"
"QScrollBar::add-line:vertical\n"
"{\n"
" border: none;\n"
" height: 0px;\n"
" }\n"
" \n"
" QScrollBar::sub-line:vertical\n"
"{\n"
" border: none;\n"
" height: 0px;\n"
"}\n"
" \n"
" QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical\n"
" { \n"
" background:transparent;\n"
" border-radius:3px;\n"
"}")
self.State_output.setStyleSheet("")
self.State_output.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.State_output.setUndoRedoEnabled(True)
self.State_output.setTextInteractionFlags(QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
@@ -1859,7 +1820,6 @@ class Ui_MainWindow(object):
self.Language_Choose_widget_2.raise_()
self.Theme_title.raise_()
self.Protection_widget.raise_()
self.State_widget.raise_()
self.Setting_widget.raise_()
self.About_widget.raise_()
self.Tools_widget.raise_()
@@ -1868,6 +1828,7 @@ class Ui_MainWindow(object):
self.Virus_Scan_widget.raise_()
self.Window_widget.raise_()
self.Navigation_Bar.raise_()
self.State_widget.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
@@ -1909,14 +1870,7 @@ class Ui_MainWindow(object):
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Microsoft YaHei\'; font-size:11pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">asdasas</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">dasd</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">a</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">sd</p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">asd</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">as</p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">dasd</p></body></html>"))
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.State_log.setText(_translate("MainWindow", "日誌:"))
self.About_Back.setText(_translate("MainWindow", "返回"))
self.PYAS_Version.setText(_translate("MainWindow", "PYAS v2.3.5"))
@@ -1962,11 +1916,8 @@ class Ui_MainWindow(object):
self.Theme_Blue.setText(_translate("MainWindow", "藍色主題"))
self.Theme_Red.setText(_translate("MainWindow", "紅色主題"))
self.Theme_Green.setText(_translate("MainWindow", "綠色主題"))
import PYAS_Resource
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
+53 -53
View File
@@ -1,53 +1,53 @@
translate_dict = {"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On":"已開啟","Off":"已關閉"},
"zh_CN": {"已開啟":"已开启","已關閉":"已关闭","On":"已开启","Off":"已关闭",
"軟體":"软件","檔案":"文件","確定":"确认","設定":"设置","關於":"关于",
"錯誤":"错误","實時":"实时","發現":"发现","關閉":"关闭","裝置":"设备",
"總數":"总数","註冊":"注册","圖標":"图标","路徑":"路径","網路":"网络",
"位元":"字节","彈窗":"弹窗","靈敏":"敏感","誤報":"误报","複製":"复制",
"訊":"讯","項":"项","掃":"扫","試":"试","黃":"黄","嗎":"吗","防":"保",
"鑰":"钥","當":"当","後":"后","護":"护","導":"导","區":"区","復":"复",
"攔":"拦","請":"请","統":"统","刪":"删","進":"进","個":"个","選":"选",
"啟":"启","監":"监","並":"并","徑":"径","盤":"盘","隱":"隐","動":"动",
"狀":"状","誌":"志","這":"这","會":"会","題":"题","擇":"择","語":"语",
"無":"无","顯":"显","變":"变","戶":"户","碼":"码","雲":"云","訂":"订",
"稱":"称","類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网",
"詢":"询","製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红",
"綠":"绿","態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关",
"強":"强","驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开",
"惡":"恶",},
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
"惡意檔案":"Virus ","惡意軟體":"Malware ","勒索軟體":"Ransom ",
"惡意腳本":"Script ","惡意行為":"Behavior ","可疑軟體":"Suspicious ",
"許可條款":"License Terms","惡意":"Malicious","可疑":"Suspicious",
"啟用":"Enable ","禁用":"Disable ","正在初始化中":"Initializing ",
"正在掃描":"Scanning ","正在刪除":"Deleting ","最小化到":"Minimize To ",
"確定要":"Sure Want To ","靈敏度":"Sensitivity ","更新":"Update",
"白色主題":"White","黑色主題":"Black","黃色主題":"Yellow","紅色主題":"Red",
"藍色主題":"Blue","綠色主題":"Green","語言":"Language ","製作":"Make",
"測試人員":"Testers","版本資訊":"Information","通訊":"Communication ",
"註冊表":"Registry ","退出":"Quit ","檔案":"File ","當前":"Currently ",
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
"失敗":"Failed ","請":"Please ","路徑":"Path ","方式":"Method ",
"需要":"Need ","病毒":"Virus ","選擇":"Select ","返回":"Back",
"受到":"Been ","錯誤":"Error","完成":"Complete ","引擎":"Engine ",
"托盤":"Tray ","圖標":"Icon ","不安全":"Unsafe","增強":"Enhanced ",
"系統":"System ","雲端":"Cloud ","重啟":"Reboot ","修復":"Repair ",
"裝置":"Device ","發現":"Found ","成功":"Success ","清理":"Cleanup ",
"確定":"OK","執行":"Execute ","警告":"Warning ","使用":"Use ",
"網路":"Network ","變更":"Change ","總數":"Total","結束":"End ",
"選項":"Options ","監控":"Monitor ","連接":"Connect ","可以":"To ",
"進程":"Process ","攔截":"Block ","引導":"Boot ","刪除":"Delete ",
"分區":"Partition ","設定":"Settings","關於":"About","模式":"Mode ",
"提高":"Improve ","安全":"Security ","顯色":"Color ","主題":"Themes ",
"風險":"Risk ","介面":"GUI ","核心":"Core ","服務":"Services ",
"管理":"Manage","所有":"All ","全盤":"Full ","取消":"Cancel ",
"垃圾":"Junk ","位元":"byte ","本機":"Computer ","停止":"Stop ",
"增加到":"Add File To ","白名單":"White List ","軟體":"Software ",
"增加":"Add","移除":"Delete","項目":"Items ","生成":"Create ","稱":"",
"開啟":"Open ","您":"You ","此":"This ","並":"And ","未":"Not ",
"高":"High ","新":"New ","和":"And ","可能會":"Possible ","會":"Can ",
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","驅動":"Drive ",
"的":"","顯示":"","個":"","嗎":"","中":"","了":"","行":"","立即":"",
"密鑰":"Key ","檢測":"Detect ","誤報":"False Positive "," ":" ",
"複製":"Copy "}}
translate_dict = {
"zh_TW": {"已开启":"已開啟","已关闭":"已關閉","On":"已開啟","Off":"已關閉"},
"zh_CN": {"已開啟":"已开启","已關閉":"已关闭","On":"已开启","Off":"已关闭",
"軟體":"软件","檔案":"文件","確定":"确认","設定":"设置","關於":"关于",
"錯誤":"错误","實時":"实时","發現":"发现","關閉":"关闭","裝置":"设备",
"總數":"总数","註冊":"注册","圖標":"图标","路徑":"路径","網路":"网络",
"位元":"字节","彈窗":"弹窗","靈敏":"敏感","誤報":"误报","複製":"复制",
"訊":"讯","項":"项","掃":"扫","試":"试","黃":"黄","嗎":"吗","防":"保",
"鑰":"钥","當":"当","後":"后","護":"护","導":"导","區":"区","復":"复",
"攔":"拦","請":"请","統":"统","刪":"删","進":"进","個":"个","選":"选",
"啟":"启","監":"监","並":"并","徑":"径","盤":"盘","隱":"隐","動":"动",
"狀":"状","誌":"志","這":"这","會":"会","題":"题","擇":"择","語":"语",
"無":"无","顯":"显","變":"变","戶":"户","碼":"码","雲":"云","訂":"订",
"稱":"称","類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网",
"詢":"询","製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红",
"綠":"绿","態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关",
"強":"强","驅":"驱","為":"为","腳":"脚","增":"增","單":"单","開":"开",
"惡":"恶","介":"界"},
"en_US": {"已開啟":"On","已關閉":"Off","已开启":"On","已关闭":"Off",",":", ",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Website",
"惡意檔案":"Virus ","惡意軟體":"Malware ","勒索軟體":"Ransom ",
"惡意腳本":"Script ","惡意行為":"Behavior ","可疑軟體":"Suspicious ",
"許可條款":"License Terms","惡意":"Malicious","可疑":"Suspicious",
"啟用":"Enable ","禁用":"Disable ","正在初始化中":"Initializing ",
"正在掃描":"Scanning ","正在刪除":"Deleting ","最小化到":"Minimize To ",
"確定要":"Sure Want To ","靈敏度":"Sensitivity ","更新":"Update",
"白色主題":"White","黑色主題":"Black","黃色主題":"Yellow","紅色主題":"Red",
"藍色主題":"Blue","綠色主題":"Green","語言":"Language ","製作":"Make",
"測試人員":"Testers","版本資訊":"Information","通訊":"Communication ",
"註冊表":"Registry ","退出":"Quit ","檔案":"File ","當前":"Currently ",
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
"失敗":"Failed ","請":"Please ","路徑":"Path ","方式":"Method ",
"需要":"Need ","病毒":"Virus ","選擇":"Select ","返回":"Back",
"受到":"Been ","錯誤":"Error","完成":"Complete ","引擎":"Engine ",
"托盤":"Tray ","圖標":"Icon ","不安全":"Unsafe","增強":"Enhanced ",
"系統":"System ","雲端":"Cloud ","重啟":"Reboot ","修復":"Repair ",
"裝置":"Device ","發現":"Found ","成功":"Success ","清理":"Cleanup ",
"確定":"OK","執行":"Execute ","警告":"Warning ","使用":"Use ",
"網路":"Network ","變更":"Change ","總數":"Total","結束":"End ",
"選項":"Options ","監控":"Monitor ","連接":"Connect ","可以":"To ",
"進程":"Process ","攔截":"Block ","引導":"Boot ","刪除":"Delete ",
"分區":"Partition ","設定":"Settings","關於":"About","模式":"Mode ",
"提高":"Improve ","安全":"Security ","顯色":"Color ","主題":"Themes ",
"風險":"Risk ","介面":"GUI ","核心":"Core ","服務":"Services ",
"管理":"Manage","所有":"All ","您":"You ","取消":"Cancel ","未":"Not ",
"垃圾":"Junk ","位元":"byte ","本機":"Computer ","停止":"Stop ",
"增加到":"Add File To ","白名單":"White List ","軟體":"Software ",
"增加":"Add","移除":"Delete","項目":"Items ","生成":"Create ","稱":"",
"複製":"Copy ","開啟":"Open ","此":"This ","並":"And ","全盤":"Full ",
"高":"High ","新":"New ","和":"And ","可能會":"Possible ","會":"Can ",
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","驅動":"Drive ",
"的":"","顯示":"","個":"","嗎":"","中":"","了":"","行":"","立即":"",
"密鑰":"Key ","檢測":"Detect ","誤報":"False Positive "," ":" "}}
-1
View File
@@ -1 +0,0 @@
scripts_list = ["%0|%0","ExclusionPath","cmdkey","eiculwo","random","bypass"]
+2 -2
View File
@@ -1,10 +1,10 @@
import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='2.8.6',
version='2.9.6',
company_name="PYAS Security",
file_description="Python Antivirus Software",
internal_name="PYAS",
legal_copyright="© PYAS Security",
legal_copyright="PYAS Security",
original_filename="PYAS.exe",
product_name="PYAS")
+166
View File
@@ -0,0 +1,166 @@
from collections import defaultdict
import math, json, time, types, random
class ListClassifier:
def __init__(self):
self.word_weights = defaultdict(lambda: {'ones': 0, 'zero': 0})
self.total_counts = {'ones': 0, 'zero': 0}
self.prior_probs = {'ones': 0, 'zero': 0}
self.class_weights = {'ones': 1, 'zero': 1}
self.min_quantity = 0
self.max_quantity = 1.0
self.learning_rate = 0.1
self.max_sequence = 100
self.test_data = []
self.train_data = []
def load_model(self, model_data):
if isinstance(model_data, str):
with open(model_data, 'r') as f:
model_data = json.load(f)
self.word_weights = defaultdict(lambda: {'ones': 0, 'zero': 0})
self.word_weights.update(model_data['word_weights'])
self.total_counts = model_data['total_counts']
self.prior_probs = model_data['prior_probs']
self.max_sequence = model_data.get('max_sequence')
def save_model(self, filename):
model_data = {
'word_weights': dict(self.word_weights),
'total_counts': self.total_counts,
'prior_probs': self.prior_probs,
'max_sequence': self.max_sequence}
with open(filename, 'w') as f:
json.dump(model_data, f)
print(f"\nModel Is Safe In {filename}")
def train_model(self, ones_data, zero_data, epochs=1, batch_size=32, min_quantity=0, max_quantity=1.0, max_sequence=10, test_size=0.2, learning_rate=None, random_seed=None, class_weights=None):
self.min_quantity = min_quantity
self.max_quantity = max_quantity
self.max_sequence = max_sequence
self.learning_rate = learning_rate if learning_rate is not None else self.learning_rate
self.class_weights = class_weights if class_weights is not None else self.class_weights
is_generator = isinstance(ones_data[0], types.GeneratorType)
all_data = ones_data + zero_data
random.seed(random_seed)
random.shuffle(all_data)
split_index = int((1 - test_size) * len(all_data))
self.train_data = all_data[:split_index]
self.test_data = all_data[split_index:]
train_accuracies, train_losses = [], []
test_accuracies, test_losses = [], []
for epoch in range(epochs):
print(f'Epoch: {epoch + 1}/{epochs}')
train_accuracy, train_loss = self._train_epoch(self.train_data, batch_size, is_generator, prefix='Training:')
test_accuracy, test_loss = self._test_epoch(self.test_data, batch_size, is_generator, prefix='Testing: ')
train_accuracies.append(train_accuracy)
train_losses.append(train_loss)
test_accuracies.append(test_accuracy)
test_losses.append(test_loss)
self._print_table(train_accuracies, train_losses, test_accuracies, test_losses)
total_lists = len(self.train_data) + len(self.test_data)
self.prior_probs['ones'] = len(ones_data) / total_lists
self.prior_probs['zero'] = len(zero_data) / total_lists
self._filter_word_weights()
def _train_epoch(self, data, batch_size, is_generator, prefix=''):
start_time = time.time()
correct_predictions, total_samples, total_loss = 0, 0, 0
for i in range(0, len(data), batch_size):
batch = data[i:i + batch_size]
for lst_gen in batch:
lst = list(lst_gen) if is_generator else lst_gen
correct_predictions += self._update_weights(lst, 'ones')
total_samples += len(lst)
total_loss += self._calculate_loss(lst, 'ones')
elapsed_time = time.time() - start_time
suffix = f'(Accuracy: {correct_predictions/total_samples:.2%}, Loss: {total_loss/total_samples:.4f}, Elapsed: {elapsed_time:.2f}s)'
self._print_progress_bar(i + batch_size, len(data), prefix=prefix, suffix=suffix)
print('')
accuracy = correct_predictions / total_samples
average_loss = total_loss / total_samples
return accuracy, average_loss
def _test_epoch(self, data, batch_size, is_generator, prefix=''):
start_time = time.time()
correct_predictions, total_samples, total_loss = 0, 0, 0
for i in range(0, len(data), batch_size):
batch = data[i:i + batch_size]
for lst_gen in batch:
lst = list(lst_gen) if is_generator else lst_gen
correct_predictions += (len(lst) - self._update_weights(lst, 'zero'))
total_samples += len(lst)
total_loss += self._calculate_loss(lst, 'zero')
elapsed_time = time.time() - start_time
suffix = f'(Accuracy: {correct_predictions/total_samples:.2%}, Loss: {total_loss/total_samples:.4f}, Elapsed: {elapsed_time:.2f}s)'
self._print_progress_bar(i + batch_size, len(data), prefix=prefix, suffix=suffix)
print('')
accuracy = correct_predictions / total_samples
average_loss = total_loss / total_samples
return accuracy, average_loss
def _print_table(self, train_accuracies, train_losses, test_accuracies, test_losses):
print("\nEpoch\tTrain Accuracy\tTrain Loss\tTest Accuracy\tTest Loss (Table):")
for i, (train_acc, train_loss, test_acc, test_loss) in enumerate(zip(train_accuracies, train_losses, test_accuracies, test_losses), 1):
print(f"{i}\t{train_acc:.2%}\t\t{train_loss:.4f}\t\t{test_acc:.2%}\t\t{test_loss:.4f}")
def _print_progress_bar(self, iteration, total, prefix='', suffix='', length=30, fill='█'):
percent = min(100.0, max(0.0, 100 * (iteration / float(total))))
percent_string = "{0:.2f}".format(percent)
filled_length = int(length * iteration // total)
bar = fill * filled_length + ' ' * (length - filled_length)
print(f'\r {prefix} |{bar}| {percent_string}% {suffix}', end='\r')
def _filter_word_weights(self):
for word, weights in list(self.word_weights.items()):
total_weight = weights['ones'] + weights['zero']
if (total_weight < self.min_quantity or total_weight > self.max_quantity * max(self.total_counts.values())):
del self.word_weights[word]
def _get_data_for_word(self, word, category):
data = []
if isinstance(self.word_weights[word][category], list):
for lst in self.word_weights[word][category]:
data.append(lst)
return data
def predict(self, new_list):
ones_log_prob = self._calculate_category_log_prob(new_list, 'ones')
zero_log_prob = self._calculate_category_log_prob(new_list, 'zero')
if ones_log_prob > zero_log_prob:
return 1
else:
return 0
def _update_weights(self, lst, category):
correct_prediction = 0
for i, word in enumerate(lst):
position_encoding = min(i / len(lst), 1.0)
word_frequency = self.word_weights[word][category]
learning_rate = self.learning_rate / (word_frequency + 1)
self.word_weights[word][category] += learning_rate * self.class_weights[category] * position_encoding
self.total_counts[category] += learning_rate
prediction = self.predict([word])
correct_prediction += 1 if prediction == int(category == 'ones') else 0
return correct_prediction
def _calculate_loss(self, lst, category):
loss = 0.0
for word in lst:
if word in self.word_weights:
word_weight_category = self.word_weights[word][category]
total_weight_category = self.total_counts[category]
prob = (word_weight_category + 1) / (total_weight_category + len(self.word_weights))
loss += -math.log(prob)
return loss
def _calculate_category_log_prob(self, lst, category):
log_prob = 0.0
for word in lst:
if word in self.word_weights:
word_weight_category = self.word_weights[word][category]
total_weight_category = self.total_counts[category]
prob = (word_weight_category + 1) / (total_weight_category + len(self.word_weights))
log_prob += math.log(prob)
log_prob += math.log(self.prior_probs[category] + 1e-10)
return log_prob
+7 -5
View File
@@ -1,9 +1,8 @@
# PYAS (Python Antivirus Software)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/46f46cf0-dbf3-4a33-b28d-234f610f1a07)
![PYAS](https://github.com/87owo/PYAS/assets/85057800/153bcad9-18ab-4c81-bcb6-186434d0ef1b)
## Official Website
https://pyantivirus.wixsite.com/pyas ,
https://github.com/87owo/PYAS
https://pyantivirus.wixsite.com/pyas , https://github.com/87owo/PYAS
## MIT License
https://github.com/87owo/PYAS/blob/main/LICENSE.md
@@ -11,10 +10,13 @@ https://github.com/87owo/PYAS/blob/main/LICENSE.md
## Support System
Windows 8.1, 10, 11 (64-bit), Ram 1GB, Rom 1GB or higher
## Requirements
psutil==5.9.5, pefile==2023.2.7, requests==2.31.0, pyperclip==1.8.2, pywin32==306, PyQt5==5.15.9
## Import Module
os, gc, sys, time, json, requests, pyperclip, psutil, ctypes, pywin32, subprocess, xml, hashlib, pefile, PyQt5, threading, PYAS_Language, PYAS_Scripts, PYAS_Function, PYAS_Extension, PYAS_Interface
os, gc, sys, time, json, psutil, hashlib, pefile, socket, msvcrt, requests, pyperclip, win32file, win32gui, win32api, win32con, xml, PYAS_Function, PYAS_Function_Safe, PYAS_Extension, PYAS_Language, PYAS_Interface, threading, PyQt5
## Special Thanks
360, Wix, VirusShare, mtkiao129, LenStevens
360, Wix, VirusShare, mtkiao129, LenStevens, AV-T Team of LisectGroup
Copyright© 2020~2023 PYAS Security By 87owo