Compare commits

...
1400 Commits
Author SHA1 Message Date
87owo 949f74ab04 Add files via upload 2025-12-28 14:21:07 +08:00
87owo ef68a89b45 Add files via upload 2025-12-28 14:20:35 +08:00
87owo 10ecb35cca Add files via upload 2025-12-28 14:12:29 +08:00
87owo 696ac22f77 Add files via upload 2025-12-27 15:17:13 +08:00
87owo 8d13f98030 Add files via upload 2025-12-27 02:09:29 +08:00
87owo 1dddf13a9d Add files via upload 2025-12-27 02:08:10 +08:00
87owo 855472239a Delete Engine/Model/train_torch.py 2025-12-27 01:42:33 +08:00
87owo dc5d317623 Delete Engine/Model/train_tensorflow.py 2025-12-27 01:42:24 +08:00
87owo 91011e9e2a Add files via upload 2025-12-27 01:42:07 +08:00
87owo bb09b75d3b Add files via upload 2025-12-27 01:41:45 +08:00
87owo b2f9adad66 Add files via upload 2025-12-27 01:41:03 +08:00
87owo 0c2c84d2a9 Add files via upload 2025-12-26 15:13:42 +08:00
87owo 1733e7cc86 Add files via upload 2025-12-25 23:49:05 +08:00
87owo 831d9a9895 Add files via upload 2025-12-25 18:53:53 +08:00
87owo 70ba3a629d Update README.md 2025-12-25 03:14:28 +08:00
87owo 29e9702d21 Update README.md 2025-12-25 03:12:28 +08:00
87owo f8ef756bd4 Add files via upload 2025-12-25 01:23:41 +08:00
87owo 233b28e8a5 Add files via upload 2025-12-24 22:34:19 +08:00
87owo da77c17be5 Add files via upload 2025-12-24 14:33:17 +08:00
87owo 8dfa76822e Delete Engine/Model/train.py 2025-12-24 14:32:38 +08:00
87owo 4163991b66 Add files via upload 2025-12-24 14:32:18 +08:00
87owo 78323c9a08 Add files via upload 2025-12-24 14:31:06 +08:00
87owo eb517e86f3 Add files via upload 2025-12-24 14:30:13 +08:00
87owo e24f3823cb Add files via upload 2025-12-24 11:15:31 +08:00
87owo fd3e8ee28a Update README.md 2025-12-21 23:27:08 +08:00
87owo a980ea7bd6 Update README.md 2025-12-21 23:26:00 +08:00
87owo 20ce73c54f Update README.md 2025-12-21 23:17:32 +08:00
87owo d8f22f7f28 Update README.md 2025-12-21 23:16:03 +08:00
87owo 591055edaf Update README.md 2025-12-21 23:13:09 +08:00
87owo fbf0e06c04 Update LICENSE.txt 2025-12-19 22:46:40 +08:00
87owo 9daf327e80 Update README.md 2025-12-19 22:42:21 +08:00
87owo 4441978e10 Update LICENSE.txt 2025-12-19 22:38:14 +08:00
87owo d8eb770735 Update LICENSE.txt 2025-12-18 20:12:03 +08:00
87owo cefbf79c6e Update LICENSE.txt 2025-12-11 20:01:08 +08:00
87owo fc8762094e Update LICENSE.txt 2025-12-11 20:00:42 +08:00
87owo 801c3aadcc Update LICENSE.txt 2025-12-09 11:43:08 +08:00
87owo 4296f1ec43 Add files via upload 2025-11-27 15:28:31 +08:00
87owo a7f469747c Add files via upload 2025-11-27 14:57:17 +08:00
87owo 68d0352343 Add files via upload 2025-11-27 14:56:17 +08:00
87owo 01e6d09f7c Update train.py 2025-11-26 17:56:08 +08:00
87owo 6582abfd4a Update train.py 2025-11-26 17:26:31 +08:00
87owo f8f4b303d7 Update LICENSE.txt 2025-11-01 17:08:11 +08:00
87owo 79f05a23a8 Add files via upload 2025-10-08 11:51:18 +08:00
87owo 95845c5c85 Add files via upload 2025-10-08 11:05:43 +08:00
87owo cd1a24290e Add files via upload 2025-10-07 23:08:14 +08:00
87owo 21261bfb17 Add files via upload 2025-10-07 22:48:17 +08:00
87owo 79abf51cb8 Add files via upload 2025-10-07 22:25:51 +08:00
87owo e538b837d5 Add files via upload 2025-10-07 21:53:12 +08:00
87owo 7b995e1223 Add files via upload 2025-09-16 20:12:31 +08:00
87owo c7826b58a3 Add files via upload 2025-09-16 20:04:32 +08:00
87owo 5786dbdb75 Add files via upload 2025-09-16 20:03:15 +08:00
87owo 0f42c19ec7 Delete README_zh_TW.md 2025-09-10 13:43:50 +08:00
87owo 87d44a64f3 Delete README_zh_CN.md 2025-09-10 13:43:40 +08:00
87owo 77dd4ace33 Update README.md 2025-09-10 13:43:14 +08:00
87owo 0907d71957 Update README.md 2025-09-10 13:36:40 +08:00
87owo e7a30646e3 Update README.md 2025-09-10 13:35:25 +08:00
87owo 98d21b3391 Update LICENSE.txt 2025-09-09 09:45:56 +08:00
87owo 35d9203b9c Update LICENSE.txt 2025-09-09 09:32:39 +08:00
87owo e6e384a7f7 Rename LICENSE.md to LICENSE.txt 2025-09-09 08:45:38 +08:00
87owo 7d954c14ae Rename LICENSE.txt to LICENSE.md 2025-09-09 08:45:19 +08:00
PYDT 41388962e2 Add files via upload 2025-08-29 17:59:44 +08:00
PYDT 6d51f6b6a9 Add files via upload 2025-08-29 16:42:14 +08:00
PYDT c7af9a3702 Add files via upload 2025-08-29 16:41:38 +08:00
PYDT da7c61202c Add files via upload 2025-08-28 13:36:16 +08:00
PYDT c24e872a33 Add files via upload 2025-08-28 10:28:15 +08:00
PYDT d0809ec313 Add files via upload 2025-08-28 08:58:42 +08:00
PYDT c1a796da38 Add files via upload 2025-08-27 17:53:10 +08:00
PYDT 98c27800e0 Add files via upload 2025-08-26 10:11:36 +08:00
PYDT 7a18eadd13 Add files via upload 2025-08-25 23:50:38 +08:00
PYDT b07adb7b30 Add files via upload 2025-08-25 23:23:42 +08:00
PYDT 4d7c3cce4d Add files via upload 2025-08-25 20:28:36 +08:00
PYDT 4ff0ab9cd8 Add files via upload 2025-08-25 09:42:51 +08:00
PYDT 264dd50969 Add files via upload 2025-08-25 08:49:53 +08:00
PYDT 26d0ad1a6e Add files via upload 2025-08-24 22:06:31 +08:00
PYDT 90284018e5 Add files via upload 2025-08-24 22:06:02 +08:00
PYDT 46eeec16d4 Add files via upload 2025-08-24 22:05:30 +08:00
PYDT 083fb0dccc Add files via upload 2025-08-23 22:07:39 +08:00
PYDT d46f145806 Delete Plugins/Filter/ProtectReg.c 2025-08-23 22:04:35 +08:00
PYDT 868eddfd2b Add files via upload 2025-08-23 22:04:11 +08:00
PYDT 8295e6bb5b Add files via upload 2025-08-22 23:13:46 +08:00
PYDT 424914b842 Add files via upload 2025-08-22 22:16:20 +08:00
PYDT 8c5027df0f Delete Plugins/Filter/ProtectBoot.c 2025-08-22 21:16:55 +08:00
PYDT 0b7817d992 Add files via upload 2025-08-22 21:16:36 +08:00
PYDT ca6c9bfd05 Add files via upload 2025-08-22 05:31:46 +08:00
PYDT 0a1abd8040 Add files via upload 2025-08-22 05:27:25 +08:00
PYDT ed69a4fdf6 Add files via upload 2025-08-22 05:20:50 +08:00
PYDT 2ae19a6d4e Add files via upload 2025-08-22 05:08:52 +08:00
PYDT 404bc50dd4 Add files via upload 2025-08-22 04:56:09 +08:00
PYDT cada5eeeaf Add files via upload 2025-08-22 04:16:55 +08:00
PYDT 5e9bd40e8b Add files via upload 2025-08-22 03:22:40 +08:00
PYDT 0788bab0dd Add files via upload 2025-08-22 03:21:51 +08:00
PYDT 4e8e0dbea7 Add files via upload 2025-08-19 08:27:20 +08:00
PYDT b8c5279137 Add files via upload 2025-08-19 07:52:24 +08:00
PYDT a3255b1681 Add files via upload 2025-08-19 07:43:35 +08:00
PYDT f151379f8f Add files via upload 2025-08-18 22:49:35 +08:00
PYDT 7784544583 Add files via upload 2025-08-18 15:34:45 +08:00
PYDT f742937296 Add files via upload 2025-08-18 00:29:36 +08:00
PYDT 5fd9242291 Add files via upload 2025-08-17 15:30:24 +08:00
PYDT 9f343196a9 Add files via upload 2025-08-17 00:04:25 +08:00
PYDT 5468eded04 Add files via upload 2025-08-17 00:01:22 +08:00
PYDT 1b97758fc9 Add files via upload 2025-08-16 23:57:22 +08:00
PYDT b2e8e49447 Add files via upload 2025-08-16 23:56:03 +08:00
PYDT 3eec781139 Add files via upload 2025-08-16 15:37:39 +08:00
PYDT b6f1977fa0 Add files via upload 2025-08-16 00:02:23 +08:00
PYDT e0aa080f00 Add files via upload 2025-08-15 23:56:43 +08:00
PYDT 66aa76c836 Add files via upload 2025-08-15 23:55:49 +08:00
PYDT bb9444e1ae Update README_zh_CN.md 2025-08-15 19:19:35 +08:00
PYDT 6c9bfa7755 Update README_zh_TW.md 2025-08-15 19:18:26 +08:00
PYDT c4fa849290 Update README_zh_TW.md 2025-08-15 19:17:58 +08:00
PYDT 4807e2c410 Update README.md 2025-08-15 19:15:51 +08:00
PYDT 5388efdebc Update README.md 2025-08-15 19:13:15 +08:00
PYDT 1d656de7ba Add files via upload 2025-08-15 18:31:42 +08:00
PYDT eaa1d725a9 Update README_zh_TW.md 2025-08-15 18:01:43 +08:00
PYDT dea2150d63 Update README_zh_CN.md 2025-08-15 18:00:55 +08:00
PYDT 80f9d6cf75 Update README.md 2025-08-15 17:56:38 +08:00
PYDT 7430d38594 Update README.md 2025-08-15 17:54:45 +08:00
PYDT 6804e4af9f Update README_zh_CN.md 2025-08-15 16:38:23 +08:00
PYDT 138756c31d Update README_zh_TW.md 2025-08-15 16:37:50 +08:00
PYDT 349bc293c6 Update README.md 2025-08-15 16:37:17 +08:00
PYDT 2f87cd10f2 Update README.md 2025-08-15 16:30:41 +08:00
PYDT fc50eafcca Add files via upload 2025-08-15 16:13:36 +08:00
PYDT b48e20a727 Update README_zh_CN.md 2025-08-15 15:58:20 +08:00
PYDT ce7ed2e6eb Update README_zh_TW.md 2025-08-15 15:58:04 +08:00
PYDT 043d71e0ff Update README.md 2025-08-15 15:57:32 +08:00
PYDT 1855ae0e1d Delete Plugins/Filter/PYAS_Driver.sys 2025-08-15 15:48:29 +08:00
PYDT 77323a50df Add files via upload 2025-08-15 15:48:14 +08:00
PYDT 1c2f6b85ca Add files via upload 2025-08-15 15:47:36 +08:00
PYDT 2b5c478e4b Update and rename LICENSE.md to LICENSE.txt 2025-08-15 15:39:17 +08:00
PYDT 90fd83a81f Rename LICENSE.proprietary to LICENSE.md 2025-08-15 15:38:29 +08:00
PYDT 8fa2a166f3 Delete LICENSE 2025-08-15 15:36:54 +08:00
PYDT e8cc45ebe7 Update LICENSE.proprietary 2025-08-15 15:36:00 +08:00
PYDT eb87117b91 Rename LICENSE.md to LICENSE 2025-08-15 14:51:50 +08:00
PYDT 3799dfa1e8 Rename LICENSE.proprietary.md to LICENSE.proprietary 2025-08-15 14:51:37 +08:00
PYDT 163c7fd680 Rename LICENSE.proprietary to LICENSE.proprietary.md 2025-08-15 14:51:22 +08:00
PYDT 44ca762f69 Create LICENSE.proprietary 2025-08-15 14:50:15 +08:00
PYDT 8db311ba33 Add files via upload 2025-08-15 14:21:22 +08:00
PYDT 99d8604db4 Add files via upload 2025-08-15 11:14:46 +08:00
PYDT 90aa88daeb Update README.md 2025-08-14 20:31:29 +08:00
PYDT ae6eebad4d Update README_zh_CN.md 2025-08-14 20:30:39 +08:00
PYDT cd31ce1c38 Update README_zh_TW.md 2025-08-14 20:30:00 +08:00
PYDT ed3846e451 Update README_zh_TW.md 2025-08-14 20:28:02 +08:00
PYDT 0c79cf8e37 Update README_zh_CN.md 2025-08-14 20:25:36 +08:00
PYDT 81c7e16c0e Update README_zh_CN.md 2025-08-14 20:23:44 +08:00
PYDT 16c03095b8 Update README.md 2025-08-14 20:22:36 +08:00
PYDT b5dab3aa22 Update README_zh_CN.md 2025-08-14 20:21:11 +08:00
PYDT e4a3c871f8 Update README.md 2025-08-14 20:15:46 +08:00
PYDT a2fe947b08 Update README.md 2025-08-14 20:13:26 +08:00
PYDT 8df49ecfc1 Update README.md 2025-08-14 20:03:11 +08:00
PYDT 526b9bd4c7 Update README.md 2025-08-14 20:00:42 +08:00
PYDT c67ff3d936 Add files via upload 2025-08-14 14:21:47 +08:00
PYDT 417b17da98 Add files via upload 2025-08-13 16:35:12 +08:00
PYDT 4ca19a4eb0 Update README_zh_CN.md 2025-08-13 16:00:20 +08:00
PYDT e834dfb7ee Update README_zh_TW.md 2025-08-13 16:00:05 +08:00
PYDT 5e1ff74fb3 Update README.md 2025-08-13 15:59:50 +08:00
PYDT 7a1d0f2ca7 Delete Engine/Model/PYAS_Model_A1.onnx 2025-08-13 15:53:33 +08:00
PYDT b305522106 Delete Engine/Model/PYAS_Model.json 2025-08-13 15:53:15 +08:00
PYDT ff3495645a Add files via upload 2025-08-13 15:52:58 +08:00
PYDT ddc000321f Add files via upload 2025-08-13 15:41:32 +08:00
PYDT fe4e6af3b9 Add files via upload 2025-08-13 15:40:43 +08:00
PYDT a1a83cc32c Add files via upload 2025-08-13 15:39:56 +08:00
PYDT e37665218b Update README_zh_CN.md 2025-08-12 17:25:31 +08:00
PYDT 2a876f4136 Update README_zh_TW.md 2025-08-12 17:20:27 +08:00
PYDT 290d8e8a64 Update README_zh_TW.md 2025-08-12 17:19:09 +08:00
PYDT 121bce529f Update README_zh_TW.md 2025-08-12 17:17:17 +08:00
PYDT 1232d98573 Update README.md 2025-08-12 17:16:46 +08:00
PYDT 208d9150b0 Update README.md 2025-08-12 17:10:23 +08:00
PYDT 351bf7725e Update README.md 2025-08-12 17:07:56 +08:00
PYDT a547776766 Add files via upload 2025-08-12 17:06:02 +08:00
PYDT 86a8d20757 Add files via upload 2025-08-11 11:26:26 +08:00
PYDT 760c420f95 Delete Plugins/Filter directory 2025-08-11 11:26:15 +08:00
PYDT 44c2edf58e Add files via upload 2025-08-10 21:14:30 +08:00
PYDT e88207c232 Update README.md 2025-08-10 05:02:16 +08:00
PYDT f6b2450fcd Update README.md 2025-08-10 04:58:10 +08:00
PYDT a124ecd3ed Update README.md 2025-08-10 04:54:52 +08:00
PYDT 34fcc3d29e Update README.md 2025-08-10 04:43:12 +08:00
PYDT 5f3011eebc Update README.md 2025-08-10 04:40:49 +08:00
PYDT d4464edb6c Update README.md 2025-08-10 04:34:13 +08:00
PYDT 1dc89a80db Update README.md 2025-08-10 04:33:27 +08:00
PYDT bd23599770 Add files via upload 2025-08-10 00:46:48 +08:00
PYDT bda6ff80da Delete PYAS.py 2025-08-10 00:42:33 +08:00
PYDT 16bee9825f Add files via upload 2025-08-10 00:41:16 +08:00
PYDT 5e4a4c4e8f Add files via upload 2025-08-09 23:50:31 +08:00
PYDT 0a03093333 Delete Plugins/Filter directory 2025-08-09 23:50:08 +08:00
PYDT 960b1d53f7 Add files via upload 2025-08-09 19:32:57 +08:00
PYDT f09dee6a52 Add files via upload 2025-08-09 19:32:08 +08:00
PYDT 301e1e56d1 Delete Plugins/Filter/PYAS_Driver.sys 2025-08-09 19:31:04 +08:00
PYDT 6b2dbd382d Add files via upload 2025-08-08 23:15:27 +08:00
PYDT e6f526c766 Update README_zh_CN.md 2025-08-06 01:09:35 +08:00
PYDT 06cca669a0 Update README_zh_CN.md 2025-08-06 01:09:18 +08:00
PYDT f89ccea208 Update README_zh_TW.md 2025-08-06 01:07:35 +08:00
PYDT 0728f2d995 Update README.md 2025-08-06 01:06:20 +08:00
PYDT c7a7a61c9a Delete PYAS_Suffixes.py 2025-08-06 00:43:52 +08:00
PYDT aca11e66a8 Delete PYAS_Language.py 2025-08-06 00:43:36 +08:00
PYDT 46c7a001c2 Delete Extens directory 2025-08-06 00:43:07 +08:00
PYDT d6aa3c50a3 Add files via upload 2025-08-06 00:42:43 +08:00
PYDT caaadc5cf3 Add files via upload 2025-08-06 00:41:52 +08:00
PYDT 14d703903c Delete Driver directory 2025-08-06 00:41:07 +08:00
PYDT 76fa14ab01 Add files via upload 2025-08-06 00:40:11 +08:00
PYDT d1afe255e5 Add files via upload 2025-05-06 17:28:11 +08:00
PYDT 8f27739331 Add files via upload 2025-04-25 17:09:33 +08:00
PYDT 7a6aba5a2a Add files via upload 2025-02-22 23:18:46 -08:00
PYDT ca0ec1f99d Add files via upload 2025-02-22 23:18:09 -08:00
PYDT 4e167486a1 Add files via upload 2025-02-16 14:51:54 -08:00
PYDT 503bbcd995 Add files via upload 2025-02-16 14:51:20 -08:00
PYDT b160d2f634 Add files via upload 2025-02-16 00:27:25 -08:00
PYDT 2e7628a837 Add files via upload 2025-02-15 03:40:02 -08:00
PYDT 1259948ed7 Update README_zh_TW.md 2025-02-15 15:49:09 +08:00
PYDT 81881ae1a4 Update README_zh_CN.md 2025-02-15 15:48:35 +08:00
PYDT 0b5c581aca Update README.md 2025-02-15 15:47:42 +08:00
PYDT eb3614ed0c Add files via upload 2025-02-14 09:01:50 -08:00
PYDT eb50513277 Add files via upload 2025-02-14 01:10:11 -08:00
PYDT c3af73b8cf Add files via upload 2025-02-13 08:41:54 -08:00
PYDT b552164a13 Add files via upload 2025-02-13 07:42:33 -08:00
PYDT b6dc9ecadb Add files via upload 2025-02-13 07:04:08 -08:00
PYDT 0723dc8dbb Add files via upload 2025-02-13 06:24:22 -08:00
PYDT 0b1fffb5bf Add files via upload 2025-02-13 06:03:33 -08:00
PYDT a39d87e5c5 Add files via upload 2025-02-13 05:52:51 -08:00
PYDT 0b0c3310cf Add files via upload 2025-02-13 05:36:46 -08:00
PYDT f75c3750a5 Add files via upload 2025-02-13 04:15:07 -08:00
PYDT 3da760721b Add files via upload 2025-02-13 03:15:23 -08:00
PYDT a9ad3feeec Add files via upload 2025-02-12 19:27:01 -08:00
PYDT 479c4ade67 Add files via upload 2025-02-12 18:32:50 -08:00
PYDT 84afa3e714 Add files via upload 2025-02-12 18:32:11 -08:00
PYDT 9a69665bab Add files via upload 2025-02-12 18:30:14 -08:00
PYDT fea34ee937 Add files via upload 2025-02-12 01:15:57 -08:00
PYDT ff2412c65d Add files via upload 2025-02-12 01:15:19 -08:00
PYDT 658953860a Add files via upload 2025-02-12 01:13:55 -08:00
PYDT b473783527 Add files via upload 2025-02-09 02:11:01 -08:00
PYDT 7e590d4925 Add files via upload 2025-02-08 17:37:01 -08:00
PYDT 232fd3e2f2 Add files via upload 2025-02-08 17:16:21 -08:00
PYDT 9ea25fb77c Add files via upload 2025-02-08 16:55:43 -08:00
PYDT 6c47136de3 Add files via upload 2025-02-08 16:33:55 -08:00
PYDT 6fae29b488 Add files via upload 2025-02-08 07:11:31 -08:00
PYDT 7ed8cc9380 Add files via upload 2025-02-06 23:38:20 -08:00
PYDT 142e9d1028 Add files via upload 2025-02-05 06:56:05 -08:00
PYDT c96c30ff9a Add files via upload 2025-02-04 19:22:57 -08:00
PYDT 337f1cc100 Add files via upload 2025-02-04 19:21:48 -08:00
PYDT c3cb89dbea Add files via upload 2025-02-02 08:53:39 -08:00
PYDT 445bd1f668 Add files via upload 2025-02-02 08:51:46 -08:00
PYDT 1bded908c1 Add files via upload 2025-01-13 13:28:19 +08:00
PYDT 8d9dea4b08 Add files via upload 2025-01-06 21:25:37 +08:00
PYDT 4e98d6d8ce Add files via upload 2025-01-02 19:41:57 +08:00
PYDT 55b5cd939e Add files via upload 2024-12-31 23:52:47 +08:00
PYDT d72f5a43c8 Update README_zh_TW.md 2024-12-31 20:05:29 +08:00
PYDT b406d8d30b Update README_zh_CN.md 2024-12-31 20:05:13 +08:00
PYDT f9c91c9ba0 Update README.md 2024-12-31 20:04:50 +08:00
PYDT 0213d7eeb4 Merge pull request #30 from ABCblock/main
Update PYAS_Language.py
2024-12-31 19:58:09 +08:00
ABCblock 048c5c0970 Update PYAS_Language.py 2024-12-31 19:29:18 +08:00
PYDT 728542fce8 Add files via upload 2024-12-31 09:11:01 +08:00
PYDT 81ca24c7a2 Update LICENSE.md 2024-12-31 09:09:33 +08:00
PYDT 32ec272253 Add files via upload 2024-12-31 08:09:25 +08:00
PYDT 758982b660 Add files via upload 2024-12-30 22:15:53 +08:00
PYDT a83bba10e3 Add files via upload 2024-12-27 10:10:59 +08:00
PYDT 4b9342fa8b Add files via upload 2024-11-25 15:45:23 +08:00
PYDT a48162cf4a Add files via upload 2024-11-22 14:17:44 +08:00
PYDT 3fa61e777c Add files via upload 2024-11-22 14:17:03 +08:00
PYDT 01a2c55207 Add files via upload 2024-11-22 14:16:43 +08:00
PYDT 1a2376e6b7 Add files via upload 2024-11-20 15:18:42 +08:00
PYDT dab0d6a47f Add files via upload 2024-11-20 15:15:12 +08:00
PYDT b5d90b5cb7 Add files via upload 2024-11-20 14:46:03 +08:00
PYDT 25fd0bd2af Update README.md 2024-11-07 13:52:41 +08:00
PYDT a4bb63fcd4 Update README_zh_TW.md 2024-11-07 13:52:24 +08:00
PYDT 9d85785c27 Update README_zh_CN.md 2024-11-07 13:51:54 +08:00
PYDT 4206242627 Update README_zh_TW.md 2024-11-07 13:46:30 +08:00
PYDT f0149be9ad Update README.md 2024-11-07 13:38:53 +08:00
PYDT 5d56a1f0e0 Add files via upload 2024-11-07 13:25:51 +08:00
PYDT ad06c75058 Add files via upload 2024-11-07 13:22:29 +08:00
PYDT d5b6e17e59 Add files via upload 2024-11-07 13:21:36 +08:00
PYDT ffe2514e11 Delete Rules directory 2024-11-07 13:20:42 +08:00
PYDT 8621bed5d4 Delete Model directory 2024-11-07 13:20:28 +08:00
PYDT 634031e6dc Delete Driver directory 2024-11-07 13:20:12 +08:00
PYDT 11fae36469 Add files via upload 2024-11-02 21:15:54 +08:00
PYDT 3d01e36a71 Add files via upload 2024-11-02 20:58:29 +08:00
PYDT c2082b1ac5 Add files via upload 2024-11-02 15:50:18 +08:00
PYDT c94bbf84fe Add files via upload 2024-11-01 10:26:53 +08:00
PYDT 930363cd3f Add files via upload 2024-11-01 09:19:24 +08:00
PYDT 085ca9eb58 Add files via upload 2024-10-29 12:47:54 +08:00
PYDT f486d44804 Add files via upload 2024-10-29 00:20:19 +08:00
PYDT 1b4fbd3449 Add files via upload 2024-10-28 19:29:55 +08:00
PYDT 43ad7bf646 Add files via upload 2024-10-28 19:29:20 +08:00
PYDT 64921c3308 Add files via upload 2024-10-27 10:17:41 +08:00
PYDT 7a0e6a00c5 Add files via upload 2024-10-27 10:16:53 +08:00
PYDT 1332dd2c0e Add files via upload 2024-10-27 10:16:16 +08:00
PYDT d52628bed2 Add files via upload 2024-10-19 17:38:44 +08:00
PYDT 981ec006b2 Add files via upload 2024-10-19 17:38:07 +08:00
PYDT 7da05cf678 Add files via upload 2024-10-19 17:37:39 +08:00
PYDT 316882bcd0 Add files via upload 2024-10-03 02:27:09 +08:00
PYDT b204e52297 Update README_zh_CN.md 2024-10-02 21:58:55 +08:00
PYDT f82a63f4c8 Update README_zh_TW.md 2024-10-02 21:58:40 +08:00
PYDT cb0f2108a4 Update README.md 2024-10-02 21:58:12 +08:00
PYDT 300b7a7a68 Add files via upload 2024-10-02 12:30:44 +08:00
PYDT c3852ca60d Add files via upload 2024-10-02 12:00:37 +08:00
PYDT a5fb735c93 Add files via upload 2024-09-28 11:15:53 +08:00
PYDT d0b04ba84f Add files via upload 2024-09-28 11:14:54 +08:00
PYDT 9552742a39 Add files via upload 2024-09-21 22:51:13 +08:00
PYDT 8e9bdf6c0c Add files via upload 2024-09-21 22:50:02 +08:00
PYDT 818cc48502 Add files via upload 2024-09-20 00:36:42 +08:00
PYDT adc4e28eb8 Add files via upload 2024-09-20 00:31:25 +08:00
PYDT 2e3a4d3bf1 Add files via upload 2024-09-14 15:41:49 +08:00
PYDT d9bcac78e7 Add files via upload 2024-09-14 15:12:14 +08:00
PYDT 2342947849 Add files via upload 2024-09-14 15:11:36 +08:00
PYDT 19204dee8d Add files via upload 2024-09-12 16:17:50 +08:00
PYDT 863fa90b80 Add files via upload 2024-09-12 16:08:26 +08:00
PYDT 6fdef4a8f1 Add files via upload 2024-09-12 16:08:10 +08:00
PYDT 9469ceaa02 Add files via upload 2024-09-12 15:25:07 +08:00
PYDT 857f184409 Add files via upload 2024-09-11 01:05:58 +08:00
PYDT a2f4a725f5 Add files via upload 2024-09-10 14:34:02 +08:00
PYDT d12449bbb9 Add files via upload 2024-09-10 13:35:57 +08:00
PYDT a41f4711dd Add files via upload 2024-09-10 13:34:16 +08:00
PYDT 3c2b018d49 Add files via upload 2024-09-07 10:49:46 +08:00
PYDT e221a09709 Add files via upload 2024-09-07 10:48:43 +08:00
PYDT 26ff4bd843 Update README_zh_TW.md 2024-08-26 07:42:37 +08:00
PYDT d8e28f384a Update README_zh_CN.md 2024-08-26 07:42:17 +08:00
PYDT 65e68c3cc4 Update README.md 2024-08-26 07:41:44 +08:00
PYDT 7b76ab2a59 Update README.md 2024-08-26 07:41:18 +08:00
PYDT ae2a01b463 Update README_zh_TW.md 2024-08-26 07:29:15 +08:00
PYDT cda022a9f4 Update README_zh_CN.md 2024-08-26 07:28:10 +08:00
PYDT 672e48c5f8 Update README.md 2024-08-26 07:26:34 +08:00
PYDT 6fbdb1354f Update README.md 2024-08-26 07:22:09 +08:00
PYDT 79bc7fd443 Update README_zh_TW.md 2024-08-20 10:57:17 +08:00
PYDT 5578dd3339 Update README_zh_CN.md 2024-08-20 10:57:03 +08:00
PYDT 0232dbd196 Update README.md 2024-08-20 10:56:46 +08:00
PYDT d44e192eaa Update README_zh_CN.md 2024-08-20 10:53:34 +08:00
PYDT 4f12b19cf8 Update README_zh_TW.md 2024-08-20 10:52:57 +08:00
PYDT 392ac1b1c7 Update README_zh_TW.md 2024-08-20 10:52:37 +08:00
PYDT 8ad175aca3 Update README.md 2024-08-20 10:51:48 +08:00
PYDT 6afa58c42b Delete PYAS_Extension.py 2024-08-18 12:48:43 +08:00
PYDT 8be03cf232 Add files via upload 2024-08-18 12:48:16 +08:00
PYDT 23ea53d3ff Add files via upload 2024-08-18 12:46:52 +08:00
PYDT 294f40e7ac Add files via upload 2024-08-18 12:46:11 +08:00
PYDT 4f5f706ee5 Delete Exten directory 2024-08-18 12:45:44 +08:00
PYDT 27c1a7b4e4 Add files via upload 2024-07-24 09:53:48 +08:00
PYDT cfaa5be6d7 Add files via upload 2024-07-20 18:11:08 +08:00
PYDT a6942280a0 Add files via upload 2024-07-20 17:51:33 +08:00
PYDT 159124e6a3 Add files via upload 2024-07-20 17:50:48 +08:00
PYDT 6e63293a3c Update README_zh_TW.md 2024-07-19 16:23:33 +08:00
PYDT 9a9dc0d788 Update README_zh_TW.md 2024-07-19 16:23:09 +08:00
PYDT e201cd074c Update README_zh_CN.md 2024-07-19 16:18:11 +08:00
PYDT 0fd49a6e1c Update README.md 2024-07-19 16:09:49 +08:00
PYDT 6169a85464 Update README.md 2024-07-19 16:08:28 +08:00
PYDT e583344fee Update README.md 2024-07-19 16:05:56 +08:00
PYDT dcee00394c Update README.md 2024-07-19 16:03:49 +08:00
PYDT e48dc99dc0 Update README.md 2024-07-19 15:59:20 +08:00
PYDT 3ba3dda384 Update README.md 2024-07-19 15:56:01 +08:00
PYDT bbf1ce993c Update README.md 2024-07-19 15:54:30 +08:00
PYDT 56245a8c9b Update README.md 2024-07-19 15:38:32 +08:00
PYDT 4f2e65094c Add files via upload 2024-07-19 15:31:08 +08:00
PYDT 0bf456cbc8 Delete Exten/hollows_hunter directory 2024-07-19 15:29:58 +08:00
PYDT 9213d0da16 Delete Exten/pe_sieve directory 2024-07-19 15:29:49 +08:00
PYDT 13f2ece0ff Delete Exten/Bitdefender directory 2024-07-19 15:16:22 +08:00
PYDT 45c2a74c94 Add files via upload 2024-07-19 15:15:47 +08:00
PYDT b1b3e90e9b Add files via upload 2024-07-19 15:14:41 +08:00
PYDT 90ef841dae Add files via upload 2024-07-17 11:31:20 +08:00
PYDT b46000e8eb Add files via upload 2024-07-17 11:30:35 +08:00
PYDT b24891355d Add files via upload 2024-07-16 20:42:42 +08:00
PYDT 14bde5a790 Add files via upload 2024-07-15 09:58:25 +08:00
PYDT d6445f17e3 Add files via upload 2024-07-15 09:57:20 +08:00
PYDT 6124c3fe40 Add files via upload 2024-07-15 09:55:10 +08:00
PYDT 5531a4b194 Add files via upload 2024-07-14 10:59:27 +08:00
PYDT 839a0bbd42 Add files via upload 2024-07-13 14:43:51 +08:00
PYDT 1ba6272e4e Add files via upload 2024-07-13 14:02:02 +08:00
PYDT fdd86815ef Add files via upload 2024-07-13 14:01:13 +08:00
PYDT c8091fdc84 Add files via upload 2024-07-11 15:40:46 +08:00
PYDT 9d569bd9e3 Add files via upload 2024-07-11 09:15:57 +08:00
PYDT 1991664cd1 Add files via upload 2024-07-10 07:16:38 +08:00
PYDT ee7064fafc Add files via upload 2024-07-10 07:14:15 +08:00
PYDT cdaf861485 Add files via upload 2024-07-10 07:13:32 +08:00
PYDT 3e962b1da9 Add files via upload 2024-07-10 07:04:41 +08:00
PYDT 8398f1706c Add files via upload 2024-06-27 20:36:41 +08:00
PYDT 24d2d441b4 Add files via upload 2024-06-22 20:01:01 +08:00
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
PYDT 80c9976832 Add files via upload 2024-05-22 10:52:26 +08:00
PYDT b6326c25b9 Add files via upload 2024-05-22 10:43:38 +08:00
PYDT 35f591cf49 Add files via upload 2024-05-22 10:43:19 +08:00
PYDT 67e437bbd7 Add files via upload 2024-05-20 16:05:56 +08:00
PYDT 194dae8ce1 Add files via upload 2024-05-20 15:25:27 +08:00
PYDT a89442ceb0 Add files via upload 2024-05-15 10:02:53 +08:00
PYDT 24debf6062 Add files via upload 2024-04-17 15:00:15 +08:00
PYDT ff98846c99 Add files via upload 2024-04-17 13:35:21 +08:00
PYDT e3f5a0bca1 Add files via upload 2024-04-08 12:56:53 +08:00
PYDT 7278e4f051 Update README.md 2024-04-03 17:21:24 +08:00
PYDT 709a511c1d Add files via upload 2024-04-03 17:16:40 +08:00
PYDT 452027f085 Add files via upload 2024-04-01 23:59:25 +08:00
PYDT 8574802428 Add files via upload 2024-04-01 22:55:13 +08:00
PYDT 79fb044921 Add files via upload 2024-04-01 07:16:53 +08:00
PYDT 13ac634fea Delete Rules directory 2024-03-31 15:29:12 +08:00
PYDT 04a68bc262 Add files via upload 2024-03-29 13:43:15 +08:00
PYDT 47de15ab68 Add files via upload 2024-03-29 12:32:56 +08:00
PYDT 512af24a05 Delete Rules directory 2024-03-29 12:29:21 +08:00
PYDT e5ff46d3bb Delete Rules/Script.yar 2024-03-28 11:56:12 +08:00
PYDT c7a0979140 Delete Rules/Windows.yar 2024-03-28 11:55:58 +08:00
PYDT 7fd7245df2 Delete Rules/Linux.yar 2024-03-28 11:55:47 +08:00
PYDT 026301b011 Add files via upload 2024-03-28 11:55:25 +08:00
PYDT 5cc77f90ae Add files via upload 2024-03-28 10:21:13 +08:00
PYDT 0d4568ac8a Add files via upload 2024-03-28 10:20:08 +08:00
PYDT a6ed491a39 Add files via upload 2024-03-28 00:51:14 +08:00
PYDT 90dfc3f1ae Add files via upload 2024-03-28 00:49:12 +08:00
PYDT 36388fb0d7 Add files via upload 2024-03-27 00:11:46 +08:00
PYDT 043166d0c8 Add files via upload 2024-03-26 20:40:28 +08:00
PYDT b92d488851 Add files via upload 2024-03-26 04:09:19 +08:00
PYDT d841a04a89 Delete PYAS_Rules.json 2024-03-26 01:47:11 +08:00
PYDT d8553baa78 Add files via upload 2024-03-26 01:46:57 +08:00
PYDT 8521d5aee3 Add files via upload 2024-03-25 20:50:16 +08:00
PYDT ebe21d9c7f Add files via upload 2024-03-25 18:33:31 +08:00
PYDT 3b83abdbd3 Add files via upload 2024-03-25 16:41:37 +08:00
PYDT aead2463c9 Delete PYAS_Rules.py 2024-03-25 16:41:20 +08:00
PYDT 5cc5676672 Add files via upload 2024-03-25 14:56:41 +08:00
PYDT ecc32ca18d Add files via upload 2024-03-25 14:25:40 +08:00
PYDT 661640de79 Add files via upload 2024-03-24 23:19:46 +08:00
PYDT 96dfdab7ed Add files via upload 2024-03-24 23:19:09 +08:00
PYDT 56bed5fd3b Add files via upload 2024-03-24 16:45:19 +08:00
PYDT 3fd3b18406 Add files via upload 2024-03-23 23:10:47 +08:00
PYDT 45bac97a16 Add files via upload 2024-03-23 16:40:52 +08:00
PYDT 2c6eca4a92 Add files via upload 2024-03-23 01:41:29 +08:00
PYDT 8109d59655 Add files via upload 2024-03-22 16:35:59 +08:00
PYDT 8a15571cd2 Add files via upload 2024-03-22 12:03:29 +08:00
PYDT a15c8f2e60 Add files via upload 2024-03-22 00:01:26 +08:00
PYDT cec3d6c04d Add files via upload 2024-03-21 16:58:16 +08:00
PYDT d872604855 Add files via upload 2024-03-21 13:59:44 +08:00
PYDT 2b6fb933a4 Add files via upload 2024-03-21 12:43:38 +08:00
PYDT 1da892e863 Add files via upload 2024-03-21 12:43:19 +08:00
PYDT 19bfedd1a3 Add files via upload 2024-03-21 11:26:40 +08:00
PYDT cb87392d9d Add files via upload 2024-03-21 08:42:17 +08:00
PYDT 7cd5bc9ec3 Add files via upload 2024-03-21 00:38:14 +08:00
PYDT edcc1a30ab Add files via upload 2024-03-20 22:52:46 +08:00
PYDT 6f93f6ab06 Add files via upload 2024-03-14 08:49:33 +08:00
PYDT 9de1f44288 Add files via upload 2024-03-13 22:04:03 +08:00
PYDT 3d360b0881 Add files via upload 2024-03-12 21:23:09 +08:00
PYDT cf1c415846 Add files via upload 2024-03-12 14:52:45 +08:00
PYDT 90133e2444 Add files via upload 2024-03-11 11:15:55 +08:00
PYDT 81246046b8 Add files via upload 2024-03-10 13:05:03 +08:00
PYDT 20e037ab9e Add files via upload 2024-03-09 03:24:41 +08:00
PYDT bc27036ba7 Add files via upload 2024-03-07 16:35:31 +08:00
PYDT 1cd470b90b Add files via upload 2024-03-07 16:03:41 +08:00
PYDT 64471e34bc Add files via upload 2024-03-07 14:09:51 +08:00
PYDT f4c5d3de09 Add files via upload 2024-03-07 13:40:44 +08:00
PYDT 0dc59405e3 Update README.md 2024-03-06 15:34:29 +08:00
PYDT 7c775bdc9b Add files via upload 2024-03-06 15:19:10 +08:00
PYDT 61400ff4d4 Add files via upload 2024-03-02 17:33:31 +08:00
PYDT e119e34ebe Add files via upload 2024-03-01 15:48:26 +08:00
PYDT 6f059747bf Add files via upload 2024-03-01 09:32:59 +08:00
PYDT 24d72641fa Update README.md 2024-02-29 08:08:03 +08:00
PYDT b91fca3aa6 Update README.md 2024-02-29 08:06:59 +08:00
mtkiao a6f1947837 Merge pull request #18 from zackzheng1121/main
增加中文
2024-02-28 21:01:35 +08:00
zackzheng1121 6919131cef Update README_zh.md 2024-02-28 21:00:31 +08:00
PYDT 9186d801fc Add files via upload 2024-02-27 07:35:29 +08:00
PYDT 76e2f200bd Add files via upload 2024-02-26 23:21:40 +08:00
PYDT 1400bbd9ce Add files via upload 2024-02-26 15:02:04 +08:00
PYDT fd37628ac2 Add files via upload 2024-02-25 23:12:15 +08:00
PYDT 4396d5afc4 Add files via upload 2024-02-25 16:16:02 +08:00
PYDT f5faf80883 Add files via upload 2024-02-25 15:58:53 +08:00
PYDT ba32da97c8 Add files via upload 2024-02-25 10:42:07 +08:00
PYDT ec2de73d3a Update README.md 2024-02-25 02:34:20 +08:00
PYDT f4d032e5c7 Add files via upload 2024-02-25 02:17:22 +08:00
PYDT 4114aac6c3 Add files via upload 2024-02-25 01:45:23 +08:00
PYDT 0c43c6bb5f Add files via upload 2024-02-24 23:43:10 +08:00
PYDT 7b3c965b88 Add files via upload 2024-02-24 21:55:53 +08:00
zackzheng1121 d1035268f6 Update README_zh.md 2024-02-24 19:44:58 +08:00
zackzheng1121 8968f30bf9 Update README_zh.md 2024-02-24 19:43:45 +08:00
zackzheng1121 84c2c29600 Update README.md 2024-02-24 19:43:23 +08:00
zackzheng1121 b2a59f261c Update README.md 2024-02-24 19:40:42 +08:00
zackzheng1121 363a330f8e Create README.md 2024-02-24 19:39:20 +08:00
zackzheng1121 1d2aa059ee Update and rename README.md to README_zh.md 2024-02-24 19:38:16 +08:00
zackzheng1121 f2bfa908a1 add readme_zh 2024-02-24 19:32:40 +08:00
PYDT 02a8de4696 Add files via upload 2024-02-23 08:38:55 +08:00
PYDT 22fa3eff71 Add files via upload 2024-02-22 14:32:17 +08:00
PYDT 69361209c3 Add files via upload 2024-02-22 01:08:15 +08:00
PYDT ff0aeaa4ef Add files via upload 2024-02-21 10:21:38 +08:00
PYDT 3c461dfd4b Add files via upload 2024-02-21 10:13:11 +08:00
PYDT c6beda383e Add files via upload 2024-02-21 07:10:15 +08:00
PYDT 3d59f3befd Add files via upload 2024-02-21 00:42:59 +08:00
PYDT e54f0db239 Update README.md 2024-02-20 14:41:04 +08:00
PYDT 0f877f2749 Delete PYAS_Function.vdb 2024-02-20 14:02:47 +08:00
PYDT b69ba165d9 Add files via upload 2024-02-20 14:02:37 +08:00
PYDT 965076fe52 Delete PYAS_Compress.py 2024-02-20 13:43:32 +08:00
PYDT f4d6cb0430 Add files via upload 2024-02-19 10:39:21 +08:00
PYDT 19d412188c Add files via upload 2024-02-19 10:38:19 +08:00
PYDT 798d85978a Add files via upload 2024-02-11 19:53:57 +08:00
PYDT 819742d753 Add files via upload 2024-02-11 16:12:59 +08:00
PYDT 9b32fa6219 Add files via upload 2024-02-11 10:56:55 +08:00
PYDT 2c93661726 Add files via upload 2024-02-10 23:02:45 +08:00
PYDT bddaca2a1e Add files via upload 2024-02-10 22:08:39 +08:00
PYDT 2f06f2e051 Add files via upload 2024-02-10 20:52:38 +08:00
PYDT 1d26e46bd9 Add files via upload 2024-02-10 20:01:52 +08:00
PYDT fa0ff826a3 Add files via upload 2024-02-10 19:50:01 +08:00
PYDT e1b3114c83 Add files via upload 2024-02-10 19:41:34 +08:00
PYDT a655f075db Add files via upload 2024-02-10 19:40:54 +08:00
PYDT 13d4ebbf6b Add files via upload 2024-02-09 14:24:52 +08:00
PYDT 913d10b1ee Add files via upload 2024-02-09 14:18:30 +08:00
PYDT eb541a0104 Add files via upload 2024-01-30 19:03:05 +08:00
PYDT 2063186994 Add files via upload 2024-01-28 16:20:22 +08:00
PYDT 860d571039 Delete PYAS_Function.py 2024-01-28 15:41:03 +08:00
PYDT c6d79adf9a Add files via upload 2024-01-28 15:40:44 +08:00
PYDT 5453900ba1 Add files via upload 2024-01-28 03:29:28 +08:00
PYDT 5029ff1e37 Add files via upload 2024-01-28 03:13:40 +08:00
PYDT 47fb691339 Add files via upload 2024-01-28 03:12:42 +08:00
PYDT dff9dd17bf Add files via upload 2024-01-27 11:58:36 +08:00
PYDT 5bc4a16b90 Add files via upload 2024-01-26 10:14:32 +08:00
PYDT b1918953b0 Update README.md 2024-01-26 09:35:36 +08:00
PYDT 6e89ed7007 Add files via upload 2024-01-26 09:33:16 +08:00
PYDT 744e8bc941 Add files via upload 2024-01-25 20:21:35 +08:00
PYDT 0b98ce7ffd Add files via upload 2024-01-25 20:19:27 +08:00
PYDT ca8b293b06 Delete PYAS_Function.zip 2024-01-25 18:10:50 +08:00
PYDT e28d99a257 Add files via upload 2024-01-25 18:09:58 +08:00
PYDT 488feb6108 Add files via upload 2024-01-25 16:12:47 +08:00
PYDT 6cdb106f07 Add files via upload 2024-01-24 22:58:36 +08:00
PYDT a7c5ccd27a Add files via upload 2024-01-24 22:56:15 +08:00
PYDT 136f9dbf0a Add files via upload 2024-01-24 22:47:40 +08:00
PYDT 16b45c3450 Add files via upload 2024-01-24 15:13:42 +08:00
PYDT 68330fad52 Add files via upload 2024-01-24 12:57:03 +08:00
PYDT dca167518d Add files via upload 2024-01-24 12:18:50 +08:00
PYDT bcc44422ef Add files via upload 2024-01-24 08:18:06 +08:00
PYDT e080e03466 Add files via upload 2024-01-24 07:54:57 +08:00
PYDT b6e75490de Add files via upload 2024-01-23 22:19:24 +08:00
PYDT 196c014576 Add files via upload 2024-01-23 16:58:43 +08:00
PYDT 236110df5e Update README.md 2024-01-23 12:34:58 +08:00
PYDT b2ae192056 Update README.md 2024-01-23 11:56:05 +08:00
PYDT f080969a62 Update README.md 2024-01-23 11:52:38 +08:00
PYDT 69d969898d Update README.md 2024-01-23 11:44:26 +08:00
PYDT a21a766926 Update README.md 2024-01-23 11:41:44 +08:00
PYDT f11fdb6b96 Update README.md 2024-01-23 11:34:02 +08:00
PYDT c7445df4c6 Update README.md 2024-01-23 11:07:51 +08:00
PYDT 2c45c9bc5b Update README.md 2024-01-23 11:02:53 +08:00
PYDT ae5ed27cb6 Update README.md 2024-01-23 10:57:13 +08:00
PYDT 11f9fe3c8b Add files via upload 2024-01-23 10:55:05 +08:00
PYDT e93ad3bd33 Delete PYAS_Function.7z 2024-01-23 10:54:34 +08:00
PYDT 20c26ea0a8 Add files via upload 2024-01-23 10:45:31 +08:00
PYDT 5925a80d3b Add files via upload 2024-01-22 16:19:31 +08:00
PYDT 56cb95e523 Add files via upload 2024-01-22 16:11:56 +08:00
PYDT a6e101cc5d Add files via upload 2024-01-22 12:49:46 +08:00
PYDT e8292b6f81 Add files via upload 2024-01-21 23:35:59 +08:00
PYDT 37a4392c94 Add files via upload 2024-01-21 15:49:43 +08:00
PYDT a897f75ecf Add files via upload 2024-01-20 22:16:36 +08:00
PYDT 79055d3779 Add files via upload 2024-01-19 16:31:27 +08:00
PYDT 3d39aa7f97 Delete PYAS_Function_Virus.7z 2024-01-19 11:18:58 +08:00
PYDT 2c1d09affc Delete PYAS_Function_Safe.7z 2024-01-19 11:18:42 +08:00
PYDT 4775358a79 Add files via upload 2024-01-19 11:18:28 +08:00
PYDT cb5f8e8191 Add files via upload 2024-01-19 11:10:48 +08:00
PYDT 8209b4ff01 Add files via upload 2024-01-19 11:05:39 +08:00
PYDT e110134d24 Add files via upload 2024-01-19 07:30:45 +08:00
PYDT c2248fdd49 Add files via upload 2024-01-18 16:51:36 +08:00
PYDT 58fea5b0ca Add files via upload 2024-01-18 15:29:15 +08:00
PYDT 7a36946545 Add files via upload 2024-01-18 13:00:09 +08:00
PYDT 563d9a8a36 Add files via upload 2024-01-18 12:52:17 +08:00
PYDT bdbd0617b5 Add files via upload 2024-01-18 09:04:50 +08:00
PYDT 67006d88cb Add files via upload 2024-01-17 21:39:54 +08:00
PYDT ded2083462 Add files via upload 2024-01-17 16:18:32 +08:00
PYDT 87b7d044f8 Add files via upload 2024-01-17 14:37:47 +08:00
PYDT 9781cef29b Add files via upload 2024-01-17 13:45:19 +08:00
PYDT 52c393148b Add files via upload 2024-01-17 13:33:21 +08:00
PYDT b98d617d6f Add files via upload 2024-01-16 17:00:10 +08:00
PYDT b475573e0e Add files via upload 2024-01-16 15:37:53 +08:00
PYDT ba3c85d5b2 Add files via upload 2024-01-16 10:06:13 +08:00
PYDT 410777efb3 Add files via upload 2024-01-15 22:11:42 +08:00
PYDT 0b3fb452b4 Add files via upload 2024-01-15 19:26:37 +08:00
PYDT aaff565172 Add files via upload 2024-01-15 17:13:45 +08:00
PYDT dd0786648e Add files via upload 2024-01-15 16:46:10 +08:00
PYDT e145ffa111 Add files via upload 2024-01-15 11:31:14 +08:00
PYDT b322468c1c Add files via upload 2024-01-15 11:17:40 +08:00
PYDT 992d8b909c Add files via upload 2024-01-15 09:39:53 +08:00
PYDT d5327c6370 Delete How To Use.py 2024-01-15 09:39:35 +08:00
PYDT 0d13bb5f8f Add files via upload 2024-01-15 09:39:08 +08:00
PYDT 3ad08a33a9 Add files via upload 2024-01-15 09:35:25 +08:00
PYDT 533e0ed736 Add files via upload 2024-01-15 09:15:58 +08:00
PYDT e7ba77b600 Add files via upload 2024-01-15 00:12:33 +08:00
PYDT f3b84b04f7 Add files via upload 2024-01-14 21:17:04 +08:00
PYDT f4c948aca9 Add files via upload 2024-01-13 23:01:02 +08:00
PYDT 1507f5df5a Add files via upload 2024-01-13 18:32:48 +08:00
PYDT 0562d11a71 Add files via upload 2024-01-13 13:23:35 +08:00
PYDT b3a9f5cce0 Add files via upload 2024-01-13 13:17:56 +08:00
PYDT 5974a3c85a Add files via upload 2024-01-13 13:14:37 +08:00
PYDT 78c732d2b8 Add files via upload 2024-01-13 12:42:11 +08:00
PYDT d087b2dc16 Add files via upload 2024-01-12 19:08:57 +08:00
PYDT 16c5d014aa Add files via upload 2024-01-12 10:42:34 +08:00
PYDT e661ff400f Update README.md 2024-01-12 09:53:48 +08:00
PYDT b8c8e2d04d Update README.md 2024-01-12 09:42:24 +08:00
PYDT 8fc36f2b20 Update README.md 2024-01-12 09:37:35 +08:00
PYDT 4b73a09a09 Update README.md 2024-01-12 09:26:49 +08:00
PYDT 65c4d5d5b7 Update README.md 2024-01-12 09:25:45 +08:00
PYDT 19d0702aee Update LICENSE.md 2024-01-12 09:15:08 +08:00
PYDT b74e8330de Add files via upload 2024-01-12 08:24:21 +08:00
PYDT 334b837d43 Add files via upload 2024-01-11 18:57:45 +08:00
PYDT 169cb37f08 Add files via upload 2024-01-11 18:54:52 +08:00
PYDT 8f29c3f0da Add files via upload 2024-01-11 11:26:50 +08:00
PYDT bec5cc4a04 Delete PYAS_Function.7z 2024-01-11 11:25:28 +08:00
PYDT af627ee202 Delete PYAS_Compress.py 2024-01-11 11:25:17 +08:00
PYDT 1e091a3e7c Delete PYAS_Function_Virus.7z 2024-01-11 10:23:11 +08:00
PYDT 8840da91d7 Delete PYAS_Function_Safe.7z 2024-01-11 10:22:59 +08:00
PYDT 1f4ff04ed3 Add files via upload 2024-01-11 10:22:17 +08:00
PYDT 60974e8f72 Add files via upload 2024-01-11 09:31:52 +08:00
PYDT 86f68994c2 Add files via upload 2024-01-10 09:19:18 +08:00
PYDT 21c4918486 Add files via upload 2024-01-09 08:20:17 +08:00
PYDT c6a426ec25 Add files via upload 2024-01-08 21:22:54 +08:00
PYDT db75a22c1c Add files via upload 2024-01-08 19:31:04 +08:00
PYDT 7e85d22ecd Add files via upload 2024-01-08 18:53:53 +08:00
PYDT 67adadc0a4 Add files via upload 2024-01-08 17:46:19 +08:00
PYDT 6b78562454 Add files via upload 2024-01-08 08:33:37 +08:00
PYDT 4f13afc867 Add files via upload 2024-01-07 20:06:03 +08:00
PYDT c34e8f193f Add files via upload 2024-01-06 16:53:56 +08:00
PYDT 4bcb507eae Add files via upload 2024-01-06 12:45:32 +08:00
PYDT a50d457d75 Add files via upload 2024-01-05 10:51:12 +08:00
PYDT 9f119265a9 Add files via upload 2024-01-05 10:21:49 +08:00
PYDT 0b121a624b Add files via upload 2024-01-05 09:34:07 +08:00
PYDT 0f47f5ec8f Add files via upload 2024-01-05 08:12:45 +08:00
PYDT f89896d041 Add files via upload 2024-01-04 15:47:23 +08:00
PYDT 5e335fd5e8 Add files via upload 2024-01-04 15:47:06 +08:00
PYDT fd245dec14 Add files via upload 2024-01-04 14:56:46 +08:00
PYDT 774cdc5de3 Add files via upload 2024-01-04 13:28:02 +08:00
PYDT 633cfad1a8 Add files via upload 2024-01-04 11:39:51 +08:00
PYDT cb7875c320 Add files via upload 2024-01-04 10:08:12 +08:00
PYDT 7960a57fc0 Add files via upload 2024-01-03 23:08:28 +08:00
PYDT a23f693921 Delete PYAS_Function.zip 2024-01-03 22:55:51 +08:00
PYDT c49cb8bc4a Delete PYAS_Compress.py 2024-01-03 22:55:39 +08:00
PYDT 02c425cfc0 Add files via upload 2024-01-03 11:50:11 +08:00
PYDT be96ba0a0e Add files via upload 2024-01-02 11:19:37 +08:00
PYDT df5e00977a Add files via upload 2024-01-02 07:53:56 +08:00
PYDT f055650365 Add files via upload 2024-01-02 07:21:14 +08:00
PYDT b0baddda3b Delete PYAS_Function.7z 2024-01-02 07:20:32 +08:00
PYDT 69359cba05 Delete PYAS_Function_Virus.7z 2024-01-02 00:16:56 +08:00
PYDT 8b0b29e39b Delete PYAS_Function_Safe.7z 2024-01-02 00:16:45 +08:00
PYDT 21ac50667d Add files via upload 2024-01-02 00:16:07 +08:00
PYDT b843a438ba Add files via upload 2024-01-01 03:59:04 +08:00
PYDT 441cc30c0b Add files via upload 2024-01-01 03:42:15 +08:00
PYDT 85adf5dc80 Add files via upload 2023-12-31 20:55:32 +08:00
PYDT 0c48f0981d Delete PYML.py 2023-12-31 17:30:22 +08:00
PYDT 88b646e41c Delete PYAS_Database.7z 2023-12-31 17:30:03 +08:00
PYDT dc4c3e0a99 Add files via upload 2023-12-31 17:29:47 +08:00
PYDT 262f6d55a0 Add files via upload 2023-12-29 11:22:07 +08:00
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
PYDT 1f3b694231 Add files via upload 2023-10-10 14:17:48 +08:00
PYDT 470358585d Add files via upload 2023-10-10 00:44:40 +08:00
PYDT 4c69b555ae Add files via upload 2023-10-10 00:13:21 +08:00
PYDT aef60afcd8 Update README.md 2023-10-09 22:13:23 +08:00
PYDT ec753c50a5 Add files via upload 2023-10-09 22:07:11 +08:00
PYDT cbebe878aa Add files via upload 2023-10-09 21:41:34 +08:00
PYDT e9d930507e Add files via upload 2023-10-08 22:26:15 +08:00
PYDT 3eba768d06 Add files via upload 2023-10-08 02:00:53 +08:00
PYDT 76a5732997 Add files via upload 2023-10-08 01:54:58 +08:00
PYDT 32987c1274 Add files via upload 2023-10-07 14:10:49 +08:00
PYDT 8990b97a32 Add files via upload 2023-10-05 20:33:33 +08:00
PYDT 65b427121f Add files via upload 2023-10-05 06:57:23 +08:00
PYDT 81dd259672 Add files via upload 2023-10-05 01:35:34 +08:00
PYDT 05c2031d47 Add files via upload 2023-10-05 01:30:52 +08:00
PYDT 2b2de7550f Add files via upload 2023-10-05 00:48:22 +08:00
PYDT f9a8244086 Add files via upload 2023-10-05 00:47:28 +08:00
PYDT 86f3904b8a Add files via upload 2023-10-04 12:35:15 +08:00
PYDT 017aab4b0a Add files via upload 2023-10-04 10:55:51 +08:00
PYDT e33777c961 Add files via upload 2023-10-03 11:42:22 +08:00
PYDT ac14acd042 Add files via upload 2023-10-03 02:06:29 +08:00
PYDT e9f07df010 Add files via upload 2023-10-03 01:32:50 +08:00
PYDT 5d3855cdfa Add files via upload 2023-10-03 01:22:47 +08:00
PYDT 938e76fb4a Add files via upload 2023-10-02 17:49:09 +08:00
PYDT c0f6722c18 Add files via upload 2023-10-02 12:42:00 +08:00
PYDT 54e8922bc3 Add files via upload 2023-10-02 11:37:21 +08:00
PYDT 81b47dbf45 Add files via upload 2023-10-01 23:32:22 +08:00
PYDT 312401d80f Add files via upload 2023-09-26 19:27:47 +08:00
PYDT 8927ab7e36 Add files via upload 2023-09-26 17:50:21 +08:00
PYDT 6d99576e36 Add files via upload 2023-09-26 17:14:38 +08:00
PYDT 5618cd19cb Add files via upload 2023-09-26 06:41:25 +08:00
PYDT da11c6f5b6 Add files via upload 2023-09-25 10:00:56 +08:00
PYDT 6e370e776a Add files via upload 2023-09-24 21:06:50 +08:00
PYDT ab6b319738 Add files via upload 2023-09-23 11:48:32 +08:00
PYDT aca03cacf9 Add files via upload 2023-09-23 00:00:56 +08:00
PYDT 01b5e7ced0 Add files via upload 2023-09-22 18:51:41 +08:00
PYDT 6d8ef1d4a4 Add files via upload 2023-09-22 18:34:39 +08:00
PYDT f029636757 Add files via upload 2023-09-22 17:42:09 +08:00
PYDT 168b396daa Add files via upload 2023-09-22 12:06:19 +08:00
PYDT 0873a59392 Add files via upload 2023-09-22 08:25:11 +08:00
PYDT 3c646f57e6 Add files via upload 2023-09-22 06:54:08 +08:00
PYDT 940db64678 Add files via upload 2023-09-22 02:39:10 +08:00
PYDT da1c980743 Add files via upload 2023-09-21 07:50:58 +08:00
PYDT e3a4b636f7 Add files via upload 2023-09-20 20:17:05 +08:00
PYDT 9434898efa Add files via upload 2023-09-20 19:54:16 +08:00
PYDT 5d1c17e6ff Add files via upload 2023-09-20 19:53:33 +08:00
PYDT 4f736b352a Add files via upload 2023-09-20 19:52:54 +08:00
PYDT 037e2fbab1 Add files via upload 2023-09-20 15:18:39 +08:00
PYDT 4b24858631 Add files via upload 2023-09-20 14:59:41 +08:00
PYDT 81904a3a7b Add files via upload 2023-09-20 12:36:14 +08:00
PYDT 6e63a789cb Add files via upload 2023-09-20 11:18:00 +08:00
PYDT 4b977ec4df Add files via upload 2023-09-20 10:05:46 +08:00
PYDT fa692caaa8 Add files via upload 2023-09-19 22:52:52 +08:00
PYDT 7082003e4a Add files via upload 2023-09-19 21:26:02 +08:00
PYDT dec35d9b8a Add files via upload 2023-09-19 21:25:42 +08:00
PYDT 90711465ba Add files via upload 2023-09-19 21:23:17 +08:00
PYDT 1bb74f20b4 Add files via upload 2023-09-19 21:22:55 +08:00
PYDT b2cce37490 Add files via upload 2023-09-19 21:22:21 +08:00
PYDT 22e41eeacc Add files via upload 2023-09-19 07:59:27 +08:00
PYDT 600f2543a6 Add files via upload 2023-09-19 00:07:05 +08:00
PYDT 9e7185ae6d Add files via upload 2023-09-18 23:56:13 +08:00
PYDT 11725afa5a Add files via upload 2023-09-18 13:04:51 +08:00
PYDT 3bb94d05be Add files via upload 2023-09-17 18:47:30 +08:00
PYDT 7290db72e8 Add files via upload 2023-09-16 08:33:47 +08:00
PYDT 4dc92b081e Add files via upload 2023-09-15 20:14:15 +08:00
PYDT 68c614d9dd Add files via upload 2023-09-15 15:44:50 +08:00
PYDT efca8d0161 Add files via upload 2023-09-15 13:32:51 +08:00
PYDT 6d86b15800 Add files via upload 2023-09-15 11:44:45 +08:00
PYDT f43b2df6fc Add files via upload 2023-09-15 11:34:07 +08:00
PYDT 9f3eb593f8 Add files via upload 2023-09-15 11:23:36 +08:00
PYDT 9ca7c41fe7 Add files via upload 2023-09-15 11:01:46 +08:00
PYDT f39746c116 Add files via upload 2023-09-15 10:23:59 +08:00
PYDT 88f1dc2c01 Add files via upload 2023-09-15 10:22:12 +08:00
PYDT ee3daae665 Add files via upload 2023-09-14 23:20:07 +08:00
PYDT 9a47f06c2a Add files via upload 2023-09-14 22:46:09 +08:00
PYDT 6df173d30a Add files via upload 2023-09-13 23:49:26 +08:00
PYDT f992394f6f Add files via upload 2023-09-13 23:32:29 +08:00
PYDT 98c19fcd7e Add files via upload 2023-09-13 12:54:31 +08:00
PYDT 12cc2439af Add files via upload 2023-09-13 10:17:37 +08:00
PYDT 2341100397 Add files via upload 2023-09-12 21:52:33 +08:00
PYDT b15c9e4e39 Add files via upload 2023-09-11 22:55:32 +08:00
PYDT dbf860ca7a Add files via upload 2023-09-11 22:21:33 +08:00
PYDT aa481f415d Add files via upload 2023-09-11 19:47:01 +08:00
PYDT 59eeae791a Add files via upload 2023-09-09 12:51:44 +08:00
PYDT 0691a4420c Add files via upload 2023-09-08 18:02:46 +08:00
PYDT 66e744dd57 Add files via upload 2023-09-08 17:08:05 +08:00
PYDT 9f5eb72cec Add files via upload 2023-09-08 06:52:44 +08:00
PYDT a021ab6e42 Update README.md 2023-09-05 23:14:19 +08:00
PYDT 6a316e850c Add files via upload 2023-09-05 23:00:08 +08:00
PYDT 69413c1bed Add files via upload 2023-09-04 23:35:25 +08:00
PYDT c152cd944e Add files via upload 2023-09-04 23:15:31 +08:00
PYDT a055864676 Add files via upload 2023-09-04 21:07:05 +08:00
PYDT cb64da2d5f Add files via upload 2023-09-04 19:51:38 +08:00
PYDT 5633e70a11 Add files via upload 2023-09-02 10:38:25 +08:00
PYDT c1f6d0692b Add files via upload 2023-09-02 10:36:18 +08:00
PYDT fe527f1668 Add files via upload 2023-09-01 19:46:58 +08:00
PYAS 774a2313fb Add files via upload 2023-08-10 20:03:47 +08:00
PYDT a5f07706f5 Add files via upload 2023-08-01 12:24:21 +08:00
PYDT 2b6b8accf1 Add files via upload 2023-07-31 22:54:25 +08:00
PYDT e6aca5533b Add files via upload 2023-07-30 23:21:43 +08:00
PYDT dc60cc3ccb Add files via upload 2023-07-27 17:36:07 +08:00
PYDT 5613993019 Add files via upload 2023-07-27 01:18:45 +08:00
PYDT 1613101bd6 Add files via upload 2023-07-27 01:17:56 +08:00
PYDT cb3440494e Add files via upload 2023-07-26 22:12:46 +08:00
PYDT 78b979f397 Add files via upload 2023-07-26 19:22:42 +08:00
PYDT 6742b71208 Add files via upload 2023-07-26 18:03:47 +08:00
PYDT e0178ac2b5 Add files via upload 2023-07-25 20:08:30 +08:00
PYDT e2141decaa Add files via upload 2023-07-23 03:23:51 +08:00
PYDT 4a68c62e72 Add files via upload 2023-07-22 14:00:05 +08:00
PYDT bc7d5704f9 Add files via upload 2023-07-22 00:22:58 +08:00
PYDT a984be2535 Add files via upload 2023-07-16 16:36:37 +08:00
PYDT 026f96d473 Add files via upload 2023-07-16 15:02:32 +08:00
PYDT 0dbca7895e Add files via upload 2023-07-12 18:11:16 +08:00
PYDT 0f390668f7 Delete Library directory 2023-07-10 21:54:28 +08:00
PYDT f4ced70d8e Add files via upload 2023-07-10 21:52:36 +08:00
PYDT 7b805df433 Delete PYAS_UI_rc.py 2023-07-10 21:49:32 +08:00
PYDT 4b66171388 Delete PYAS_UI.py 2023-07-10 21:49:17 +08:00
PYDT 0cf80753ae Delete PYAS_Model.py 2023-07-10 21:43:35 +08:00
PYDT 6f3d315851 Add files via upload 2023-07-10 21:43:23 +08:00
PYDT 475d4b4a80 Add files via upload 2023-07-10 21:36:31 +08:00
PYDT bd8633de0d Add files via upload 2023-07-10 21:30:43 +08:00
PYDT 5d2937c896 Add files via upload 2023-07-10 21:30:00 +08:00
PYDT eb89284834 Add files via upload 2023-07-09 21:29:38 +08:00
PYDT f5777b2a68 Delete PYAS_Version_File.py 2023-07-09 21:29:30 +08:00
PYDT 9431a4dd6c Add files via upload 2023-07-09 21:26:44 +08:00
PYDT 82a4dfdfd5 Add files via upload 2023-07-07 03:49:48 +08:00
PYDT 9bd63d15e9 Add files via upload 2023-07-07 03:41:27 +08:00
PYDT f6e5c8e0b1 Add files via upload 2023-07-07 01:46:25 +08:00
PYDT 3b56f6dc6f Add files via upload 2023-07-07 00:53:36 +08:00
PYDT 2c24079552 Add files via upload 2023-07-05 17:24:25 +08:00
PYDT f58a846826 Add files via upload 2023-07-05 12:06:22 +08:00
PYDT 8bc74a8833 Add files via upload 2023-07-05 12:03:34 +08:00
PYDT 5bd0033ff0 Add files via upload 2023-07-04 23:48:20 +08:00
PYDT e45758be80 Add files via upload 2023-07-04 23:41:04 +08:00
PYDT 5033348eed Update README.md 2023-07-04 19:53:51 +08:00
PYDT 2327fd099c Add files via upload 2023-07-04 15:36:15 +08:00
PYDT 6afa02ea71 Add files via upload 2023-07-04 15:34:48 +08:00
PYDT 9cf1b38e56 Add files via upload 2023-07-04 15:32:44 +08:00
PYDT 241a9ffea5 Add files via upload 2023-07-04 11:14:55 +08:00
PYDT 3e0749ad60 Add files via upload 2023-07-03 15:43:42 +08:00
PYDT 0f55ff4295 Add files via upload 2023-07-03 13:50:02 +08:00
PYDT d8f8c34991 Add files via upload 2023-07-02 19:43:43 +08:00
PYDT 7ddd323b65 Add files via upload 2023-07-02 01:09:19 +08:00
PYDT 36bbb6e708 Add files via upload 2023-07-02 00:11:55 +08:00
PYDT 06638a8cdc Add files via upload 2023-06-30 20:32:24 +08:00
PYDT 42d8a8fde0 Add files via upload 2023-06-29 17:45:16 +08:00
PYDT e2997fbbce Add files via upload 2023-06-29 17:39:19 +08:00
PYDT 5dd671eb4a Add files via upload 2023-06-27 19:00:24 +08:00
PYDT 59aff0f196 Add files via upload 2023-06-27 18:37:06 +08:00
PYDT 548def29b3 Add files via upload 2023-06-26 14:59:40 +08:00
PYDT 84d59eb7d4 Add files via upload 2023-06-25 00:28:29 +08:00
PYDT 1cc3b599a9 Add files via upload 2023-06-18 00:03:44 +08:00
PYDT 0e02b56d20 Delete PYAS_Update.txt 2023-06-17 23:05:11 +08:00
PYDT 4e8d99f557 Delete requirements.txt 2023-06-17 23:03:48 +08:00
PYDT f3add6e3e3 Add files via upload 2023-06-17 23:03:01 +08:00
PYDT 32a2a93eb5 Add files via upload 2023-06-17 10:54:32 +08:00
PYDT 0090ee516f Add files via upload 2023-06-15 11:10:00 +08:00
PYDT 42e4e958df Add files via upload 2023-06-14 09:49:54 +08:00
PYDT b6970d1da6 Update README.md 2023-06-13 15:05:50 +08:00
PYDT d7ce6c9a4a Add files via upload 2023-06-13 10:48:48 +08:00
PYDT e6d18cbec8 Update README.md 2023-06-12 15:28:21 +08:00
PYDT 3140f6b19f Update README.md 2023-06-12 15:15:50 +08:00
PYDT b493bf88a8 Add files via upload 2023-06-12 15:04:28 +08:00
PYDT 8877609f2a Add files via upload 2023-06-11 03:25:15 +08:00
PYDT d3e5aa00df Add files via upload 2023-06-10 21:02:20 +08:00
PYDT 2b88f58e58 Add files via upload 2023-06-09 22:25:02 +08:00
PYDT 1f6fd659d5 Add files via upload 2023-06-09 14:46:16 +08:00
PYDT 42583407d0 Add files via upload 2023-06-09 08:17:18 +08:00
PYDT cb6b30f4cf Add files via upload 2023-06-08 22:52:35 +08:00
PYDT 7a372bfbd1 Add files via upload 2023-06-07 20:01:33 +08:00
mtkiao129 adb8763706 Update requirements.txt
add requirements.txt
2023-06-07 19:20:12 +08:00
mtkiao129 ce709408af Delete __pycache__ directory 2023-06-07 19:18:50 +08:00
mtkiao129 d577b58c52 Update PYAS.py
fix some problem
2023-06-07 19:18:30 +08:00
mtkiao129 d939b081ff Update PYAS.py
fix
2023-06-07 19:11:44 +08:00
Mtkiao b029ff0cfb first version 2023-06-07 19:09:15 +08:00
PYDT 2e473e7a65 Add files via upload 2023-06-07 14:53:29 +08:00
PYDT 8b0c2b7815 Add files via upload 2023-06-06 21:29:42 +08:00
PYDT 9eb9f83108 Add files via upload 2023-06-06 16:11:28 +08:00
PYDT d724473bc2 Add files via upload 2023-06-06 00:00:03 +08:00
PYDT ed3dac054a Add files via upload 2023-06-05 17:45:14 +08:00
PYDT 2c7294684f Add files via upload 2023-06-05 14:01:15 +08:00
PYDT 79016437e4 Add files via upload 2023-06-05 13:42:29 +08:00
PYDT 20d8131661 Add files via upload 2023-06-05 13:15:10 +08:00
PYDT 14b6bb18f3 Add files via upload 2023-06-05 13:14:35 +08:00
PYDT c919b2bce3 Add files via upload 2023-06-05 10:55:54 +08:00
PYDT bf4d65b179 Add files via upload 2023-06-05 09:58:00 +08:00
PYDT 6e7a50468b Add files via upload 2023-06-05 09:52:20 +08:00
PYDT fd3c5900b0 Add files via upload 2023-06-04 23:53:43 +08:00
PYDT b531fe4243 Add files via upload 2023-06-04 20:05:56 +08:00
PYDT df39e73748 Add files via upload 2023-05-31 20:30:18 +08:00
PYDT 5478aeb96b Add files via upload 2023-05-31 16:16:15 +08:00
PYDT 4ef190261a Add files via upload 2023-05-31 16:11:26 +08:00
PYDT 164fd80065 Add files via upload 2023-05-31 15:36:10 +08:00
PYDT 03d437712c Add files via upload 2023-05-29 13:12:43 +08:00
PYDT 9b14c201c4 Add files via upload 2023-05-28 16:25:18 +08:00
PYDT b4710bda0e Add files via upload 2023-05-28 15:09:49 +08:00
PYDT 1821ffbe7b Add files via upload 2023-05-28 14:16:17 +08:00
PYDT 7687328957 Add files via upload 2023-05-28 14:10:47 +08:00
PYDT c02e1277d9 Add files via upload 2023-05-27 20:43:09 +08:00
PYDT d1f0508391 Add files via upload 2023-05-27 16:05:17 +08:00
PYDT ccf6395796 Add files via upload 2023-05-27 14:43:11 +08:00
PYDT e9e1d47aff Add files via upload 2023-05-27 10:58:39 +08:00
PYDT 7e609e30a2 Add files via upload 2023-05-27 09:52:07 +08:00
PYDT b97acbf8a5 Add files via upload 2023-05-25 19:23:04 +08:00
PYDT cca1a2a270 Add files via upload 2023-05-25 19:10:52 +08:00
PYDT ccbd7b7fe6 Add files via upload 2023-05-25 09:55:42 +08:00
PYDT 7e1865f676 Add files via upload 2023-05-22 12:10:01 +08:00
PYDT da3c1f946c Add files via upload 2023-05-21 21:55:12 +08:00
PYDT 6c09cbc2d9 Add files via upload 2023-05-21 17:57:33 +08:00
PYDT cfcb81b657 Add files via upload 2023-05-20 11:38:04 +08:00
PYDT 948458c404 Add files via upload 2023-05-19 19:58:49 +08:00
PYDT 2886672d20 Add files via upload 2023-05-17 00:30:56 +08:00
PYDT 3d0f2f2d80 Add files via upload 2023-05-16 12:44:26 +08:00
PYDT a0b20127cb Add files via upload 2023-05-15 20:16:52 +08:00
PYDT 8e0092d647 Add files via upload 2023-05-15 16:16:25 +08:00
PYDT 347444edd2 Add files via upload 2023-05-15 15:26:48 +08:00
PYDT 559fa300a2 Add files via upload 2023-05-02 18:33:56 +08:00
PYDT e1d6813fa7 Add files via upload 2023-04-25 12:08:03 +08:00
PYDT fae99b9a29 Add files via upload 2023-04-22 17:02:49 +08:00
PYDT 75d2d58d0d Add files via upload 2023-04-22 17:02:32 +08:00
PYDT fd2f9dc972 Add files via upload 2023-04-21 15:24:00 +08:00
PYDT 0697ca9bef Add files via upload 2023-04-21 11:49:40 +08:00
PYDT 759a7ba41f Add files via upload 2023-04-21 00:26:54 +08:00
PYDT 109cb8d0fd Add files via upload 2023-04-20 21:42:28 +08:00
PYDT 3d031b30b5 Add files via upload 2023-04-20 20:53:25 +08:00
PYDT e95915d4be Add files via upload 2023-04-20 06:48:24 +08:00
PYDT 005e52c803 Delete PYAS_Server_Edition.py 2023-04-19 18:50:44 +08:00
PYDT 6d22f2c129 Add files via upload 2023-04-19 18:50:32 +08:00
PYDT 7fdadb14ae Add files via upload 2023-04-19 15:56:00 +08:00
PYDT 4d76ed5f00 Add files via upload 2023-04-19 15:49:55 +08:00
PYDT 37dc166adc Add files via upload 2023-04-18 23:08:22 +08:00
PYDT 014d3f234f Add files via upload 2023-04-18 21:44:42 +08:00
PYDT 0bb3b2a110 Add files via upload 2023-04-18 20:23:38 +08:00
PYDT e3aa5ec75d Add files via upload 2023-04-18 20:18:35 +08:00
PYDT 81f2f57666 Add files via upload 2023-04-17 12:44:16 +08:00
PYDT 562c475d2b Add files via upload 2023-04-17 12:33:51 +08:00
PYDT 9366cb3de9 Add files via upload 2023-04-17 11:48:57 +08:00
PYDT 9a2bd94e4a Add files via upload 2023-04-17 11:46:00 +08:00
PYDT cc61b16d3d Delete Library/PYAS directory 2023-04-17 11:45:20 +08:00
PYDT b56b8063f3 Add files via upload 2023-04-17 11:44:55 +08:00
PYDT 9b08c8b27b Add files via upload 2023-04-16 22:14:36 +08:00
PYDT 50f4ca8d1e Delete PYAE_Model.py 2023-04-16 22:14:19 +08:00
PYDT 74fb2f3f57 Update PYAS.py 2023-04-16 22:14:00 +08:00
PYDT e18e08a983 Add files via upload 2023-04-14 18:48:48 +08:00
PYDT 9967218524 Add files via upload 2023-04-14 14:41:29 +08:00
PYDT 44a9e0d6e0 Add files via upload 2023-04-14 14:33:31 +08:00
PYDT 91f153b109 Add files via upload 2023-04-14 14:15:35 +08:00
PYDT ead845f7bc Add files via upload 2023-04-14 14:05:32 +08:00
PYDT 0908cacb9f Add files via upload 2023-04-14 12:39:13 +08:00
PYDT 9dd47fe9ae Add files via upload 2023-04-14 12:27:56 +08:00
PYDT 724acdaba8 Add files via upload 2023-04-14 12:17:25 +08:00
PYDT 08bdd870a5 Add files via upload 2023-04-13 19:40:46 +08:00
PYDT 54a43f6045 Update README.md 2023-04-13 10:05:56 +08:00
PYDT 25a9cc3608 Update README.md 2023-04-13 10:03:14 +08:00
PYDT 7f52a53e62 Add files via upload 2023-04-13 10:00:49 +08:00
PYDT 20e9c82854 Delete ICON.bmp 2023-04-13 09:58:45 +08:00
PYDT fe92e53f7b Delete Viruslist.num 2023-04-13 09:58:30 +08:00
PYDT 130aeb01b9 Add files via upload 2023-04-13 09:57:55 +08:00
PYDT 7439b5e362 Delete PYAS_English.py 2023-04-12 15:15:24 +08:00
PYDT 166059b9bd Add files via upload 2023-04-12 15:15:12 +08:00
PYDT 7e5fc40768 Add files via upload 2023-04-09 20:32:12 +08:00
PYDT aadb2c1e40 Add files via upload 2023-04-09 14:19:03 +08:00
PYDT f317452c80 Add files via upload 2023-04-06 08:44:51 +08:00
PYDT cb98a00cfa Add files via upload 2023-04-06 08:44:24 +08:00
PYDT 75deeb247a Add files via upload 2023-04-05 20:11:35 +08:00
PYDT b17eec0647 Add files via upload 2023-04-05 19:53:35 +08:00
PYDT 5ddcc24563 Add files via upload 2023-04-05 05:01:01 +08:00
PYDT 9b4ecdf7bf Add files via upload 2023-04-05 03:53:56 +08:00
PYDT 6ba4efe1bb Add files via upload 2023-03-26 16:25:12 +08:00
PYDT 84ae6b4247 Add files via upload 2023-03-19 23:43:49 +08:00
PYDT 7510c6a539 Add files via upload 2023-03-15 17:53:57 +08:00
PYDT de45907c91 Add files via upload 2023-03-15 14:46:50 +08:00
PYDT 17e9546671 Add files via upload 2023-03-15 14:26:18 +08:00
PYDT c0a382fefc Add files via upload 2023-03-15 00:17:30 +08:00
PYDT bf7ca3e9b1 Add files via upload 2023-03-14 23:27:26 +08:00
PYDT af1c23d72d Add files via upload 2023-03-14 21:33:08 +08:00
PYDT 1bdea5727b Add files via upload 2023-03-14 13:27:17 +08:00
PYDT 3dc573cce1 Add files via upload 2023-03-14 12:52:36 +08:00
PYDT 4d1b8ca9e8 Add files via upload 2023-03-14 12:07:19 +08:00
PYDT aec1cff72c Add files via upload 2023-03-14 12:06:46 +08:00
PYDT 520a0e71eb Add files via upload 2023-03-12 16:26:17 +08:00
PYDT 9485d36565 Add files via upload 2023-03-12 15:56:02 +08:00
PYDT 48ce8a1b0e Add files via upload 2023-03-10 10:50:35 +08:00
PYDT 8a4c469e16 Delete PYAS_Api.py 2023-03-09 12:40:22 +08:00
PYDT 3ae7ba20d1 Update README.md 2023-03-08 15:05:22 +08:00
PYDT 2b4adcf8bb Delete PYAS_UI.ui 2023-03-08 15:01:30 +08:00
PYDT d8a237f94f Add files via upload 2023-03-08 15:00:58 +08:00
PYDT 02e62465b7 Add files via upload 2023-03-08 14:18:28 +08:00
PYDT c0db543d49 Add files via upload 2023-03-08 14:14:26 +08:00
PYDT 5a1f620d88 Add files via upload 2023-03-08 14:00:58 +08:00
PYDT c418283845 Add files via upload 2023-03-07 21:36:35 +08:00
PYDT 44b00cc050 Add files via upload 2023-03-06 23:42:45 +08:00
PYDT 3d33e1a713 Add files via upload 2023-03-06 23:27:47 +08:00
PYDT ccd1040ba6 Add files via upload 2023-03-06 19:24:43 +08:00
PYDT 35f7d6d71e Add files via upload 2023-03-06 18:43:50 +08:00
PYDT be3da7d66c Add files via upload 2023-03-06 18:42:22 +08:00
PYDT ccb706aef1 Add files via upload 2023-03-06 15:06:33 +08:00
PYDT 20d1c4fb23 Add files via upload 2023-03-03 21:32:49 +08:00
PYDT 99a459ae4f Add files via upload 2023-03-03 21:25:03 +08:00
PYDT e8e4cb5ebe Add files via upload 2023-03-03 11:42:29 +08:00
mtkiao129 87175e6e89 優化PYAS.py檔案 2023-03-02 17:47:21 +08:00
PYDT 301340b512 Add files via upload 2023-03-02 17:43:18 +08:00
PYDT e4388201c2 Add files via upload 2023-03-02 15:10:14 +08:00
PYDT ac3b2b7c80 Add files via upload 2023-03-01 18:46:09 +08:00
PYDT 5e79354705 Add files via upload 2023-03-01 13:18:12 +08:00
PYDT d39ef0693f Add files via upload 2023-03-01 13:17:11 +08:00
PYDT 2577333d79 Delete Library/PYAS/Audio directory 2023-03-01 13:14:11 +08:00
PYDT 115c335916 Delete Askaction.ogg 2023-03-01 13:13:56 +08:00
PYDT 4bfbdf476f Delete Viruslist.func 2023-03-01 13:13:13 +08:00
PYDT faea8cd616 Add files via upload 2023-03-01 10:56:54 +08:00
PYDT 6f1db7f9ef Delete PYAS_api.py 2023-03-01 10:55:48 +08:00
PYDT 204977cc49 Add files via upload 2023-02-26 18:12:02 +08:00
PYDT 8e825a58f0 Update PYAS_api.py 2023-02-26 10:04:04 +08:00
PYDT 3e567c6ffb Update PYAS_api.py 2023-02-25 22:45:00 +08:00
PYDT 8845f2a964 Add files via upload 2023-02-25 22:16:18 +08:00
PYDT a1400992af Update README.md 2023-02-25 20:15:49 +08:00
PYDT fa721e2e51 Add files via upload 2023-02-25 19:09:12 +08:00
PYDT c46a315280 Add files via upload 2023-02-25 19:08:40 +08:00
PYDT 81d6f34c35 Add files via upload 2023-02-25 19:07:08 +08:00
PYDT 6825e3d389 Add files via upload 2023-02-24 18:05:25 +08:00
PYDT 01e329234b Add files via upload 2023-02-24 02:04:01 +08:00
PYDT cdac73a18a Add files via upload 2023-02-23 15:55:18 +08:00
PYDT 3469349da5 Add files via upload 2023-02-14 08:55:38 +08:00
PYDT 9d814f9b66 Add files via upload 2023-02-13 16:27:09 +08:00
PYDT 81bcf5d6df Add files via upload 2023-02-13 12:45:29 +08:00
PYDT b5c595d1d6 Add files via upload 2023-01-23 22:56:32 +08:00
PYDT 484872cc11 Add files via upload 2023-01-23 22:55:54 +08:00
PYDT c96f6df171 Add files via upload 2023-01-20 21:59:40 +08:00
PYDT 2a98c2e8b4 Add files via upload 2023-01-20 20:34:49 +08:00
PYDT 36e6ac3301 Add files via upload 2023-01-18 10:07:57 +08:00
PYDT c20a0d3f32 Add files via upload 2023-01-18 10:07:01 +08:00
PYDT a609812960 Add files via upload 2023-01-16 15:31:53 +08:00
PYDT b6f3e66770 Update README.md 2023-01-14 23:20:08 +08:00
PYDT 0f41e98e5e Add files via upload 2023-01-12 20:41:11 +08:00
PYDT a808056229 Add files via upload 2023-01-11 01:01:11 +08:00
PYDT 314bdebde3 Add files via upload 2023-01-08 00:36:28 +08:00
PYDT ab7afb342c Add files via upload 2023-01-08 00:32:07 +08:00
PYDT 691049617d Add files via upload 2023-01-03 11:27:39 +08:00
PYDT f747d58c71 Add files via upload 2023-01-03 11:25:44 +08:00
PYDT c193a38782 Add files via upload 2023-01-02 21:46:59 +08:00
PYDT 4e8b0ba168 Add files via upload 2023-01-02 21:34:09 +08:00
PYDT fd37134fcd Update README.md 2023-01-02 21:28:53 +08:00
PYDT 5acf1aaf0e Update README.md 2023-01-02 21:28:07 +08:00
PYDT d0e3bbc55f Update LICENSE.md 2022-12-29 10:17:02 +08:00
PYDT 0c9dfb5829 Update README.md 2022-12-27 06:50:25 +08:00
PYDT 987bd6bcc1 Add files via upload 2022-12-26 18:20:21 +08:00
PYDT 939cf7c0df Add files via upload 2022-12-26 16:17:09 +08:00
PYDT 9f2256b547 Add files via upload 2022-12-26 13:02:19 +08:00
PYDT b301b9fb95 Add files via upload 2022-12-23 15:49:00 +08:00
PYDT a61c49cf68 Add files via upload 2022-12-23 12:54:50 +08:00
PYDT 9ab2967129 Add files via upload 2022-12-23 00:12:59 +08:00
PYDT 1aefb38a7c Add files via upload 2022-12-20 21:55:19 +08:00
PYDT c359312e9d Add files via upload 2022-12-15 21:47:08 +08:00
PYDT fe24317a9e Add files via upload 2022-12-15 11:26:07 +08:00
PYDT 68996d56ee Add files via upload 2022-12-15 10:19:01 +08:00
PYDT 9e2843460e Add files via upload 2022-12-13 20:00:57 +08:00
PYDT 2e08287e1c Add files via upload 2022-12-13 12:53:25 +08:00
PYDT ccf10e1444 Add files via upload 2022-12-06 13:02:42 +08:00
PYDT 8172f648ab Add files via upload 2022-12-06 01:52:49 +08:00
PYDT 113816f418 Add files via upload 2022-12-05 21:28:00 +08:00
PYDT 85bd807bf7 Add files via upload 2022-12-05 20:16:30 +08:00
PYDT a17827dbf4 Add files via upload 2022-12-05 12:41:14 +08:00
PYDT ef1f29a34f Create LICENSE.md 2022-12-05 12:16:09 +08:00
PYDT e283a6a955 Add files via upload 2022-12-05 07:43:42 +08:00
PYDT 7944627dab Add files via upload 2022-12-02 19:04:50 +08:00
PYDT 7757b10b4d Update README.md 2022-12-01 23:44:17 +08:00
PYDT 2b182e182b Update README.md 2022-12-01 23:41:27 +08:00
PYDT d6fafd5b34 Delete PYAS_UI.qrc 2022-12-01 23:35:58 +08:00
PYDT f36b3a0912 Add files via upload 2022-12-01 23:33:58 +08:00
PYDT 04cae30629 Add files via upload 2022-12-01 20:32:42 +08:00
PYDT 38cdeeed6a Add files via upload 2022-12-01 20:13:56 +08:00
PYDT 0d9ab96cf5 Add files via upload 2022-12-01 18:12:12 +08:00
PYDT 261420973e Add files via upload 2022-11-30 19:21:15 +08:00
PYDT d058101e8c Add files via upload 2022-11-30 18:26:35 +08:00
PYDT 128f39dcb3 Add files via upload 2022-11-29 20:18:54 +08:00
87owo 5d6cbf256a Rename Version_File.py to PYAS_Version_File.py 2022-11-28 23:21:40 +08:00
87owo c904c43c22 Delete PYAS_Version_File.py 2022-11-28 23:21:25 +08:00
87owo 401ec5eb6e Add files via upload 2022-11-28 23:20:14 +08:00
87owo 9a54f676fd Delete MainUI.ui 2022-11-28 23:20:00 +08:00
87owo a7f3167776 Add files via upload 2022-11-28 23:18:41 +08:00
87owo b3928e9677 Add files via upload 2022-11-28 23:17:12 +08:00
87owo de0bbdffe2 Update LICENSE.md 2022-11-28 12:57:37 +08:00
87owo 0cf835a3fb Add files via upload 2022-11-28 12:54:38 +08:00
87owo 527dbdaec3 Update LICENSE.md 2022-11-27 19:41:46 +08:00
87owo 3fee5ee3ee Add files via upload 2022-11-27 14:26:28 +08:00
87owo df62fa34d7 Rename Version_File.py to PYAS_Version_File.py 2022-11-27 14:25:40 +08:00
87owo 7a2709b612 Add files via upload 2022-11-26 18:56:08 +08:00
87owo 508c6e1f66 Add files via upload 2022-11-26 18:49:41 +08:00
87owo 2b4d282ec1 Delete test 2022-11-26 18:30:52 +08:00
87owo e977e27d79 test 2022-11-26 18:30:39 +08:00
mtkiao129 1f0693cec4 Create LICENSE.md 2022-11-26 18:00:55 +08:00
PYAS-Security 6e0492a4a3 Add files via upload 2022-11-26 17:53:02 +08:00
PYAS-Security 67eeaca923 Update README.md 2022-11-26 00:23:33 +08:00
mtkiao129 5b589b26d8 Delete .github/workflows directory 2022-11-25 22:44:29 +08:00
mtkiao129 65b821508b Create checkmarx-one.yml 2022-11-25 22:36:35 +08:00
87owo fc178439ed Add files via upload 2022-11-24 00:23:24 +08:00
87owo 5c9b6016b2 Add files via upload 2022-11-23 23:39:29 +08:00
87owo 32aad0d11a Add files via upload 2022-11-23 23:19:55 +08:00
87owo d81dfc2149 Add files via upload 2022-11-23 23:18:30 +08:00
87owo 3aa1fea626 Add files via upload 2022-11-22 22:54:19 +08:00
87owo c4f029e7df Add files via upload 2022-11-22 19:40:05 +08:00
87owo 81394de63a Delete PYAS_Version_File.py 2022-11-22 13:07:42 +08:00
87owo f986714cc0 Add files via upload 2022-11-22 13:06:44 +08:00
87owo f4fe6d65d5 Update Viruslist.num 2022-11-22 01:14:42 +08:00
87owo 2c38bd8f25 Add files via upload 2022-11-22 01:13:57 +08:00
87owo 49909e65ff Add files via upload 2022-11-20 23:01:31 +08:00
87owo 120fa556fe Add files via upload 2022-11-20 12:58:21 +08:00
87owo fa2d19f4d1 Update README.md 2022-11-19 14:59:02 +08:00
87owo a538074890 Add files via upload 2022-11-18 22:31:20 +08:00
87owo 06c698e7bb Add files via upload 2022-11-18 22:16:29 +08:00
87owo 88622f9727 Update README.md 2022-11-18 19:11:17 +08:00
87owo d6d22d9fd8 Rename Version_File.py to PYAS_Version_File.py 2022-11-18 18:57:07 +08:00
87owo 8c64ff8571 Delete PYAS_Setup.ifp 2022-11-18 18:55:46 +08:00
87owo 87691a0336 Delete PYAS_Old.py 2022-11-18 18:55:31 +08:00
87owo d59aaf2a38 Add files via upload 2022-11-18 18:53:36 +08:00
87owo a16d87a8d9 Delete Viruslist.func 2022-11-18 18:52:54 +08:00
87owo 5f8f4e59bc Add files via upload 2022-11-18 18:49:17 +08:00
87owo 9425d7244d Delete ICON.ico 2022-11-18 18:48:43 +08:00
87owo 9c88d9fa2c Add files via upload 2022-11-18 18:43:39 +08:00
87owo d24ae043f0 Update README.md 2022-11-18 12:06:41 +08:00
87owo 94f39bbabd Update README.md 2022-11-18 12:04:30 +08:00
87owo 2d290c0469 Add files via upload 2022-11-18 11:59:04 +08:00
87owo 808716993e Add files via upload 2022-11-18 01:47:06 +08:00
87owo 3b29cbf283 Add files via upload 2022-11-17 21:55:08 +08:00
87owo 5d2c2bcdee Add files via upload 2022-11-17 01:13:59 +08:00
87owo 0b638a802a Add files via upload 2022-11-16 23:45:58 +08:00
87owo 3f7fb7f457 Add files via upload 2022-11-16 06:32:30 +08:00
87owo cdfc24c38a Add files via upload 2022-11-16 06:29:50 +08:00
87owo 26adb5cb1e Add files via upload 2022-11-12 16:19:08 +08:00
87owo 54ee48ce2a Add files via upload 2022-11-12 16:18:40 +08:00
87owo 675fd2d16e Update README.md 2022-10-28 06:12:04 +08:00
87owo f6dd77015a Add files via upload 2022-10-28 00:44:54 +08:00
87owo 5ff8c774e4 Add files via upload 2022-10-28 00:44:05 +08:00
87owo 7b314d93ad Add files via upload 2022-09-24 12:12:38 +08:00
87owo 0627ef7814 Add files via upload 2022-09-22 18:14:53 +08:00
87owo eccdce1913 Add files via upload 2022-09-21 06:09:15 +08:00
87owo 06fa3577e9 Add files via upload 2022-09-15 20:32:01 +08:00
87owo a6c77f18f0 Add files via upload 2022-09-15 06:10:36 +08:00
87owo 534f816889 Add files via upload 2022-09-14 18:51:19 +08:00
87owo 0cd67e7e34 Add files via upload 2022-09-14 18:46:24 +08:00
87owo 552f36d15e Add files via upload 2022-09-14 06:34:26 +08:00
87owo 5e6af38e0f Add files via upload 2022-09-13 22:37:38 +08:00
87owo 6d49905ac2 Add files via upload 2022-09-13 22:18:05 +08:00
87owo e75e47dfda Add files via upload 2022-09-13 22:16:06 +08:00
87owo 18c3f42c4b Add files via upload 2022-09-13 22:06:10 +08:00
87owo b431a9772c Update README.md 2022-09-13 12:03:46 +08:00
87owo f55f4d54a0 Update README.md 2022-09-13 11:58:57 +08:00
87owo 08398d6fae Add files via upload 2022-09-13 06:20:07 +08:00
87owo 86825baba8 Update README.md 2022-09-11 22:01:09 +08:00
87owo 79fd9b4778 Update README.md 2022-09-11 18:03:21 +08:00
87owo 5aa26b059b Update README.md 2022-09-11 18:02:29 +08:00
87owo 3db3e64bb1 Add files via upload 2022-09-11 17:48:49 +08:00
87owo c2384c1fb7 Update README.md 2022-09-10 19:11:55 +08:00
87owo 50954b5682 Update README.md 2022-09-10 19:06:12 +08:00
87owo 4fa9ddb9f8 Update README.md 2022-09-10 19:04:17 +08:00
87owo a8e4373188 Update README.md 2022-09-10 19:01:58 +08:00
87owo 7d29c5f911 Update README.md 2022-09-10 18:57:31 +08:00
87owo a4a87cf2ce Update README.md 2022-09-08 08:51:39 +08:00
87owo 8501aa319d Add files via upload 2022-09-07 18:24:47 +08:00
87owo 89d59c1b75 Update README.md 2022-09-07 07:19:16 +08:00
87owo cb40e6bc89 Update README.md 2022-09-06 16:42:47 +08:00
87owo c5471ebca7 Update README.md 2022-09-06 16:41:19 +08:00
87owo 456885000e Update README.md 2022-09-06 16:34:03 +08:00
87owo 03a9b6336b Update README.md 2022-09-06 16:31:01 +08:00
87owo c01a93635f Update README.md 2022-09-06 16:28:41 +08:00
87owo 5b9fe1ac1c Update README.md 2022-09-06 16:27:09 +08:00
87owo cb205164a8 Update README.md 2022-09-06 16:22:40 +08:00
87owo 0ac5eb8840 Update README.md 2022-09-06 16:21:35 +08:00
87owo 0ed0b38ea9 Update README.md 2022-09-06 16:18:50 +08:00
87owo e6c2d4521f Update README.md 2022-09-06 16:14:50 +08:00
87owo 7e4c038354 Add files via upload 2022-09-04 11:38:15 +08:00
36 changed files with 292063 additions and 19923 deletions

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
from PIL import Image
import numpy, pefile, os
####################################################################################################
def preprocess_image(file_data, size, channels=1):
width, height = size
wah = int(numpy.ceil(numpy.sqrt(len(file_data) / channels)))
arr = numpy.frombuffer(file_data, dtype=numpy.uint8)
img = numpy.zeros(wah*wah*channels, dtype=numpy.uint8)
img[:len(file_data)] = arr
image = Image.fromarray(img.reshape((wah, wah)), 'L')
return image.resize((width, height), Image.Resampling.NEAREST)
####################################################################################################
def is_text_file(content, sample_size=1024):
raw = content[:sample_size]
if not raw:
return False
text_char = set(range(32, 127)) | {9, 10, 13}
nontext = sum(b not in text_char for b in raw)
return nontext / len(raw) < 0.15
def get_type(file_path):
suffix = {".com", ".dll", ".drv", ".exe", ".ocx", ".scr", ".sys", ".mui", ".cpl"}
match_data = {}
if not os.path.splitext(file_path)[-1].lower() in suffix:
return match_data
try:
with pefile.PE(file_path, fast_load=True) as pe:
for section in pe.sections:
name = section.Name.rstrip(b'\x00').decode('latin1').lower()
data = section.get_data()
if data:
match_data[name] = section.get_data()
except pefile.PEFormatError:
with open(file_path, 'rb') as f:
file_content = f.read()
if is_text_file(file_content):
match_data[os.path.splitext(file_path)[-1].lower()] = file_content
return match_data
####################################################################################################
def file_to_images(input_dir, output_dir):
for root, dirs, files in os.walk(input_dir):
for file in files:
try:
file_path = os.path.join(root, file)
for name, data in get_type(file_path).items():
print(name, file_path)
relative_path = os.path.relpath(root, input_dir)
output_path_dir = os.path.join(output_dir, relative_path)
if not os.path.exists(output_path_dir):
os.makedirs(output_path_dir)
image = preprocess_image(data, (224, 224))
image.save(os.path.join(output_path_dir, f"{name}_{file}.png"))
except Exception as e:
print(e)
####################################################################################################
input_directory = input('Enter the folder path: ')
output_directory = "./Image_Output"
file_to_images(input_directory, output_directory)
input('Conversion Complete')
+34
View File
@@ -0,0 +1,34 @@
import os, hashlib
####################################################################################################
def calc_sha256(path):
with open(path, "rb") as f:
return hashlib.sha256(f.read()).digest()
def dedup_realtime(root):
seen = set()
deleted = 0
for dirpath, _, files in os.walk(root):
for name in files:
p = os.path.join(dirpath, name)
try:
h = calc_sha256(p)
except Exception:
continue
if h in seen:
try:
os.remove(p)
print(p)
deleted += 1
except Exception:
pass
else:
seen.add(h)
print(f"deleted {deleted}")
####################################################################################################
if __name__ == "__main__":
dedup_realtime(input("Input file path: "))
input('Deduplicate Complete')
+163
View File
@@ -0,0 +1,163 @@
import tensorflow as tf
import os, tf2onnx, numpy, random
from PIL import Image
from tensorflow.keras import *
from collections import Counter
####################################################################################################
Image.MAX_IMAGE_PIXELS = None
tf.keras.mixed_precision.set_global_policy('mixed_float16')
####################################################################################################
def load_dataset(data_dir, image_size=(224, 224), val_split=0.00001, batch_size=256, color_mode="grayscale"):
channels = 1 if color_mode == "grayscale" else 3
file_paths, labels, class_indices = get_file_list(data_dir)
combined = list(zip(file_paths, labels))
random.shuffle(combined)
file_paths[:], labels[:] = zip(*combined)
num_val = int(val_split * len(file_paths))
train_files = file_paths[num_val:]
train_labels = labels[num_val:]
val_files = file_paths[:num_val]
val_labels = labels[:num_val]
num_classes = len(class_indices)
train_ds = tf.data.Dataset.from_tensor_slices((train_files, train_labels))
train_ds = train_ds.map(lambda f, l: parse_fn(f, l, image_size, channels, num_classes), num_parallel_calls=tf.data.AUTOTUNE)
train_ds = train_ds.batch(batch_size).prefetch(tf.data.AUTOTUNE)
val_ds = tf.data.Dataset.from_tensor_slices((val_files, val_labels))
val_ds = val_ds.map(lambda f, l: parse_fn(f, l, image_size, channels, num_classes), num_parallel_calls=tf.data.AUTOTUNE)
val_ds = val_ds.batch(batch_size).prefetch(tf.data.AUTOTUNE)
train_ds.class_indices = class_indices
return train_ds, val_ds
####################################################################################################
def parse_fn(filename, label, image_size, channels, num_classes):
img = tf.io.read_file(filename)
img = tf.image.decode_image(img, channels=channels, expand_animations=False)
img = tf.cond(tf.reduce_all(tf.equal(tf.shape(img)[:2], image_size)), lambda: tf.cast(img, tf.float32), lambda: tf.image.resize(img, image_size))
img = tf.cast(img, tf.float32) / 255.0
label = tf.one_hot(label, depth=num_classes)
return img, label
def get_file_list(directory):
file_paths, labels, class_indices = [], [], {}
for i, cls in enumerate(sorted([d for d in os.listdir(directory) if os.path.isdir(os.path.join(directory, d))])):
class_indices[cls] = i
cls_dir = os.path.join(directory, cls)
for root, _, files in os.walk(cls_dir):
for file in files:
if file.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp', '.gif')):
file_paths.append(os.path.join(root, file))
labels.append(i)
return file_paths, labels, class_indices
####################################################################################################
def multi_conv(x, strides):
convs = []
for k in [(1, 7), (1, 1), (3, 3), (5, 5)]:
c = layers.DepthwiseConv2D(kernel_size=k, strides=strides, padding='same', activation='gelu')(x)
convs.append(c)
x = layers.Concatenate()(convs)
x = layers.BatchNormalization()(x)
return layers.Activation('gelu')(x)
def gated_conv(x, strides):
c = layers.DepthwiseConv2D(3, strides=strides, padding='same', activation='gelu')(x)
g = layers.DepthwiseConv2D(3, strides=strides, padding='same', activation='sigmoid')(x)
return layers.Multiply()([c, g])
def coordinate_attention(x, reduction):
input_shape = tf.shape(x)
h, w = input_shape[1], input_shape[2]
filters = x.shape[-1]
mip = max(8, filters // reduction)
x_h = layers.Lambda(lambda t: tf.reduce_mean(t, axis=2, keepdims=True))(x)
x_w = layers.Lambda(lambda t: tf.reduce_mean(t, axis=1, keepdims=True))(x)
x_w_t = layers.Permute((2, 1, 3))(x_w)
x_cat = layers.Concatenate(axis=1)([x_h, x_w_t])
x_cat = layers.Conv2D(mip, 1, padding='valid', use_bias=False)(x_cat)
x_cat = layers.BatchNormalization()(x_cat)
x_cat = layers.Activation('gelu')(x_cat)
x_cat_h, x_cat_w = layers.Lambda(lambda t: tf.split(t[0], [t[1], t[2]], axis=1))([x_cat, h, w])
x_h_sigmoid = layers.Conv2D(filters, 1, padding='valid', activation='sigmoid')(x_cat_h)
x_cat_w = layers.Permute((2, 1, 3))(x_cat_w)
x_w_sigmoid = layers.Conv2D(filters, 1, padding='valid', activation='sigmoid')(x_cat_w)
return layers.Multiply()([x, x_h_sigmoid, x_w_sigmoid])
def build_model(input_shape, num_classes):
i = layers.Input(shape=input_shape)
x = multi_conv(i, strides=1)
x = gated_conv(x, strides=2)
x = multi_conv(x, strides=2)
x = multi_conv(x, strides=2)
x = multi_conv(x, strides=2)
x = multi_conv(x, strides=2)
x = coordinate_attention(x, reduction=4)
x = layers.GlobalMaxPooling2D()(x)
x = layers.Dense(x.shape[-1] // 2, activation='gelu', dtype='float32')(x)
o = layers.Dense(num_classes, activation='softmax', dtype='float32')(x)
return models.Model(i, o)
####################################################################################################
def calculate_lr_cosine_sq(epoch, total_epochs=25, lr_start=5e-4, lr_end=1e-6):
cos_val = 0.5 * (1 + numpy.cos(epoch / total_epochs * numpy.pi))
return lr_end + (lr_start - lr_end) * (cos_val ** 2)
def lr_scheduler(epoch):
return calculate_lr_cosine_sq(epoch)
def categorical_focal_loss(gamma=2.0, alpha=0.25):
def focal_loss(y_true, y_pred):
y_pred = tf.clip_by_value(y_pred, tf.keras.backend.epsilon(), 1.0 - tf.keras.backend.epsilon())
cross_entropy = -y_true * tf.math.log(y_pred)
loss = alpha * tf.math.pow(1.0 - y_pred, gamma) * cross_entropy
return tf.reduce_sum(loss, axis=-1)
return focal_loss
class CustomModelCheckpoint(callbacks.Callback):
def on_epoch_end(self, epoch, logs=False):
models.save_model(self.model, f"PYAS_Model_Epoch_{epoch + 1}.h5")
spec = (tf.TensorSpec((None,) + train_ds.image_shape, tf.float32),)
model_proto, _ = tf2onnx.convert.from_keras(self.model, input_signature=spec, opset=17)
with open(f"PYAS_Model_Epoch_{epoch + 1}.onnx", "wb") as f:
f.write(model_proto.SerializeToString())
####################################################################################################
train_ds, val_ds = load_dataset(r'.\Image_File_Pefile')
for imgs, _ in train_ds.take(1):
train_ds.image_shape = imgs.shape[1:]
break
try:
model = models.load_model('PYAS_Model_Epoch_0.h5')
print("Load model from disk")
except:
print("Creating a new model")
model = build_model(train_ds.image_shape, len(train_ds.class_indices))
print(f"Total parameters: {model.count_params()}")
model.compile(optimizer='adam', loss=categorical_focal_loss(gamma=2.0, alpha=0.25),
metrics=['accuracy', metrics.Precision(name='precision'), metrics.Recall(name='recall'),
metrics.FalsePositives(name='fp'), metrics.TrueNegatives(name='tn')])
model.fit(train_ds, epochs=25, callbacks=[CustomModelCheckpoint(), callbacks.LearningRateScheduler(lr_scheduler)], validation_data=val_ds)
input('Training Complete')
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

+31
View File
@@ -0,0 +1,31 @@
87owo Publicly Available Source Code License Agreement
Last updated: 2025-12-19
1. License and Ownership
- This software and its source code are source available for public view.
- Access or execution of certain features may require an activation key.
- 87owo reserves all legal rights, no intellectual property is transferred.
- All project archives, source code, and binaries remain fully proprietary.
2. Use and Prohibitions
- You may view, download, and modify the code for local and personal use.
- Redistribution of any original or modified code requires prior consent.
- Commercial hosting or SaaS deployment is prohibited without permission.
- Reverse engineering, license removal, or illegal use is strictly barred.
3. Data and Privacy
- This project may collect operational data for optimization and analysis.
- All collected data is strictly anonymized to ensure the user's privacy.
- Transmission of information is encrypted to prevent unauthorized access.
4. Updates and Terms
- New releases may include critical patches, enhancements, or UI changes.
- Continued use of these services constitutes acceptance of updated terms.
- The author reserves the right to modify these license terms at any time.
5. Warranty and Liability
- All services and assets are provided "as is" without any form of warranty.
- 87owo is not liable for any direct or indirect damages from software use.
- Users assume all risks regarding performance, data, and system integrity.
© 2020-2026 87owo (PYAS Security). All rights reserved.
-5560
View File
File diff suppressed because it is too large. Load diff
+1903 -2050
View File
File diff suppressed because it is too large. Load diff
+130
View File
@@ -0,0 +1,130 @@
translate_dict = {
"traditional_switch": {"开启":"開啟","关闭":"關閉","On":"開啟","Off":"關閉"},
"simplified_switch": {"開啟":"开启","關閉":"关闭","On":"开启","Off":"关闭",
"錯誤":"错误","發現":"发现","關閉":"关闭","裝置":"设备","記憶體":"内存",
"軟體":"软件","檔案":"文件","確定":"确认","設定":"设置","關於":"关于",
"總數":"总数","註冊":"注册","圖標":"图标","路徑":"路径","網路":"网络",
"位元":"字节","靈敏":"敏感","複製":"复制","開啟":"开启","靜態":"静态",
"訊":"讯","項":"项","掃":"扫","試":"试","黃":"黄","嗎":"吗","防":"保",
"鑰":"钥","當":"当","後":"后","護":"护","導":"导","區":"区","復":"复",
"攔":"拦","請":"请","統":"统","刪":"删","進":"进","個":"个","選":"选",
"啟":"启","監":"监","並":"并","徑":"径","盤":"盘","隱":"隐","動":"动",
"狀":"状","誌":"志","這":"这","會":"会","題":"题","擇":"择","語":"语",
"無":"无","顯":"显","變":"变","戶":"户","碼":"码","雲":"云","介":"界",
"稱":"称","類":"类","輸":"输","執":"执","數":"数","尋":"寻","網":"网",
"詢":"询","製":"制","員":"员","許":"许","條":"条","藍":"蓝","紅":"红",
"綠":"绿","態":"态","務":"务","連":"连","檢":"检","測":"测","關":"关",
"強":"强","驅":"驱","為":"为","腳":"脚","單":"单","開":"开","擴":"扩",
"惡":"恶","據":"据","庫":"库","經":"经","敗":"败","謝":"谢","別":"别",
"載":"载","誤":"误","報":"报","鏈":"链","竄":"窜","蹤":"踪","與":"与",
"異":"异","實":"实","時":"时","彈":"弹","窗":"窗","暫":"暂","訂":"订",
"資":"资","產":"产","金":"密","離":"离","規":"规","則":"则","來":"来",
"殼":"壳","碼":"码","線":"线","餘":"余",},
"english_switch": {"開啟":"On","關閉":"Off","开启":"On","关闭":"Off",",":", ",
"立即刪除":"Delete Now","安全模式":"Safe Mode","官方網站":"Official Website ",
"腳本":"Script ","鏈式":"Chain ","記憶體":"Memory ","加載":"Load ",
"行為":"Behavior ","可疑":"Suspicious ","勒索":"Ransom ","主要":"Main ",
"許可條款":"License Terms ","惡意":"Malicious", "開發":"Developers ",
"啟用":"Enable ","禁用":"Disable ","正在初始化中":"Initializing ",
"正在掃描":"Scanning ","正在刪除":"Deleting ","正在追蹤":"Tracking ",
"最小化到":"Minimize To ","靈敏度":"Sensitivity ","正在檢查":"Checking ",
"確定要":"Sure Want To ","引擎靈敏度":"Sensitivity ","更新":"Update ",
"白色主題":"White","黃色主題":"Yellow","紅色主題":"Red","語言":"Language ",
"藍色主題":"Blue","綠色主題":"Green","自訂主題":"Custom","黑色主題":"Black",
"特別感謝":"Contributors ","版本資訊":"Information","通訊":"Connect ",
"註冊":"Registry ","退出":"Quit ","檔案":"File ","當前":"Currently ",
"狀態":"State ","掃描":"Scan ","工具":"Tools ","防護":"Protect ",
"失敗":"Failed ","請":"Please ","路徑":"Path ","方式":"Method ",
"需要":"Need ","病毒":"Virus ","選擇":"Select ","返回":"Back",
"受到":"Been ","錯誤":"Error","完成":"Complete ","引擎":"Engine ",
"托盤":"Tray ","圖標":"Icon ","不安全":"Unsafe","增強":"Enhance ",
"系統":"System ","雲端":"Cloud ","重啟":"Reboot ","修復":"Repair ",
"裝置":"Device ","發現":"Found ","成功":"Success ","清理":"Cleanup ",
"確定":"OK","執行":"Execute ","警告":"Warning ","使用":"Use ",
"網路":"Network ","變更":"Change ","總數":"Total","結束":"End ",
"選項":"Options ","監控":"Monitor ","連接":"Connect ","可以":"Can ",
"進程":"Process ","攔截":"Block ","引導":"Boot ","刪除":"Delete ",
"分區":"Partition ","設定":"Setting ","關於":"About","模式":"Mode ",
"提高":"Improve ","安全":"Security ","顯色":"Color ","顏色":"Color ",
"主題":"Theme ", "回收":"Collect ", "無用":"Useless ","導入":"Import ",
"風險":"Risk ","介面":"UI ","核心":"Core ","服務":"Services ",
"管理":"Manage","所有":"All ","您":"You ","取消":"Cancel ","未":"Not ",
"垃圾":"Junk ","位元":"byte ","本機":"Computer ","停止":"Stop ",
"到":"To ","白名單":"White List ","軟體":"Software ","正在":"",
"增加":"Add ","移除":"Delete ","項目":"Items ","生成":"Create ","稱":"",
"複製":"Copy ","此":"This ","並":"And ","全盤":"Full ","最新":"Latest ",
"已存在":"Already ","數據庫":"Database ","誤報":"False Positive ",
"高":"High ","新":"New ","和":"And ","可能會":"Possible ","會":"Can ",
"日誌":"Log","已":"Has ","彈窗":"Window ","要":"To ","驅動":"Driver ",
"的":"","顯示":"","個":"","嗎":"","了":"","行":"","立即":"","規則":"Rule ",
"密鑰":"Key ","檢測":"Detect ","製作":"Maker ","運行":"Running",
"擴展":"Extension ","套件":"Kit ","自動":"Auto ","上報":"Report ",
"分析":"Analysis ","自身":"Self ","其他":"Other ","配置":"Config ",
"丟失":"Lost ","網站":"Website ","不兼容":"Not Compatible ","列表":"List ",
"竄改":"Tamper ","第三方":"Other ","實時":"Real Time ","查看":"View ",
"指定":"Specify ","清空":"Empty ","資源回收桶":"Recycle Bin ", "無法":"Cannot ",
"與":"With ","當":"When ","功能":"Function ","異常":"Abnormal ", "來":"To ",
"重置":"Reset ","窗口":"Window ","暫存":"Temp ","自訂":"Custom ",
"不支持":"Not Support ","共":"Total ","秒":"Seconds ","耗時":"Takes ",
"沙箱":"Sandbox ", "虛擬":"Virtual ", "隔離":"Quarantine ", "時":"",
"建立":"Create ","環境":"Environment ","沙箱":"Sandbox ","化":"", "表":"",
"達":"Reached ", "上限":"Limit ", "區":"", "金鑰":"Key ", "產品":"Product ",
"運行庫":".NET CLR ","殼碼":"Shellcode ","線程":"Thread ","注入":"Inject ",
"前往":"Go ","檢查":"Check ","可用":"Available ","靜態":"Static ",
"版本":"Version ","是":"","剩餘":"Remain ","遠控":"Remote ","監控":"Monitor ",
" ":" "},
"white_switch": {
"_white": "_black",},
"red_switch": {
"235, 235, 235": "255, 235, 235",
"245, 245, 245": "255, 225, 225",
"255, 255, 255": "255, 245, 245",
"240, 240, 240": "255, 220, 220",
"250, 250, 250": "255, 210, 210",
"220, 255, 220": "255, 220, 220",
"210, 255, 210": "255, 210, 210",
"_white": "_black"
},
"yellow_switch": {
"235, 235, 235": "255, 255, 235",
"245, 245, 245": "255, 255, 225",
"255, 255, 255": "255, 255, 245",
"240, 240, 240": "255, 255, 220",
"250, 250, 250": "255, 255, 210",
"220, 255, 220": "255, 255, 220",
"210, 255, 210": "255, 255, 210",
"_white": "_black"
},
"green_switch": {
"235, 235, 235": "235, 255, 235",
"245, 245, 245": "225, 255, 225",
"255, 255, 255": "245, 255, 245",
"240, 240, 240": "220, 255, 220",
"250, 250, 250": "210, 255, 210",
"_white": "_black"
},
"blue_switch": {
"235, 235, 235": "235, 235, 255",
"245, 245, 245": "225, 225, 255",
"255, 255, 255": "245, 245, 255",
"240, 240, 240": "220, 220, 255",
"250, 250, 250": "210, 210, 255",
"220, 255, 220": "220, 220, 255",
"210, 255, 210": "210, 210, 255",
"_white": "_black"
},
"black_switch": {
"255, 255, 255": "20, 20, 20",
"245, 245, 245": "40, 40, 40",
"235, 235, 235": "30, 30, 30",
"240, 240, 240": "70, 70, 70",
"250, 250, 250": "80, 80, 80",
"220, 255, 220": "70, 70, 70",
"210, 255, 210": "80, 80, 80",
"0, 0, 0": "255, 255, 255",
"_black": "_white"
}
}
+208
View File
@@ -0,0 +1,208 @@
import os, yara, numpy, base64, onnxruntime
import ctypes, ctypes.wintypes, pefile
from PIL import Image
from io import BytesIO
####################################################################################################
class GUID(ctypes.Structure):
_fields_ = [
("Data1", ctypes.wintypes.DWORD),
("Data2", ctypes.wintypes.WORD),
("Data3", ctypes.wintypes.WORD),
("Data4", ctypes.c_ubyte * 8)]
class WINTRUST_FILE_INFO(ctypes.Structure):
_fields_ = [
("cbStruct", ctypes.wintypes.DWORD),
("pcwszFilePath", ctypes.wintypes.LPCWSTR),
("hFile", ctypes.wintypes.HANDLE),
("pgKnownSubject", ctypes.wintypes.LPVOID)]
class WINTRUST_DATA(ctypes.Structure):
_fields_ = [
("cbStruct", ctypes.wintypes.DWORD),
("pPolicyCallbackData", ctypes.wintypes.LPVOID),
("pSIPClientData", ctypes.wintypes.LPVOID),
("dwUIChoice", ctypes.wintypes.DWORD),
("fdwRevocationChecks", ctypes.wintypes.DWORD),
("dwUnionChoice", ctypes.wintypes.DWORD),
("pFile", ctypes.POINTER(WINTRUST_FILE_INFO)),
("dwStateAction", ctypes.wintypes.DWORD),
("hWVTStateData", ctypes.wintypes.HANDLE),
("pwszURLReference", ctypes.wintypes.LPCWSTR),
("dwProvFlags", ctypes.wintypes.DWORD),
("dwUIContext", ctypes.wintypes.DWORD),
("pSignatureSettings", ctypes.wintypes.LPVOID)]
####################################################################################################
class sign_scanner:
def __init__(self):
self.verify = GUID(0x00AAC56B, 0xCD44, 0x11D0, (0x8C, 0xC2, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xEE))
def init_windll(self, path):
for name in path:
try:
setattr(self, name.lower(), ctypes.WinDLL(name, use_last_error=True))
except Exception as e:
self.send_message(e, "warn", False)
self.WinVerifyTrust = self.wintrust.WinVerifyTrust
self.WinVerifyTrust.restype = ctypes.wintypes.LONG
self.WinVerifyTrust.argtypes = [ctypes.wintypes.HWND, ctypes.POINTER(GUID), ctypes.c_void_p]
def is_sign(self, file_path):
with pefile.PE(file_path, fast_load=True) as pe:
sec_dir = pe.OPTIONAL_HEADER.DATA_DIRECTORY[pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_SECURITY']]
return sec_dir.VirtualAddress != 0 and sec_dir.Size > 0
def sign_verify(self, file_path):
fi = WINTRUST_FILE_INFO(ctypes.sizeof(WINTRUST_FILE_INFO), file_path, None, None)
data = WINTRUST_DATA(ctypes.sizeof(WINTRUST_DATA), None, None, 2, 0, 1,
ctypes.pointer(fi), 1, None, None, 0, 0, None)
s = self.WinVerifyTrust(None, ctypes.byref(self.verify), ctypes.byref(data))
data.dwStateAction = 2
self.WinVerifyTrust(None, ctypes.byref(self.verify), ctypes.byref(data))
return s == 0
####################################################################################################
class rule_scanner:
def __init__(self):
self.rules = {}
self.network = []
def load_path(self, path):
for root, _, files in os.walk(path):
for file in files:
self.load_file(os.path.join(root, file))
def load_file(self, file):
ext = os.path.splitext(file)[1].lower()
try:
if ext in ('.yara', '.yar'):
self.rules[file] = yara.compile(file)
elif ext in ('.yc', '.yrc'):
self.rules[file] = yara.load(file)
elif ext in ('.ip', '.txt'):
with open(file, "r", encoding="utf-8", errors="ignore") as f:
self.network.extend(line.strip() for line in f if line.strip())
except Exception:
return False
def yara_scan(self, file_path):
try:
for rules in self.rules.values():
matches = rules.match(filepath=file_path)
if matches:
rule_name = str(matches[0])
label = rule_name.split("_")[0]
level = rule_name.split("_")[-1]
return f"Rules/{label}", level
return False, False
except Exception:
return False, False
####################################################################################################
class model_scanner:
def __init__(self):
self.model = None
self.suffix = {".com", ".dll", ".drv", ".exe", ".ocx", ".scr", ".sys"}
self.labels = ["Pefile/White", "Pefile/General"]
self.detect_set = {"Pefile/General"}
self.resize = (224, 224)
def load_path(self, path):
for root, _, files in os.walk(path):
for file in files:
self.load_file(os.path.join(root, file))
def load_file(self, file):
if file.lower().endswith('.onnx'):
try:
self.model = onnxruntime.InferenceSession(file)
except Exception:
return False
def model_scan(self, file_path, full_output=False):
if not self.model:
return (False, False) if not full_output else ([], str(file_path), None)
sections = self.extract_sections(file_path)
if not sections:
return (False, False) if not full_output else ([], str(file_path), None)
images = [self.preprocess_image(data, self.resize) for data in sections.values()]
if not images:
return (False, False) if not full_output else ([], str(file_path), None)
arr = numpy.stack([numpy.asarray(img).astype('float32') / 255.0 for img in images])
if arr.ndim == 3:
arr = numpy.expand_dims(arr, axis=-1)
input_meta = self.model.get_inputs()[0]
input_name = input_meta.name
input_shape = input_meta.shape
if len(input_shape) == 4:
if input_shape[1] in (1, 3) and input_shape[3] not in (1, 3):
arr = arr.transpose(0, 3, 1, 2)
try:
probs = self.model.run(None, {input_name: arr})[0]
except Exception:
return (False, False) if not full_output else ([], str(file_path), None)
results = []
best_malicious = None
for name, pred, img in zip(sections.keys(), probs, images):
idx = int(numpy.argmax(pred))
label = self.labels[idx] if idx < len(self.labels) else f"Class_{idx}"
conf = round(float(pred[idx]) * 100, 2)
print(f"Section: {name} | Label: {label} | Confidence: {conf}%")
if full_output:
results.append((name, label, conf, self.pil_to_base64(img)))
if label in self.detect_set:
if best_malicious is None or conf > best_malicious[1]:
best_malicious = (label, int(conf))
if full_output:
results.sort(key=lambda x: (x[1] not in self.detect_set, -x[2]))
malicious_count = sum(1 for _, lbl, _, _ in results if lbl in self.detect_set)
total = len(results)
return results, str(file_path), f"{malicious_count}/{total}"
return best_malicious if best_malicious else (False, False)
def pil_to_base64(self, img):
buf = BytesIO()
img.save(buf, format='PNG')
return base64.b64encode(buf.getvalue()).decode()
def preprocess_image(self, data, size, channels=1):
width, height = size
wah = int(numpy.ceil(numpy.sqrt(len(data) / channels)))
arr = numpy.frombuffer(data, dtype=numpy.uint8)
imgbuf = numpy.zeros(wah * wah * channels, dtype=numpy.uint8)
imgbuf[:len(arr)] = arr
image = Image.fromarray(imgbuf.reshape((wah, wah)), 'L')
return image.resize((width, height), Image.Resampling.NEAREST)
def extract_sections(self, file_path):
match_data = {}
fpath_str = str(file_path)
ext = os.path.splitext(fpath_str)[-1].lower()
if ext in self.suffix:
try:
with pefile.PE(fpath_str, fast_load=True) as pe:
for section in pe.sections:
name = section.Name.rstrip(b'\x00').decode('latin1', errors='ignore').lower()
data = section.get_data()
if data:
match_data[name] = data
except Exception:
pass
return match_data
-121
View File
@@ -1,121 +0,0 @@
english_list = {
"已開啟":"On",
"已關閉":"Off",
"已开启":"On",
"已关闭":"Off",
" > [行為檢測] ":" > [Behavior Detect] ",
" 被移動":" Moved",
" 被創建":" Created",
" 被刪除":" Deleted",
" 被編輯":" Edited",
"✔成功: 已執行成功。":"✔Success: Executed successfully.",
"這台電腦目前很安全":"This computer is currently safe",
"✖錯誤: 執行失敗。":"✖Error: Execution failed.",
" > [病毒掃描] 掃描出":" > [Virus Scan] scan out ",
"個病毒":" Virus",
"這台電腦目前不安全":"This computer is currently unsafe",
"✖當前已發現惡意軟體共{}項。":"✖A total of {} items of malware have been found so far.",
'✔當前未發現惡意軟體。':'✔ No malware currently found.',
'正在掃描:':'Scanning:',
"病毒掃描":"Virus scan",
"正在初始化中,請稍後...":"Initializing, please wait...",
"✖當前已發現惡意軟體。":"✖Malware has currently been detected.",
"✖掃描失敗。":"✖Scan failed.",
"請選擇掃描方式":"Please select a scan method",
"您確定要修復系統權限嗎?":"Are you sure you want to fix system permissions?",
"修復完成!":"Repair complete!",
"完成":'Finish',
"您確定要修復系統檔案嗎?":"Are you sure you want to repair the system files?",
"修復系統檔案":'Repair System Files',
"錯誤":"error",
"修復失敗":"Repair failed",
'清理系統檔案':'Clean up system files',
"您確定要清理系統檔案嗎?":"Are you sure you want to clean the system files?",
"清理完成":"Cleanup complete",
"清理失敗":"Cleanup failed",
"啟用安全模式":"Enable safe mode",
"您確定啟用安全模式嗎?":"Are you sure you enable safe mode?",
"使用該選項後需要重啟,現在要重啟嗎?":"A reboot is required after using this option, do you want to reboot now?",
"啟用失敗":"Enable failed",
'禁用安全模式':'Disable safe mode',
"您確定禁用安全模式嗎?":"Are you sure you want to disable Safe Mode?",
"禁用失敗":"Disable failed",
"刪除檔案":"Delete file",
"您確定刪除該檔案嗎?":"Are you sure you want to delete this file?",
"刪除成功":"Successfully deleted",
"刪除失敗":"Failed to delete",
"運行成功":"Run successfully",
"不是有效命令":"Not a valid command",
"您輸入了錯誤的HEKY":"You entered the wrong HEKY",
"警告":"Warning",
"成功的創建或修改註冊表值":"Successfully created or modified registry value",
"分析文件函數":"Analyze File Func",
"分析文件哈希值":"Analyze File Hashes",
"分析文件位元":"Analyze File Bits",
'尋找結果:':'Find result:',
'正在尋找:':'Searching:',
'找到檔案:':'File found:',
'創建日期:':'Created Date:',
"您確定要修改用戶密碼嗎?":"Are you sure you want to change the user password?",
"IP查詢":"IP query",
"您的ip地址為:{}":"Your ip address is: {}",
"您確定要重置網路配置嗎?":"Are you sure you want to reset the network configuration?",
"重置網路配置成功":"Reset network configuration successful",
"設定":"Setting",
"關於":"About",
"結束進程":"End process",
"啟用該選項可以實時監控進程中的惡意軟體並清除。":"Enable this option to monitor and remove malware in the system in real time.",
"启用该选项可以实时监控进程中的恶意软件并清除。":"Enable this option to monitor and remove malware in the system in real time.",
"啟用該選項可以提高掃描靈敏度,但這也可能會造成誤殺。":"Enable this option can improve scanning sensitivity, but it can also cause manslaughter.",
"启用该选项可以提高扫描灵敏度,但这也可能会造成误杀。":"Enable this option can improve scanning sensitivity, but it can also cause manslaughter.",
'{} > [實時防護] 成功攔截了一個惡意軟體:':'{} > [Real-Time Protect] Successfully blocked a malware:',
'{} > [實時防護] 惡意軟體攔截失敗:':'{} > [Real-Time Protect] Malware blocking failed:',
'修復系統權限':"Repair System Permissions",
'啟用該選項可以實時監控系統的檔案讀寫變更行為。':"Enable this option can improve scanning sensitivity, but it can also cause manslaughter.",
"never gonna give you up":"""We are no strangers to love
You know the rules and so do I
A full commitment′s what I am thinking of
You wouldn′t get this from any other guy
I just want to tell you how I am feeling
Gotta make you understand
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you
We′ve known each other for so long
Your heart′s been aching but You are too shy to say it
Inside we both know what′s been going on
We know the game and We are gonna play it
And if you ask me how I am feeling
Don′t tell me You are too blind to see
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you
Ooh give you up
Ooh give you up
Never gonna give never gonna give give you up
Never gonna give never gonna give give you up
We′ve known each other for so long
Your heart′s been aching but You are too shy to say it
Inside we both know what′s been going on
We know the game and We are gonna play it
I just want to tell you how I am feeling
Gotta make you understand
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you
Never gonna give you up never gonna let you down
Never gonna run around and desert you
Never gonna make you cry never gonna say goodbye
Never gonna tell a lie and hurt you""",
}
+1576
View File
File diff suppressed because it is too large. Load diff
-5137
View File
File diff suppressed because it is too large. Load diff
+14520
View File
File diff suppressed because it is too large. Load diff
-2930
View File
File diff suppressed because it is too large. Load diff
-4109
View File
File diff suppressed because it is too large. Load diff
+11
View File
@@ -0,0 +1,11 @@
import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='3.3.7',
company_name="PYAS Security",
file_description="Python Antivirus Software",
internal_name="PYAS",
legal_copyright="PYAS Security",
original_filename="PYAS.exe",
product_name="PYAS")
+265
View File
@@ -0,0 +1,265 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectRules.h"
LARGE_INTEGER g_CmRegHandle;
PDEVICE_OBJECT g_ControlDeviceObject;
KSPIN_LOCK g_ProtectLock;
FAST_MUTEX HookMutex;
PDRIVER_OBJECT DiskDrvObj = NULL;
KEVENT g_LogDrainEvent;
BOOLEAN g_Unloading = FALSE;
BOOLEAN g_CmRegActive = FALSE;
EX_RUNDOWN_REF g_Rundown;
PDEVICE_OBJECT g_GuardDevice = NULL;
PDRIVER_OBJECT g_DriverObject = NULL;
PDEVICE_OBJECT g_MbrFilterTargets[MAX_MBR_TARGETS] = { 0 };
ULONG g_MbrFilterCount = 0;
volatile LONG g_LogWorkCount = 0;
static UNICODE_STRING g_DeviceName;
static WCHAR g_DeviceNameBuf[64];
static UNICODE_STRING g_SymLink = RTL_CONSTANT_STRING(L"\\??\\PYAS_Driver");
static BOOLEAN g_SymLinkCreated = FALSE;
static NTSTATUS CombinedDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
if (DeviceObject == g_ControlDeviceObject) {
PIO_STACK_LOCATION s = IoGetCurrentIrpStackLocation(Irp);
if (s->MajorFunction == IRP_MJ_CREATE || s->MajorFunction == IRP_MJ_CLOSE || s->MajorFunction == IRP_MJ_CLEANUP) {
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
}
PIO_STACK_LOCATION s = IoGetCurrentIrpStackLocation(Irp);
if (s->MajorFunction == IRP_MJ_PNP) {
PDEVICE_OBJECT lower = (PDEVICE_OBJECT)DeviceObject->DeviceExtension;
if (s->MinorFunction == IRP_MN_REMOVE_DEVICE) {
NTSTATUS st;
IoSkipCurrentIrpStackLocation(Irp);
st = lower ? IoCallDriver(lower, Irp) : STATUS_SUCCESS;
if (lower) IoDetachDevice(lower);
IoDeleteDevice(DeviceObject);
return st;
}
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver((PDEVICE_OBJECT)DeviceObject->DeviceExtension, Irp);
}
return BootProtectDispatch(DeviceObject, Irp);
}
static NTSTATUS AttachDiskFilters(PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING name = RTL_CONSTANT_STRING(L"\\Driver\\Disk");
UNICODE_STRING sym = RTL_CONSTANT_STRING(L"IoDriverObjectType");
POBJECT_TYPE* pType = (POBJECT_TYPE*)MmGetSystemRoutineAddress(&sym);
if (!pType || !*pType)
return STATUS_NOT_SUPPORTED;
NTSTATUS status = ObReferenceObjectByName(&name, OBJ_CASE_INSENSITIVE, NULL, 0, *pType, KernelMode, NULL, (PVOID*)&DiskDrvObj);
if (!NT_SUCCESS(status))
return status;
ULONG done = 0;
status = IoEnumerateDeviceObjectList(DiskDrvObj, NULL, 0, &done);
if (status != STATUS_BUFFER_TOO_SMALL && status != STATUS_SUCCESS) {
ObDereferenceObject(DiskDrvObj);
DiskDrvObj = NULL;
return status;
}
PDEVICE_OBJECT* list = ExAllocatePool2(POOL_FLAG_NON_PAGED, done * sizeof(PDEVICE_OBJECT), 'dskT');
if (!list) {
ObDereferenceObject(DiskDrvObj);
DiskDrvObj = NULL;
return STATUS_INSUFFICIENT_RESOURCES;
}
status = IoEnumerateDeviceObjectList(DiskDrvObj, list, done * sizeof(PDEVICE_OBJECT), &done);
if (!NT_SUCCESS(status)) {
ExFreePool2(list, 'dskT', NULL, 0);
ObDereferenceObject(DiskDrvObj);
DiskDrvObj = NULL;
return status;
}
for (ULONG i = 0; i < done && g_MbrFilterCount < MAX_MBR_TARGETS; ++i) {
PDEVICE_OBJECT lower = list[i], filter, attached = NULL;
status = IoCreateDevice(DriverObject, 0, NULL, lower->DeviceType, lower->Characteristics, FALSE, &filter);
if (!NT_SUCCESS(status))
continue;
filter->Flags |= (lower->Flags & (DO_BUFFERED_IO | DO_DIRECT_IO | DO_POWER_PAGABLE));
status = IoAttachDeviceToDeviceStackSafe(filter, lower, &attached);
if (!NT_SUCCESS(status) || !attached) {
IoDeleteDevice(filter);
continue;
}
filter->StackSize = lower->StackSize + 1;
filter->AlignmentRequirement = lower->AlignmentRequirement;
filter->DeviceExtension = attached;
filter->Flags &= ~DO_DEVICE_INITIALIZING;
g_MbrFilterTargets[g_MbrFilterCount++] = filter;
}
for (ULONG i = 0; i < done; ++i)
ObDereferenceObject(list[i]);
ExFreePool2(list, 'dskT', NULL, 0);
return STATUS_SUCCESS;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(RegistryPath);
g_DriverObject = DriverObject;
KeInitializeSpinLock(&g_ProtectLock);
ExInitializeFastMutex(&HookMutex);
KeInitializeEvent(&g_LogDrainEvent, NotificationEvent, TRUE);
g_Unloading = FALSE;
g_CmRegActive = FALSE;
InterlockedExchange(&g_LogWorkCount, 0);
ExInitializeRundownProtection(&g_Rundown);
{
UNICODE_STRING guardName = RTL_CONSTANT_STRING(L"\\Device\\PYAS_Driver_Guard");
NTSTATUS gs = IoCreateDevice(DriverObject, 0, &guardName, FILE_DEVICE_UNKNOWN, 0, FALSE, &g_GuardDevice);
if (!NT_SUCCESS(gs))
return STATUS_DEVICE_BUSY;
}
{
LARGE_INTEGER t = KeQueryPerformanceCounter(NULL);
g_DeviceName.Buffer = g_DeviceNameBuf;
g_DeviceName.MaximumLength = sizeof(g_DeviceNameBuf);
RtlStringCchPrintfW(g_DeviceName.Buffer, RTL_NUMBER_OF(g_DeviceNameBuf), L"\\Device\\PYAS_Driver_%p_%I64x", DriverObject, t.QuadPart);
g_DeviceName.Length = (USHORT)(wcslen(g_DeviceName.Buffer) * sizeof(WCHAR));
}
NTSTATUS status = IoCreateDevice(DriverObject, 0, &g_DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &g_ControlDeviceObject);
if (!NT_SUCCESS(status))
return status;
DriverObject->DriverUnload = DriverUnload;
for (ULONG i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; ++i)
DriverObject->MajorFunction[i] = CombinedDispatch;
DriverObject->Flags |= 0x20;
g_ControlDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
IoDeleteSymbolicLink(&g_SymLink);
{
UINT i = 0;
for (; i < 50; ++i) {
status = IoCreateSymbolicLink(&g_SymLink, &g_DeviceName);
if (NT_SUCCESS(status))
break;
LARGE_INTEGER d = { 0 };
d.QuadPart = -10LL * 1000LL * 10LL;
KeDelayExecutionThread(KernelMode, FALSE, &d);
IoDeleteSymbolicLink(&g_SymLink);
}
if (!NT_SUCCESS(status)) {
IoDeleteDevice(g_ControlDeviceObject);
g_ControlDeviceObject = NULL;
if (g_GuardDevice) { IoDeleteDevice(g_GuardDevice); g_GuardDevice = NULL; }
return status;
}
}
g_SymLinkCreated = TRUE;
{
static WCHAR regAltBuf[32];
static UNICODE_STRING regAlt;
LARGE_INTEGER t = KeQueryPerformanceCounter(NULL);
RtlStringCchPrintfW(regAltBuf, RTL_NUMBER_OF(regAltBuf), L"385100.%I64x", t.QuadPart);
RtlInitUnicodeString(&regAlt, regAltBuf);
status = CmRegisterCallbackEx(RegistryProtectCallback, &regAlt, DriverObject, NULL, &g_CmRegHandle, NULL);
if (NT_SUCCESS(status))
g_CmRegActive = TRUE;
}
InitImageProtect();
InitInjectProtect();
InitRemoteProtect();
InitScreenProtect();
InitProcessProtect();
InitFileProtect();
AttachDiskFilters(DriverObject);
return STATUS_SUCCESS;
}
VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{
UNREFERENCED_PARAMETER(DriverObject);
g_Unloading = TRUE;
if (g_SymLinkCreated) {
IoDeleteSymbolicLink(&g_SymLink);
g_SymLinkCreated = FALSE;
}
if (g_CmRegActive) {
CmUnRegisterCallback(g_CmRegHandle);
g_CmRegActive = FALSE;
}
UninitFileProtect();
UninitInjectProtect();
UninitImageProtect();
UninitRemoteProtect();
UninitScreenProtect();
UninitProcessProtect();
ExWaitForRundownProtectionRelease(&g_Rundown);
if (InterlockedCompareExchange((volatile LONG*)&g_LogWorkCount, 0, 0) != 0) {
KeWaitForSingleObject(&g_LogDrainEvent, Executive, KernelMode, FALSE, NULL);
}
if (InterlockedCompareExchange(&g_LogWorkCount, 0, 0) != 0) {
KeResetEvent(&g_LogDrainEvent);
while (InterlockedCompareExchange(&g_LogWorkCount, 0, 0) != 0)
KeWaitForSingleObject(&g_LogDrainEvent, Executive, KernelMode, FALSE, NULL);
}
for (ULONG i = 0; i < g_MbrFilterCount; ++i) {
if (g_MbrFilterTargets[i]) {
IoDetachDevice((PDEVICE_OBJECT)g_MbrFilterTargets[i]->DeviceExtension);
IoDeleteDevice(g_MbrFilterTargets[i]);
g_MbrFilterTargets[i] = NULL;
}
}
g_MbrFilterCount = 0;
if (DiskDrvObj) {
ObDereferenceObject(DiskDrvObj);
DiskDrvObj = NULL;
}
if (g_ControlDeviceObject) {
IoDeleteDevice(g_ControlDeviceObject);
g_ControlDeviceObject = NULL;
}
if (g_GuardDevice) {
IoDeleteDevice(g_GuardDevice);
g_GuardDevice = NULL;
}
}
+187
View File
@@ -0,0 +1,187 @@
#pragma once
#include <ntifs.h>
#include <ntstrsafe.h>
#include <ntdddisk.h>
#include <ntddscsi.h>
#include <fltKernel.h>
#define PIPE_NAME L"\\??\\pipe\\PYAS_Output_Pipe"
#ifndef POOL_FLAG_NON_PAGED
#define POOL_FLAG_NON_PAGED 0x00000001
#endif
#ifndef PROCESS_TERMINATE
#define PROCESS_TERMINATE 0x0001
#endif
#ifndef PROCESS_CREATE_THREAD
#define PROCESS_CREATE_THREAD 0x0002
#endif
#ifndef PROCESS_VM_OPERATION
#define PROCESS_VM_OPERATION 0x0008
#endif
#ifndef PROCESS_VM_WRITE
#define PROCESS_VM_WRITE 0x0020
#endif
#ifndef PROCESS_VM_READ
#define PROCESS_VM_READ 0x0010
#endif
#ifndef PROCESS_DUP_HANDLE
#define PROCESS_DUP_HANDLE 0x0040
#endif
#ifndef PROCESS_CREATE_PROCESS
#define PROCESS_CREATE_PROCESS 0x0080
#endif
#ifndef PROCESS_SET_QUOTA
#define PROCESS_SET_QUota 0x0100
#endif
#ifndef PROCESS_SET_INFORMATION
#define PROCESS_SET_INFORMATION 0x0200
#endif
#ifndef PROCESS_SUSPEND_RESUME
#define PROCESS_SUSPEND_RESUME 0x0800
#endif
#ifndef PROCESS_QUERY_LIMITED_INFORMATION
#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
#endif
#ifndef PROCESS_SET_LIMITED_INFORMATION
#define PROCESS_SET_LIMITED_INFORMATION 0x2000
#endif
#ifndef THREAD_TERMINATE
#define THREAD_TERMINATE 0x0001
#endif
#ifndef THREAD_SUSPEND_RESUME
#define THREAD_SUSPEND_RESUME 0x0002
#endif
#ifndef THREAD_SET_CONTEXT
#define THREAD_SET_CONTEXT 0x0010
#endif
#ifndef THREAD_IMPERSONATE
#define THREAD_IMPERSONATE 0x0100
#endif
#ifndef THREAD_DIRECT_IMPERSONATION
#define THREAD_DIRECT_IMPERSONATION 0x0200
#endif
#ifndef JOB_OBJECT_ASSIGN_PROCESS
#define JOB_OBJECT_ASSIGN_PROCESS 0x0001
#endif
#ifndef JOB_OBJECT_TERMINATE
#define JOB_OBJECT_TERMINATE 0x0008
#endif
#ifndef FILE_DISPOSITION_DELETE
#define FILE_DISPOSITION_DELETE 0x00000001
#endif
#ifndef UINT
typedef unsigned int UINT;
#endif
#define MAX_MBR_TARGETS 64
extern POBJECT_TYPE* PsJobType;
extern volatile LONG g_LogWorkCount;
extern BOOLEAN g_Unloading;
extern KEVENT g_LogDrainEvent;
extern KSPIN_LOCK g_ProtectLock;
extern LARGE_INTEGER g_CmRegHandle;
extern POBJECT_TYPE* IoDriverObjectType;
extern POBJECT_TYPE* IoFileObjectType;
extern FAST_MUTEX HookMutex;
extern EX_RUNDOWN_REF g_Rundown;
extern PDEVICE_OBJECT g_GuardDevice;
extern PDRIVER_OBJECT g_DriverObject;
extern PFLT_FILTER g_FilterHandle;
NTSYSAPI PCSTR NTAPI PsGetProcessImageFileName(PEPROCESS Process);
typedef PVOID(NTAPI* _pyas_ExAllocatePool2)(ULONG, SIZE_T, ULONG);
typedef VOID(NTAPI* _pyas_ExFreePool2)(PVOID, ULONG, PVOID, ULONG);
typedef PVOID(NTAPI* _pyas_ExAllocatePoolWithTag)(POOL_TYPE, SIZE_T, ULONG);
typedef VOID(NTAPI* _pyas_ExFreePoolWithTag)(PVOID, ULONG);
static __forceinline PVOID PYAS_ExAllocatePool2(ULONG f, SIZE_T s, ULONG t) {
static _pyas_ExAllocatePool2 p2 = 0;
if (!p2) {
UNICODE_STRING n = RTL_CONSTANT_STRING(L"ExAllocatePool2");
p2 = (_pyas_ExAllocatePool2)MmGetSystemRoutineAddress(&n);
}
if (p2)
return p2(f, s, t);
static _pyas_ExAllocatePoolWithTag p1 = 0;
if (!p1) {
UNICODE_STRING n = RTL_CONSTANT_STRING(L"ExAllocatePoolWithTag");
p1 = (_pyas_ExAllocatePoolWithTag)MmGetSystemRoutineAddress(&n);
}
if (p1)
return p1((f & POOL_FLAG_NON_PAGED) ? NonPagedPoolNx : PagedPool, s, t);
return NULL;
}
static __forceinline VOID PYAS_ExFreePool2(PVOID a, ULONG t, PVOID h, ULONG f) {
UNREFERENCED_PARAMETER(h);
UNREFERENCED_PARAMETER(f);
static _pyas_ExFreePool2 p2 = 0;
if (!p2) {
UNICODE_STRING n = RTL_CONSTANT_STRING(L"ExFreePool2");
p2 = (_pyas_ExFreePool2)MmGetSystemRoutineAddress(&n);
}
if (p2) {
p2(a, t, h, f);
return;
}
static _pyas_ExFreePoolWithTag p1 = 0;
if (!p1) {
UNICODE_STRING n = RTL_CONSTANT_STRING(L"ExFreePoolWithTag");
p1 = (_pyas_ExFreePoolWithTag)MmGetSystemRoutineAddress(&n);
}
if (p1) {
p1(a, t);
return;
}
}
#define ExAllocatePool2 PYAS_ExAllocatePool2
#define ExFreePool2 PYAS_ExFreePool2
VOID DriverUnload(PDRIVER_OBJECT DriverObject);
VOID SendPipeLog(PCSTR msg, SIZE_T len);
VOID UninitImageProtect(VOID);
VOID UninitInjectProtect(VOID);
VOID UninitRemoteProtect(VOID);
VOID UninitScreenProtect(VOID);
VOID UninitProcessProtect(VOID);
VOID UninitFileProtect(VOID);
VOID LogAnsi3(PCSTR tag, ULONG upid, PUNICODE_STRING s1, PUNICODE_STRING s2);
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationProcess(
_In_ HANDLE ProcessHandle,
_In_ PROCESSINFOCLASS ProcessInformationClass,
_Out_writes_bytes_opt_(ProcessInformationLength) PVOID ProcessInformation,
_In_ ULONG ProcessInformationLength,
_Out_opt_ PULONG ReturnLength
);
NTSTATUS ObReferenceObjectByName(
IN PUNICODE_STRING ObjectName,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID* Object
);
NTSTATUS BootProtectDispatch(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
);
NTSTATUS RegistryProtectCallback(PVOID ctx, PVOID arg1, PVOID arg2);
NTSTATUS InitImageProtect(VOID);
NTSTATUS InitInjectProtect(VOID);
NTSTATUS InitRemoteProtect(VOID);
NTSTATUS InitScreenProtect(VOID);
NTSTATUS InitProcessProtect(VOID);
NTSTATUS InitFileProtect(VOID);
BOOLEAN GetProcessImagePathByPid(HANDLE pid, PUNICODE_STRING ProcessImagePath);
+80
View File
@@ -0,0 +1,80 @@
#include <ntifs.h>
#include <ntstrsafe.h>
#include "DriverEntry.h"
extern PDEVICE_OBJECT g_ControlDeviceObject;
typedef struct _PIPE_LOG_CTX {
PIO_WORKITEM Item;
SIZE_T Len;
PCHAR Buf;
}PIPE_LOG_CTX, * PPIPE_LOG_CTX;
static VOID PipeLogWork(PDEVICE_OBJECT DeviceObject, PVOID Context)
{
UNREFERENCED_PARAMETER(DeviceObject);
PPIPE_LOG_CTX ctx = (PPIPE_LOG_CTX)Context;
HANDLE h = NULL;
UNICODE_STRING name;
OBJECT_ATTRIBUTES oa = { 0 };
IO_STATUS_BLOCK iosb;
RtlInitUnicodeString(&name, PIPE_NAME);
InitializeObjectAttributes(&oa, &name, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
if (NT_SUCCESS(ZwCreateFile(&h, FILE_GENERIC_WRITE, &oa, &iosb, NULL, 0, 0, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0))) {
ZwWriteFile(h, NULL, NULL, NULL, &iosb, ctx->Buf, (ULONG)(ctx->Len > 0xFFFFFFFF ? 0xFFFFFFFF : ctx->Len), NULL, NULL);
ZwClose(h);
}
IoFreeWorkItem(ctx->Item);
ExFreePool2(ctx->Buf, 'golP', NULL, 0);
ExFreePool2(ctx, 'golP', NULL, 0);
if (InterlockedDecrement(&g_LogWorkCount) == 0) {
KeSetEvent(&g_LogDrainEvent, IO_NO_INCREMENT, FALSE);
}
}
VOID SendPipeLog(PCSTR msg, SIZE_T len)
{
if (!msg || len == 0)
return;
if (!g_ControlDeviceObject)
return;
if (g_Unloading)
return;
PPIPE_LOG_CTX ctx = (PPIPE_LOG_CTX)ExAllocatePool2(POOL_FLAG_NON_PAGED, sizeof(PIPE_LOG_CTX), 'golP');
if (!ctx)
return;
ctx->Len = len;
ctx->Buf = (PCHAR)ExAllocatePool2(POOL_FLAG_NON_PAGED, ctx->Len, 'golP');
if (!ctx->Buf) {
ExFreePool2(ctx, 'golP', NULL, 0);
return;
}
RtlCopyMemory(ctx->Buf, msg, ctx->Len);
ctx->Item = IoAllocateWorkItem(g_ControlDeviceObject);
if (!ctx->Item) {
ExFreePool2(ctx->Buf, 'golP', NULL, 0);
ExFreePool2(ctx, 'golP', NULL, 0);
return;
}
InterlockedIncrement(&g_LogWorkCount);
IoQueueWorkItem(ctx->Item, PipeLogWork, DelayedWorkQueue, ctx);
}
VOID LogAnsi3(PCSTR tag, ULONG upid, PUNICODE_STRING s1, PUNICODE_STRING s2)
{
ANSI_STRING a1 = { 0 }, a2 = { 0 };
CHAR buf[1024] = { 0 };
if (s1)
RtlUnicodeStringToAnsiString(&a1, s1, TRUE);
if (s2)
RtlUnicodeStringToAnsiString(&a2, s2, TRUE);
RtlStringCchPrintfA(buf, RTL_NUMBER_OF(buf), "%s | %u | %s | %s", tag, upid, a1.Buffer ? a1.Buffer : "", a2.Buffer ? a2.Buffer : "");
SendPipeLog(buf, strlen(buf));
RtlFreeAnsiString(&a1);
RtlFreeAnsiString(&a2);
}
+27
View File
@@ -0,0 +1,27 @@
[Version]
Signature = "$WINDOWS NT$"
Class = System
ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318}
Provider = %ManufacturerName%
CatalogFile = PYAS_Driver.cat
PnpLockdown = 1
DriverVer =
[DestinationDirs]
DefaultDestDir = 13
[DefaultInstall.ntamd64]
CopyFiles = @PYAS_Driver.sys
AddService = PYAS_Driver,0x00000002
[SourceDisksFiles]
PYAS_Driver.sys = 1
[SourceDisksNames]
1 = %DiskName%,,,""
[Strings]
ManufacturerName = "PYAS_Driver"
DiskName = "PYAS_Driver"
ServiceName="PYAS_Driver"
ServiceDisplayName="PYAS_Driver"
+175
View File
@@ -0,0 +1,175 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
#define PROTECTED_BOOT_AREA_SIZE (34 * 512)
static VOID GetExeNameForLog(HANDLE pid, PUNICODE_STRING exe)
{
if (!exe || !exe->Buffer || exe->MaximumLength == 0)
return;
exe->Length = 0;
if (KeGetCurrentIrql() == PASSIVE_LEVEL) {
if (GetProcessImagePathByPid(pid, exe))
return;
}
PEPROCESS eproc = PsGetCurrentProcess();
PCSTR n = PsGetProcessImageFileName(eproc);
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < (exe->MaximumLength / sizeof(WCHAR)) - 1; i++)
exe->Buffer[i] = (WCHAR)n[i];
exe->Buffer[l] = 0;
exe->Length = (USHORT)(l * sizeof(WCHAR));
}
static BOOLEAN QueryDevName(PDEVICE_OBJECT dev, PUNICODE_STRING out)
{
if (KeGetCurrentIrql() > APC_LEVEL)
return FALSE;
if (!dev || !out || !out->Buffer || out->MaximumLength == 0)
return FALSE;
ULONG need = 0;
NTSTATUS s = ObQueryNameString(dev, NULL, 0, &need);
if (s != STATUS_INFO_LENGTH_MISMATCH || need == 0)
return FALSE;
POBJECT_NAME_INFORMATION oni = (POBJECT_NAME_INFORMATION)ExAllocatePool2(POOL_FLAG_NON_PAGED, need, 'nOmD');
if (!oni)
return FALSE;
BOOLEAN ok = FALSE;
s = ObQueryNameString(dev, oni, need, &need);
if (NT_SUCCESS(s) && oni->Name.Buffer && oni->Name.Length && oni->Name.Length < out->MaximumLength) {
RtlCopyMemory(out->Buffer, oni->Name.Buffer, oni->Name.Length);
out->Length = (USHORT)oni->Name.Length;
out->Buffer[out->Length / sizeof(WCHAR)] = 0;
ok = TRUE;
}
ExFreePool2(oni, 'nOmD', NULL, 0);
return ok;
}
static BOOLEAN IsDangerousDiskIo(PIO_STACK_LOCATION s)
{
if (!s) return FALSE;
if (s->MajorFunction == IRP_MJ_DEVICE_CONTROL || s->MajorFunction == IRP_MJ_INTERNAL_DEVICE_CONTROL) {
ULONG code = s->Parameters.DeviceIoControl.IoControlCode;
if (code == IOCTL_DISK_SET_DRIVE_LAYOUT || code == IOCTL_DISK_SET_DRIVE_LAYOUT_EX) return TRUE;
if (code == IOCTL_DISK_DELETE_DRIVE_LAYOUT) return TRUE;
if (code == IOCTL_DISK_FORMAT_TRACKS || code == IOCTL_DISK_FORMAT_TRACKS_EX) return TRUE;
if (code == IOCTL_DISK_SET_PARTITION_INFO || code == IOCTL_DISK_SET_PARTITION_INFO_EX) return TRUE;
if (code == IOCTL_SCSI_PASS_THROUGH || code == IOCTL_SCSI_PASS_THROUGH_DIRECT) return TRUE;
}
return FALSE;
}
static BOOLEAN IsBootSectorWrite(PIO_STACK_LOCATION s)
{
if (s->MajorFunction == IRP_MJ_WRITE) {
LARGE_INTEGER offset = s->Parameters.Write.ByteOffset;
if (offset.QuadPart < PROTECTED_BOOT_AREA_SIZE) {
return TRUE;
}
}
return FALSE;
}
NTSTATUS BootProtectDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PDEVICE_OBJECT lower = (PDEVICE_OBJECT)DeviceObject->DeviceExtension;
if (!lower) {
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
}
if (!ExAcquireRundownProtection(&g_Rundown)) {
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(lower, Irp);
}
if (g_Unloading) {
IoSkipCurrentIrpStackLocation(Irp);
NTSTATUS rs = IoCallDriver(lower, Irp);
ExReleaseRundownProtection(&g_Rundown);
return rs;
}
PIO_STACK_LOCATION s = IoGetCurrentIrpStackLocation(Irp);
if (s->MajorFunction == IRP_MJ_POWER) {
PoStartNextPowerIrp(Irp);
IoSkipCurrentIrpStackLocation(Irp);
NTSTATUS ps = PoCallDriver(lower, Irp);
ExReleaseRundownProtection(&g_Rundown);
return ps;
}
HANDLE pid = PsGetCurrentProcessId();
ULONG upid = (ULONG)(ULONG_PTR)pid;
if (upid == 0 || upid == 4) {
IoSkipCurrentIrpStackLocation(Irp);
NTSTATUS ns = IoCallDriver(lower, Irp);
ExReleaseRundownProtection(&g_Rundown);
return ns;
}
BOOLEAN blocked = FALSE;
WCHAR eb[512] = { 0 };
UNICODE_STRING exe = { 0 };
exe.Buffer = eb;
exe.MaximumLength = sizeof(eb);
if (KeGetCurrentIrql() == PASSIVE_LEVEL) {
GetExeNameForLog(pid, &exe);
if (IsWhitelist(&exe)) {
IoSkipCurrentIrpStackLocation(Irp);
NTSTATUS ns2 = IoCallDriver(lower, Irp);
ExReleaseRundownProtection(&g_Rundown);
return ns2;
}
}
if (lower->DeviceType == FILE_DEVICE_DISK) {
if (IsDangerousDiskIo(s)) {
blocked = TRUE;
}
if (!blocked && IsBootSectorWrite(s)) {
blocked = TRUE;
}
if (blocked) {
if (KeGetCurrentIrql() <= APC_LEVEL) {
WCHAR db[512] = { 0 };
UNICODE_STRING dev = { 0 };
dev.Buffer = db;
dev.MaximumLength = sizeof(db);
QueryDevName(lower, &dev);
LogAnsi3("BOOT_BLOCK", upid, &exe, dev.Length ? &dev : &exe);
}
}
}
if (blocked) {
Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
ExReleaseRundownProtection(&g_Rundown);
return STATUS_ACCESS_DENIED;
}
IoSkipCurrentIrpStackLocation(Irp);
NTSTATUS rs2 = IoCallDriver(lower, Irp);
ExReleaseRundownProtection(&g_Rundown);
return rs2;
}
+322
View File
@@ -0,0 +1,322 @@
#include <ntifs.h>
#include <fltKernel.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
#pragma comment(lib, "FltMgr.lib")
PFLT_FILTER g_FilterHandle = NULL;
extern PDRIVER_OBJECT g_DriverObject;
EX_RUNDOWN_REF g_Rundown;
// 定義標誌以便在不同 IRQL 下安全操作
#define MAX_PATH_LEN 512
// 獲取進程名稱 (僅在確定需要攔截時調用,減少性能開銷)
static VOID GetExeNameSafe(HANDLE pid, PUNICODE_STRING exe)
{
if (!exe || !exe->Buffer || !exe->MaximumLength)
return;
exe->Length = 0;
// 嘗試獲取短名稱 (最安全)
PEPROCESS cur = PsGetCurrentProcess();
PCSTR n = NULL;
if (cur) n = PsGetProcessImageFileName(cur);
// 如果在 PASSIVE_LEVEL,嘗試獲取完整路徑 (用於精確白名單)
// 注意:這裡依然有風險,但僅在攔截路徑執行
if (KeGetCurrentIrql() == PASSIVE_LEVEL) {
if (GetProcessImagePathByPid(pid, exe)) {
return;
}
}
// 降級方案:使用短名稱
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < (exe->MaximumLength / sizeof(WCHAR)) - 1; i++)
exe->Buffer[i] = (WCHAR)n[i];
exe->Buffer[l] = 0;
exe->Length = (USHORT)(l * sizeof(WCHAR));
}
static BOOLEAN PreOpCheck(VOID)
{
if (g_Unloading)
return FALSE;
if (!ExAcquireRundownProtection(&g_Rundown))
return FALSE;
return TRUE;
}
static VOID PostOpRelease(VOID)
{
ExReleaseRundownProtection(&g_Rundown);
}
static BOOLEAN IsDeleteOrRename(PFLT_CALLBACK_DATA Data)
{
FILE_INFORMATION_CLASS infoClass = Data->Iopb->Parameters.SetFileInformation.FileInformationClass;
if (infoClass == FileDispositionInformation) {
PFILE_DISPOSITION_INFORMATION di = (PFILE_DISPOSITION_INFORMATION)Data->Iopb->Parameters.SetFileInformation.InfoBuffer;
return di && di->DeleteFile;
}
if (infoClass == FileDispositionInformationEx) {
PFILE_DISPOSITION_INFORMATION_EX dx = (PFILE_DISPOSITION_INFORMATION_EX)Data->Iopb->Parameters.SetFileInformation.InfoBuffer;
return dx && (dx->Flags & FILE_DISPOSITION_DELETE);
}
if (infoClass == FileRenameInformation || infoClass == FileRenameInformationEx)
return TRUE;
return FALSE;
}
static BOOLEAN IsWriteAccess(PFLT_CALLBACK_DATA Data)
{
// 如果是寫入操作,直接返回
if (Data->Iopb->MajorFunction == IRP_MJ_WRITE)
return TRUE;
// 如果是設置信息 (已經通過 IsDeleteOrRename 過濾),視為寫入(修改元數據)
if (Data->Iopb->MajorFunction == IRP_MJ_SET_INFORMATION)
return TRUE;
// 如果是創建/打開文件,檢查權限
if (Data->Iopb->MajorFunction == IRP_MJ_CREATE) {
ULONG access = Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess;
// 檢查是否包含寫入數據、追加數據、刪除、修改屬性等權限
if (access & (FILE_WRITE_DATA | FILE_APPEND_DATA | DELETE |
WRITE_DAC | WRITE_OWNER | GENERIC_WRITE | GENERIC_ALL)) {
return TRUE;
}
}
return FALSE;
}
static FLT_PREOP_CALLBACK_STATUS FilePreOp(
_Inout_ PFLT_CALLBACK_DATA Data,
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_Flt_CompletionContext_Outptr_ PVOID* CompletionContext
)
{
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(CompletionContext);
// 1. 基礎檢查 (Paging IO 不攔截)
if (FlagOn(Data->Iopb->IrpFlags, IRP_PAGING_IO)) {
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
if (!PreOpCheck())
return FLT_PREOP_SUCCESS_NO_CALLBACK;
// 2. 獲取 PID
HANDLE pid = PsGetCurrentProcessId();
ULONG upid = (ULONG)(ULONG_PTR)pid;
// 忽略 System (4) 和 Idle (0) 進程,避免系統崩潰
if (upid == 0 || upid == 4) {
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// 3. 檢查操作類型 (僅關心 Create, Write, SetInfo)
BOOLEAN checkFile = (Data->Iopb->MajorFunction == IRP_MJ_CREATE || Data->Iopb->MajorFunction == IRP_MJ_WRITE);
BOOLEAN checkSetInfo = (Data->Iopb->MajorFunction == IRP_MJ_SET_INFORMATION);
if (!checkFile && !checkSetInfo) {
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
if (checkSetInfo && !IsDeleteOrRename(Data)) {
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// 4. 獲取文件名 (這一步最關鍵)
PFLT_FILE_NAME_INFORMATION nameInfo = NULL;
// 使用 QUERY_DEFAULT | NORMALIZED 確保獲取標準化路徑
NTSTATUS status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &nameInfo);
if (!NT_SUCCESS(status)) {
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
status = FltParseFileNameInformation(nameInfo);
if (!NT_SUCCESS(status)) {
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// 5. 邏輯判斷 (優化順序:文件名白名單 -> 黑名單 -> 操作檢查 -> 進程白名單)
// A. 全局文件白名單 (例如 Windows 目錄下的某些操作)
if (IsWhitelist(&nameInfo->Name)) {
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// B. 黑名單匹配
BOOLEAN hitFile = MatchBlockFile(&nameInfo->Name);
// 勒索防護:必須在敏感目錄 且 有敏感後綴 (如 .txt, .doc)
// 註:Updater.bat 產生 .txt,應命中這裡
BOOLEAN hitRansom = MatchBlockRansom(&nameInfo->Name) && HasBlockedSuffix(&nameInfo->Name);
// 如果沒有命中任何規則,直接放行,節省資源
if (!hitFile && !hitRansom) {
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// C. 檢查是否為寫入行為 (讀取不攔截)
if (!IsWriteAccess(Data)) {
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// D. 到了這裡,說明命中規則且正在寫入,準備攔截
// 這時候才去獲取進程名稱,檢查進程白名單
WCHAR exe_buffer[MAX_PATH_LEN] = { 0 };
UNICODE_STRING exe = { 0 };
exe.Buffer = exe_buffer;
exe.MaximumLength = sizeof(exe_buffer);
GetExeNameSafe(pid, &exe); // 獲取進程名
if (IsWhitelistExcept(&exe)) {
// 進程在白名單中 (如 ntoskrnl, explorer 等)
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
// E. 執行攔截
if (hitRansom) {
LogAnsi3("RANSOM_BLOCK", upid, &exe, &nameInfo->Name);
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_COMPLETE;
}
if (hitFile) {
LogAnsi3("FILE_BLOCK", upid, &exe, &nameInfo->Name);
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_COMPLETE;
}
// 默認放行
FltReleaseFileNameInformation(nameInfo);
PostOpRelease();
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
static NTSTATUS FilterUnloadCallback(FLT_FILTER_UNLOAD_FLAGS Flags)
{
UNREFERENCED_PARAMETER(Flags);
g_Unloading = TRUE;
ExWaitForRundownProtectionRelease(&g_Rundown);
if (g_FilterHandle != NULL) {
FltUnregisterFilter(g_FilterHandle);
g_FilterHandle = NULL;
}
return STATUS_SUCCESS;
}
static NTSTATUS FilterInstanceSetup(
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_In_ FLT_INSTANCE_SETUP_FLAGS Flags,
_In_ DEVICE_TYPE VolumeDeviceType,
_In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType
)
{
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(Flags);
UNREFERENCED_PARAMETER(VolumeDeviceType);
UNREFERENCED_PARAMETER(VolumeFilesystemType);
// 自動附加到所有卷
return STATUS_SUCCESS;
}
static VOID FilterInstanceTeardownStart(
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_In_ FLT_INSTANCE_TEARDOWN_FLAGS Flags
)
{
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(Flags);
}
static VOID FilterInstanceTeardownComplete(
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_In_ FLT_INSTANCE_TEARDOWN_FLAGS Flags
)
{
UNREFERENCED_PARAMETER(FltObjects);
UNREFERENCED_PARAMETER(Flags);
}
const FLT_OPERATION_REGISTRATION Callbacks[] = {
{ IRP_MJ_CREATE, 0, FilePreOp, NULL },
{ IRP_MJ_WRITE, 0, FilePreOp, NULL },
{ IRP_MJ_SET_INFORMATION, 0, FilePreOp, NULL },
{ IRP_MJ_OPERATION_END }
};
const FLT_REGISTRATION FilterRegistration = {
sizeof(FLT_REGISTRATION),
FLT_REGISTRATION_VERSION,
0,
NULL,
Callbacks,
FilterUnloadCallback,
FilterInstanceSetup,
NULL,
FilterInstanceTeardownStart,
FilterInstanceTeardownComplete,
NULL,
NULL,
NULL,
NULL
};
NTSTATUS InitFileProtect(VOID)
{
ExInitializeRundownProtection(&g_Rundown);
if (!g_DriverObject)
return STATUS_UNSUCCESSFUL;
NTSTATUS status = FltRegisterFilter(g_DriverObject, &FilterRegistration, &g_FilterHandle);
if (!NT_SUCCESS(status))
return status;
status = FltStartFiltering(g_FilterHandle);
if (!NT_SUCCESS(status)) {
FltUnregisterFilter(g_FilterHandle);
g_FilterHandle = NULL;
}
return status;
}
VOID UninitFileProtect(VOID)
{
g_Unloading = TRUE;
ExWaitForRundownProtectionRelease(&g_Rundown);
if (g_FilterHandle != NULL) {
FltUnregisterFilter(g_FilterHandle);
g_FilterHandle = NULL;
}
}
+124
View File
@@ -0,0 +1,124 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
static BOOLEAN g_ImageNotifyEnabled = FALSE;
static BOOLEAN CheckVadExec(PVOID a)
{
MEMORY_BASIC_INFORMATION mbi = { 0 };
SIZE_T ret = 0;
NTSTATUS s = ZwQueryVirtualMemory(NtCurrentProcess(), a, MemoryBasicInformation, &mbi, sizeof(mbi), &ret);
if (!NT_SUCCESS(s))
return FALSE;
if (mbi.State != MEM_COMMIT)
return FALSE;
if (mbi.Type == SEC_IMAGE)
return FALSE;
if (mbi.Type != MEM_PRIVATE && mbi.Type != MEM_MAPPED)
return FALSE;
return (mbi.Protect & (PAGE_EXECUTE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)) != 0;
}
static BOOLEAN WalkForShellcode(ULONG h)
{
#define MAXWALK 20
PVOID frames[MAXWALK] = { 0 };
ULONG c = RtlWalkFrameChain(frames, MAXWALK, 1);
if (c == 0)
return FALSE;
ULONG limit = RTL_NUMBER_OF(frames);
ULONG count = c < limit ? c : limit;
ULONG d = h < count ? h : count;
for (ULONG i = 0; i < d; i++) {
PVOID p = frames[i];
if (p && CheckVadExec(p))
return TRUE;
}
for (ULONG i = 0; i < d; i++) {
ULONG idx = count - 1 - i;
if (idx >= d) {
PVOID p = frames[idx];
if (p && CheckVadExec(p))
return TRUE;
}
}
return FALSE;
}
static VOID ImageLoadNotify(IN PUNICODE_STRING FullImageName, IN HANDLE ProcessId, IN PIMAGE_INFO ImageInfo)
{
UNREFERENCED_PARAMETER(ImageInfo);
if (g_Unloading)
return;
if (ProcessId == (HANDLE)0 || ProcessId == (HANDLE)4)
return;
if (KeGetCurrentIrql() != PASSIVE_LEVEL)
return;
if (!ExAcquireRundownProtection(&g_Rundown))
return;
WCHAR eb[512] = { 0 };
UNICODE_STRING exe = { 0 };
exe.Buffer = eb;
exe.MaximumLength = sizeof(eb);
exe.Length = 0;
if (!GetProcessImagePathByPid(ProcessId, &exe)) {
PEPROCESS eproc = PsGetCurrentProcess();
PCSTR n = PsGetProcessImageFileName(eproc);
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < RTL_NUMBER_OF(eb) - 1; i++)
eb[i] = (WCHAR)n[i];
eb[l] = 0;
exe.Length = (USHORT)(l * sizeof(WCHAR));
}
if (exe.Length & 1) exe.Length--;
{
size_t elen = exe.Length / sizeof(WCHAR);
if ((elen >= 14 && _wcsnicmp(exe.Buffer + elen - 14, L"powershell.exe", 14) == 0) ||
(elen >= 8 && _wcsnicmp(exe.Buffer + elen - 8, L"pwsh.exe", 8) == 0) ||
(elen >= 10 && _wcsnicmp(exe.Buffer + elen - 10, L"sppsvc.exe", 10) == 0)) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
}
if (IsWhitelist(&exe)) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
if (FullImageName && FullImageName->Buffer) {
if (MatchClrFromNonFramework(FullImageName)) {
LogAnsi3("CLR_BLOCK", (ULONG)(ULONG_PTR)ProcessId, &exe, FullImageName);
ExReleaseRundownProtection(&g_Rundown);
return;
}
}
if (WalkForShellcode(8)) {
UNICODE_STRING none = RTL_CONSTANT_STRING(L"None");
LogAnsi3("SHELLCODE_BLOCK", (ULONG)(ULONG_PTR)ProcessId, &exe, &none);
ExReleaseRundownProtection(&g_Rundown);
return;
}
ExReleaseRundownProtection(&g_Rundown);
}
NTSTATUS InitImageProtect(VOID)
{
NTSTATUS s = PsSetLoadImageNotifyRoutine(ImageLoadNotify);
if (NT_SUCCESS(s))
g_ImageNotifyEnabled = TRUE;
return s;
}
VOID UninitImageProtect(VOID)
{
if (g_ImageNotifyEnabled) {
PsRemoveLoadImageNotifyRoutine(ImageLoadNotify);
g_ImageNotifyEnabled = FALSE;
}
}
+177
View File
@@ -0,0 +1,177 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
static PVOID g_ObRegHandle = NULL;
static POB_OPERATION_REGISTRATION g_ObOps = NULL;
static OB_CALLBACK_REGISTRATION g_ObReg = { 0 };
static OB_PREOP_CALLBACK_STATUS PreProcessCallback(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION Info)
{
UNREFERENCED_PARAMETER(RegistrationContext);
if (g_Unloading)
return OB_PREOP_SUCCESS;
if (!Info || Info->KernelHandle)
return OB_PREOP_SUCCESS;
if (!Info->Object)
return OB_PREOP_SUCCESS;
if (Info->Operation != OB_OPERATION_HANDLE_CREATE && Info->Operation != OB_OPERATION_HANDLE_DUPLICATE)
return OB_PREOP_SUCCESS;
if (!ExAcquireRundownProtection(&g_Rundown))
return OB_PREOP_SUCCESS;
HANDLE cur = PsGetCurrentProcessId();
if (cur == (HANDLE)0 || cur == (HANDLE)4) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
HANDLE target = PsGetProcessId((PEPROCESS)Info->Object);
if (target == cur) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
ACCESS_MASK* desired = (Info->Operation == OB_OPERATION_HANDLE_CREATE) ? &Info->Parameters->CreateHandleInformation.DesiredAccess : &Info->Parameters->DuplicateHandleInformation.DesiredAccess;
ACCESS_MASK mask = PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE;
PCSTR tn = PsGetProcessImageFileName((PEPROCESS)Info->Object);
if (tn && (_stricmp(tn, "lsass.exe") == 0))
mask |= PROCESS_VM_READ;
if ((*desired & mask) == 0) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
BOOLEAN logok = (KeGetCurrentIrql() == PASSIVE_LEVEL);
WCHAR cbuf[512] = { 0 }, tbuf[512] = { 0 };
UNICODE_STRING cexe = { 0 }, texe = { 0 };
cexe.Buffer = cbuf; cexe.MaximumLength = sizeof(cbuf);
texe.Buffer = tbuf; texe.MaximumLength = sizeof(tbuf);
if (logok)
GetProcessImagePathByPid(cur, &cexe);
if (logok && IsWhitelist(&cexe)) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
ACCESS_MASK old = *desired;
*desired &= ~mask;
if ((*desired) != old && logok) {
GetProcessImagePathByPid(target, &texe);
if (cexe.Length == 0) {
PEPROCESS eproc = PsGetCurrentProcess();
PCSTR n = PsGetProcessImageFileName(eproc);
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < RTL_NUMBER_OF(cbuf) - 1; i++)
cbuf[i] = (WCHAR)n[i];
cbuf[l] = 0;
cexe.Length = (USHORT)(l * sizeof(WCHAR));
}
LogAnsi3("INJECT_BLOCK", (ULONG)(ULONG_PTR)cur, &cexe, &texe);
}
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
static OB_PREOP_CALLBACK_STATUS PreThreadCallback(PVOID RegistrationContext, POB_PRE_OPERATION_INFORMATION Info)
{
UNREFERENCED_PARAMETER(RegistrationContext);
if (!Info || Info->KernelHandle)
return OB_PREOP_SUCCESS;
if (Info->Object == NULL)
return OB_PREOP_SUCCESS;
if (Info->Operation != OB_OPERATION_HANDLE_CREATE && Info->Operation != OB_OPERATION_HANDLE_DUPLICATE)
return OB_PREOP_SUCCESS;
if (!ExAcquireRundownProtection(&g_Rundown))
return OB_PREOP_SUCCESS;
HANDLE cur = PsGetCurrentProcessId();
if (cur == (HANDLE)0 || cur == (HANDLE)4) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
HANDLE owner = PsGetThreadProcessId((PETHREAD)Info->Object);
if (owner == cur) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
ACCESS_MASK tmask = THREAD_SET_CONTEXT | THREAD_SUSPEND_RESUME | THREAD_IMPERSONATE | THREAD_DIRECT_IMPERSONATION;
ACCESS_MASK* desired = (Info->Operation == OB_OPERATION_HANDLE_CREATE) ? &Info->Parameters->CreateHandleInformation.DesiredAccess : &Info->Parameters->DuplicateHandleInformation.DesiredAccess;
if ((*desired & tmask) == 0) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
BOOLEAN logok = (KeGetCurrentIrql() == PASSIVE_LEVEL);
WCHAR cbuf[512] = { 0 };
UNICODE_STRING cexe = { 0 };
cexe.Buffer = cbuf;
cexe.MaximumLength = sizeof(cbuf);
if (logok)
GetProcessImagePathByPid(cur, &cexe);
if (logok && IsWhitelist(&cexe)) {
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
ACCESS_MASK old = *desired;
*desired &= ~tmask;
if ((*desired) != old && logok) {
if (cexe.Length == 0) {
PEPROCESS eproc = PsGetCurrentProcess();
PCSTR n = PsGetProcessImageFileName(eproc);
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < RTL_NUMBER_OF(cbuf) - 1; i++)
cbuf[i] = (WCHAR)n[i];
cbuf[l] = 0;
cexe.Length = (USHORT)(l * sizeof(WCHAR));
}
UNICODE_STRING tnone = RTL_CONSTANT_STRING(L"None");
LogAnsi3("THREAD_BLOCK", (ULONG)(ULONG_PTR)cur, &cexe, &tnone);
}
ExReleaseRundownProtection(&g_Rundown);
return OB_PREOP_SUCCESS;
}
NTSTATUS InitInjectProtect(VOID)
{
static UNICODE_STRING obAlt;
RtlInitUnicodeString(&obAlt, L"385000");
g_ObOps = (POB_OPERATION_REGISTRATION)ExAllocatePool2(POOL_FLAG_NON_PAGED, sizeof(OB_OPERATION_REGISTRATION) * 2, 'bOpr');
if (!g_ObOps)
return STATUS_INSUFFICIENT_RESOURCES;
RtlZeroMemory(g_ObOps, sizeof(OB_OPERATION_REGISTRATION) * 2);
g_ObOps[0].ObjectType = PsProcessType;
g_ObOps[0].Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
g_ObOps[0].PreOperation = PreProcessCallback;
g_ObOps[1].ObjectType = PsThreadType;
g_ObOps[1].Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
g_ObOps[1].PreOperation = PreThreadCallback;
RtlZeroMemory(&g_ObReg, sizeof(g_ObReg));
g_ObReg.Version = OB_FLT_REGISTRATION_VERSION;
g_ObReg.OperationRegistrationCount = 2;
g_ObReg.Altitude = obAlt;
g_ObReg.RegistrationContext = NULL;
g_ObReg.OperationRegistration = g_ObOps;
NTSTATUS s = ObRegisterCallbacks(&g_ObReg, &g_ObRegHandle);
if (!NT_SUCCESS(s)) {
ExFreePool2(g_ObOps, 'bOpr', NULL, 0);
g_ObOps = NULL;
RtlZeroMemory(&g_ObReg, sizeof(g_ObReg));
}
return s;
}
VOID UninitInjectProtect(VOID)
{
if (g_ObRegHandle) {
ObUnRegisterCallbacks(g_ObRegHandle);
g_ObRegHandle = NULL;
}
if (g_ObOps) {
ExFreePool2(g_ObOps, 'bOpr', NULL, 0);
g_ObOps = NULL;
}
RtlZeroMemory(&g_ObReg, sizeof(g_ObReg));
}
+348
View File
@@ -0,0 +1,348 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectRules.h"
#include "ProtectMatch.h"
static __forceinline BOOLEAN USOK(PUNICODE_STRING s)
{
return s && s->Buffer && s->Length;
}
static BOOLEAN WildMatchN(const wchar_t* str, SIZE_T n, const wchar_t* pat)
{
if (*pat == 0)
return n == 0;
if (*pat == L'*') {
if (pat[1] == L'*') {
for (SIZE_T i = 0; i <= n; ++i)
if (WildMatchN(str + i, n - i, pat + 2))
return TRUE;
return FALSE;
}
SIZE_T i = 0;
for (; i < n && str[i] != L'\\'; ++i)
if (WildMatchN(str + i, n - i, pat + 1))
return TRUE;
return WildMatchN(str + i, n - i, pat + 1);
}
if (*pat == L'?')
return n > 0 && str[0] != L'\\' && WildMatchN(str + 1, n - 1, pat + 1);
if (n == 0)
return FALSE;
WCHAR sc = str[0], pc = *pat;
if (sc >= L'A' && sc <= L'Z')
sc += 32;
if (pc >= L'A' && pc <= L'Z')
pc += 32;
return sc == pc && WildMatchN(str + 1, n - 1, pat + 1);
}
static BOOLEAN MatchList(PUNICODE_STRING s, wchar_t** list)
{
if (!USOK(s) || !list)
return FALSE;
SIZE_T s_len = s->Length / sizeof(WCHAR);
for (SIZE_T i = 0; list[i]; ++i) {
wchar_t* pat = list[i];
if (wcschr(pat, L'*') || wcschr(pat, L'?')) {
if (WildMatchN(s->Buffer, s_len, pat))
return TRUE;
}
else {
SIZE_T pat_len = wcslen(pat);
if (s_len >= pat_len && _wcsnicmp(s->Buffer, pat, pat_len) == 0) {
if (s_len == pat_len || s->Buffer[s_len - pat_len - 1] == L'\\') {
return TRUE;
}
}
if (s_len >= pat_len && _wcsnicmp(s->Buffer + s_len - pat_len, pat, pat_len) == 0) {
return TRUE;
}
}
}
return FALSE;
}
static wchar_t* MatchListGetRule(PUNICODE_STRING s, wchar_t** list)
{
if (!USOK(s) || !list)
return 0;
SIZE_T s_len = s->Length / sizeof(WCHAR);
for (SIZE_T i = 0; list[i]; ++i) {
wchar_t* pat = list[i];
if (wcschr(pat, L'*') || wcschr(pat, L'?')) {
if (WildMatchN(s->Buffer, s_len, pat))
return pat;
}
else {
SIZE_T pat_len = wcslen(pat);
if (s_len >= pat_len && _wcsnicmp(s->Buffer, pat, pat_len) == 0) {
if (s_len == pat_len || s->Buffer[s_len - pat_len - 1] == L'\\') {
return pat;
}
}
if (s_len >= pat_len && _wcsnicmp(s->Buffer + s_len - pat_len, pat, pat_len) == 0) {
return pat;
}
}
}
return 0;
}
static BOOLEAN StrStrIW(const wchar_t* s, const wchar_t* sub)
{
if (!s || !sub)
return FALSE;
SIZE_T n = wcslen(s), m = wcslen(sub);
if (m == 0 || n < m)
return FALSE;
for (SIZE_T i = 0; i + m <= n; i++) {
if (_wcsnicmp(s + i, sub, m) == 0)
return TRUE;
}
return FALSE;
}
static BOOLEAN EndsWithNameUS(PUNICODE_STRING s, const wchar_t* name)
{
if (!USOK(s) || !name)
return FALSE;
SIZE_T n = s->Length / sizeof(WCHAR);
SIZE_T m = wcslen(name);
return n >= m && _wcsnicmp(s->Buffer + (n - m), name, m) == 0;
}
BOOLEAN IsRegistryBlock(PUNICODE_STRING key, PUNICODE_STRING valueName, PUNICODE_STRING exe)
{
if (USOK(key) && WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\**"))
return FALSE;
if (USOK(exe) && IsWhitelist(exe))
return FALSE;
if (USOK(exe) && USOK(key)) {
if ((EndsWithNameUS(exe, L"services.exe") || EndsWithNameUS(exe, L"svchost.exe") || EndsWithNameUS(exe, L"sc.exe")) &&
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\SYSTEM\\CurrentControlSet\\Services\\**"))
return FALSE;
if ((EndsWithNameUS(exe, L"powershell.exe") || EndsWithNameUS(exe, L"pwsh.exe")) &&
(WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Internet Settings\\ZoneMap\\**") ||
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Internet Settings\\ZoneMap") ||
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Notifications\\Data\\**") ||
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Notifications\\Data")))
return FALSE;
if ((EndsWithNameUS(exe, L"msiexec.exe") || EndsWithNameUS(exe, L"TrustedInstaller.exe")) &&
(WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Installer\\**") ||
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\CurrentVersion\\Uninstall\\**") ||
WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\SYSTEM\\CurrentControlSet\\Services\\**")))
return FALSE;
if (EndsWithNameUS(exe, L"schtasks.exe") && WildMatchN(key->Buffer, key->Length / sizeof(WCHAR), L"\\REGISTRY\\**\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\**"))
return FALSE;
}
if (USOK(key) && MatchBlockReg(key))
return TRUE;
if (USOK(valueName)) {
for (SIZE_T i = 0; g_BlockReg[i]; ++i) {
wchar_t* pat = g_BlockReg[i];
if (!wcschr(pat, L'\\') && !wcschr(pat, L'*') && !wcschr(pat, L'?') && _wcsnicmp(valueName->Buffer, pat, wcslen(pat)) == 0)
return TRUE;
}
}
return FALSE;
}
BOOLEAN GetProcessImagePathByPid(HANDLE pid, PUNICODE_STRING ProcessImagePath)
{
PEPROCESS process = NULL;
PVOID buf = NULL;
HANDLE h = NULL;
NTSTATUS status;
ULONG len = 0;
status = PsLookupProcessByProcessId(pid, &process);
if (!NT_SUCCESS(status))
return FALSE;
status = ObOpenObjectByPointer(process, OBJ_KERNEL_HANDLE, NULL, PROCESS_QUERY_LIMITED_INFORMATION, *PsProcessType, KernelMode, &h);
if (!NT_SUCCESS(status))
goto cleanup;
status = ZwQueryInformationProcess(h, ProcessImageFileName, NULL, 0, &len);
if (status != STATUS_INFO_LENGTH_MISMATCH || len == 0)
goto cleanup;
buf = ExAllocatePool2(POOL_FLAG_NON_PAGED, len, 'iPgN');
if (!buf)
goto cleanup;
status = ZwQueryInformationProcess(h, ProcessImageFileName, buf, len, &len);
if (NT_SUCCESS(status)) {
PUNICODE_STRING image = (PUNICODE_STRING)buf;
if (image->Buffer && image->Length > 0 && ProcessImagePath->MaximumLength >= image->Length + sizeof(WCHAR)) {
RtlCopyMemory(ProcessImagePath->Buffer, image->Buffer, image->Length);
ProcessImagePath->Length = image->Length;
ProcessImagePath->Buffer[image->Length / sizeof(WCHAR)] = 0;
status = TRUE;
}
else {
status = FALSE;
}
}
else {
status = FALSE;
}
cleanup:
if (buf)
ExFreePool2(buf, 'iPgN', NULL, 0);
if (h)
ZwClose(h);
if (process)
ObDereferenceObject(process);
return NT_SUCCESS(status);
}
BOOLEAN IsWhitelist(PUNICODE_STRING s)
{
if (MatchList(s, g_WhitelistExcept))
return FALSE;
return MatchList(s, g_Whitelist);
}
BOOLEAN MatchBlockReg(PUNICODE_STRING s)
{
return MatchList(s, g_BlockReg);
}
wchar_t* GetMatchedBlockRegRule(PUNICODE_STRING s)
{
return MatchListGetRule(s, g_BlockReg);
}
BOOLEAN MatchBlockFile(PUNICODE_STRING s)
{
return MatchList(s, g_BlockFile);
}
BOOLEAN MatchBlockRansom(PUNICODE_STRING s)
{
return MatchList(s, g_BlockRansom);
}
wchar_t* GetMatchedBlockFileRule(PUNICODE_STRING s)
{
return MatchListGetRule(s, g_BlockFile);
}
BOOLEAN HasBlockedSuffix(PUNICODE_STRING s)
{
if (!USOK(s)) {
return FALSE;
}
for (SIZE_T i = 0; g_Blocksuffix[i]; ++i) {
if (EndsWithNameUS(s, g_Blocksuffix[i])) {
return TRUE;
}
}
return FALSE;
}
BOOLEAN MatchRemoteSuspectBin(PUNICODE_STRING img)
{
if (!USOK(img))
return FALSE;
for (SIZE_T i = 0; g_RemoteSuspectBins[i]; ++i)
if (EndsWithNameUS(img, g_RemoteSuspectBins[i]))
return TRUE;
return FALSE;
}
BOOLEAN MatchRemoteCommand(PUNICODE_STRING cmd, PUNICODE_STRING img)
{
if (!USOK(cmd))
return FALSE;
const wchar_t* s = cmd->Buffer;
for (SIZE_T i = 0; g_RemoteCmdIndicatorsHttp[i]; ++i)
if (StrStrIW(s, g_RemoteCmdIndicatorsHttp[i]))
return TRUE;
for (SIZE_T i = 0; g_RemoteCmdIndicatorsGeneric[i]; ++i)
if (StrStrIW(s, g_RemoteCmdIndicatorsGeneric[i]))
return TRUE;
if (USOK(img) && EndsWithNameUS(img, L"cmd.exe")) {
for (SIZE_T i = 0; g_RemoteCmdFromCmdExe[i]; ++i)
if (StrStrIW(s, g_RemoteCmdFromCmdExe[i]))
return TRUE;
}
if (USOK(img) && EndsWithNameUS(img, L"rundll32.exe")) {
for (SIZE_T i = 0; g_RemoteCmdFromRundll32Exe[i]; ++i)
if (StrStrIW(s, g_RemoteCmdFromRundll32Exe[i]))
return TRUE;
}
if (USOK(img) && EndsWithNameUS(img, L"regsvr32.exe") && StrStrIW(s, L"/i:") && StrStrIW(s, L"http"))
return TRUE;
if (USOK(img) && EndsWithNameUS(img, L"mshta.exe")) {
for (SIZE_T i = 0; g_RemoteCmdFromMshtaExe[i]; ++i)
if (StrStrIW(s, g_RemoteCmdFromMshtaExe[i]))
return TRUE;
}
return FALSE;
}
BOOLEAN MatchScreenCapModule(PUNICODE_STRING mod)
{
if (!USOK(mod))
return FALSE;
for (SIZE_T i = 0; g_ScreenCapModules[i]; ++i)
if (EndsWithNameUS(mod, g_ScreenCapModules[i]))
return TRUE;
return FALSE;
}
BOOLEAN MatchSuspiciousProcPath(PUNICODE_STRING img)
{
if (!USOK(img))
return FALSE;
const wchar_t* s = img->Buffer;
if (StrStrIW(s, L"\\Users\\")) {
for (SIZE_T i = 0; g_ScreenUserSubdirs[i]; ++i)
if (StrStrIW(s, g_ScreenUserSubdirs[i]))
return TRUE;
}
for (SIZE_T i = 0; g_ScreenOtherProcNeedles[i]; ++i)
if (StrStrIW(s, g_ScreenOtherProcNeedles[i]))
return TRUE;
return FALSE;
}
BOOLEAN MatchClrFromNonFramework(PUNICODE_STRING fullImageName)
{
if (!USOK(fullImageName))
return FALSE;
const wchar_t* s = fullImageName->Buffer;
return (StrStrIW(s, L"\\clr.dll") || StrStrIW(s, L"\\mscorwks.dll")) && !StrStrIW(s, L"\\Windows\\Microsoft.NET\\") && !StrStrIW(s, L"\\Framework");
}
BOOLEAN IsWhitelistExcept(PUNICODE_STRING img)
{
if (!USOK(img))
return FALSE;
return MatchList(img, g_WhitelistExcept);
}
+23
View File
@@ -0,0 +1,23 @@
#pragma once
#include <ntifs.h>
wchar_t* GetMatchedBlockRegRule(PUNICODE_STRING s);
wchar_t* GetMatchedBlockFileRule(PUNICODE_STRING s);
BOOLEAN GetProcessImagePathByPid(HANDLE pid, PUNICODE_STRING ProcessImagePath);
BOOLEAN IsWhitelist(PUNICODE_STRING s);
BOOLEAN IsWhitelistExcept(PUNICODE_STRING img);
BOOLEAN MatchBlockReg(PUNICODE_STRING s);
BOOLEAN IsRegistryBlock(PUNICODE_STRING key, PUNICODE_STRING valueName, PUNICODE_STRING exe);
BOOLEAN MatchBlockFile(PUNICODE_STRING s);
BOOLEAN MatchBlockRansom(PUNICODE_STRING s);
BOOLEAN HasBlockedSuffix(PUNICODE_STRING s);
BOOLEAN MatchRemoteSuspectBin(PUNICODE_STRING img);
BOOLEAN MatchRemoteCommand(PUNICODE_STRING cmd, PUNICODE_STRING img);
BOOLEAN MatchScreenCapModule(PUNICODE_STRING mod);
BOOLEAN MatchSuspiciousProcPath(PUNICODE_STRING img);
BOOLEAN MatchClrFromNonFramework(PUNICODE_STRING fullImageName);
+125
View File
@@ -0,0 +1,125 @@
#include <ntifs.h>
#include <ntstrsafe.h>
#include "DriverEntry.h"
typedef union _PS_PROTECTION {
UCHAR Level;
struct {
UCHAR Type : 3;
UCHAR Audit : 1;
UCHAR Signer : 4;
} Flags;
} PS_PROTECTION, * PPS_PROTECTION;
static PVOID g_PsSetProcessProtection = NULL;
static HANDLE g_ProtectedPid = NULL;
static PVOID g_ObCookie = NULL;
static NTSTATUS SetPPL31(_In_ PEPROCESS proc)
{
if (!proc || !g_PsSetProcessProtection)
return STATUS_PROCEDURE_NOT_FOUND;
PS_PROTECTION p = { 0 };
p.Level = 0x31;
((VOID(NTAPI*)(PEPROCESS, PS_PROTECTION))g_PsSetProcessProtection)(proc, p);
return STATUS_SUCCESS;
}
static OB_PREOP_CALLBACK_STATUS ObPreOperation(
_In_ PVOID RegistrationContext,
_Inout_ POB_PRE_OPERATION_INFORMATION info
)
{
UNREFERENCED_PARAMETER(RegistrationContext);
if (!info || info->KernelHandle)
return OB_PREOP_SUCCESS;
if (info->ObjectType == *PsProcessType) {
PEPROCESS proc = (PEPROCESS)info->Object;
HANDLE pid = PsGetProcessId(proc);
if (g_ProtectedPid && pid == g_ProtectedPid && PsGetCurrentProcessId() != g_ProtectedPid) {
ACCESS_MASK* mask = (info->Operation == OB_OPERATION_HANDLE_CREATE)
? &info->Parameters->CreateHandleInformation.DesiredAccess
: &info->Parameters->DuplicateHandleInformation.DesiredAccess;
if (*mask & PROCESS_TERMINATE) {
LogAnsi3("KILL_ATTEMPT",
(ULONG)(ULONG_PTR)PsGetCurrentProcessId(),
NULL, NULL);
*mask &= ~(PROCESS_TERMINATE | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD);
}
}
}
return OB_PREOP_SUCCESS;
}
static VOID ProcessNotify(
_In_opt_ PEPROCESS Process,
_In_ HANDLE Pid,
_In_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo
)
{
UNICODE_STRING target = RTL_CONSTANT_STRING(L"\\??\\C:\\PYAS.exe");
if (CreateInfo) {
if (Process && CreateInfo->ImageFileName &&
RtlEqualUnicodeString(CreateInfo->ImageFileName, &target, TRUE)) {
NTSTATUS st = SetPPL31(Process);
UNREFERENCED_PARAMETER(st);
InterlockedExchangePointer((PVOID*)&g_ProtectedPid, Pid);
LogAnsi3("PROC_PPL", (ULONG)(ULONG_PTR)Pid, (PUNICODE_STRING)CreateInfo->ImageFileName, NULL);
}
}
else {
if (g_ProtectedPid && Pid == g_ProtectedPid) {
InterlockedExchangePointer((PVOID*)&g_ProtectedPid, NULL);
}
}
}
NTSTATUS InitProcessProtect(VOID)
{
UNICODE_STRING n = RTL_CONSTANT_STRING(L"PsSetProcessProtection");
g_PsSetProcessProtection = MmGetSystemRoutineAddress(&n);
static OB_OPERATION_REGISTRATION ops[1];
RtlZeroMemory(ops, sizeof(ops));
ops[0].ObjectType = PsProcessType;
ops[0].Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
ops[0].PreOperation = ObPreOperation;
ops[0].PostOperation = NULL;
UNICODE_STRING alt = RTL_CONSTANT_STRING(L"321000");
OB_CALLBACK_REGISTRATION reg;
RtlZeroMemory(&reg, sizeof(reg));
reg.Version = OB_FLT_REGISTRATION_VERSION;
reg.OperationRegistrationCount = 1;
reg.OperationRegistration = ops;
reg.RegistrationContext = NULL;
reg.Altitude = alt;
NTSTATUS s = ObRegisterCallbacks(&reg, &g_ObCookie);
if (!NT_SUCCESS(s)) {
g_ObCookie = NULL;
return s;
}
s = PsSetCreateProcessNotifyRoutineEx(ProcessNotify, FALSE);
if (!NT_SUCCESS(s)) {
ObUnRegisterCallbacks(g_ObCookie);
g_ObCookie = NULL;
return s;
}
return STATUS_SUCCESS;
}
VOID UninitProcessProtect(VOID)
{
if (g_ObCookie) {
ObUnRegisterCallbacks(g_ObCookie);
g_ObCookie = NULL;
}
PsSetCreateProcessNotifyRoutineEx(ProcessNotify, TRUE);
}
+118
View File
@@ -0,0 +1,118 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
static BOOLEAN QueryRegPathFromObject(PVOID KeyObject, PUNICODE_STRING OutPath, POBJECT_NAME_INFORMATION* OutInfo)
{
ULONG len = 0;
NTSTATUS s = ObQueryNameString(KeyObject, NULL, 0, &len);
if (s != STATUS_INFO_LENGTH_MISMATCH)
return FALSE;
POBJECT_NAME_INFORMATION p = (POBJECT_NAME_INFORMATION)ExAllocatePool2(POOL_FLAG_NON_PAGED, len, 'rgeR');
if (!p)
return FALSE;
s = ObQueryNameString(KeyObject, p, len, &len);
if (!NT_SUCCESS(s) || !p->Name.Buffer || p->Name.Length == 0) {
ExFreePool2(p, 'rgeR', NULL, 0);
return FALSE;
}
*OutInfo = p;
OutPath->Buffer = p->Name.Buffer;
OutPath->Length = p->Name.Length;
OutPath->MaximumLength = p->Name.Length;
return TRUE;
}
NTSTATUS RegistryProtectCallback(PVOID ctx, PVOID arg1, PVOID arg2)
{
UNREFERENCED_PARAMETER(ctx);
if (g_Unloading)
return STATUS_SUCCESS;
if (!ExAcquireRundownProtection(&g_Rundown))
return STATUS_SUCCESS;
REG_NOTIFY_CLASS type = (REG_NOTIFY_CLASS)(ULONG_PTR)arg1;
NTSTATUS status = STATUS_SUCCESS;
UNICODE_STRING checkReg = { 0 };
POBJECT_NAME_INFORMATION nameInfo = NULL;
UNICODE_STRING exe = { 0 };
WCHAR exeBuf[260] = { 0 };
exe.Buffer = exeBuf;
exe.MaximumLength = sizeof(exeBuf);
exe.Length = 0;
HANDLE pid = PsGetCurrentProcessId();
if (pid == (HANDLE)0 || pid == (HANDLE)4) {
ExReleaseRundownProtection(&g_Rundown);
return STATUS_SUCCESS;
}
PUNICODE_STRING valueName = NULL;
BOOLEAN need_log = FALSE;
BOOLEAN canQuery = (KeGetCurrentIrql() == PASSIVE_LEVEL);
if (type == RegNtPreSetValueKey) {
PREG_SET_VALUE_KEY_INFORMATION s = (PREG_SET_VALUE_KEY_INFORMATION)arg2;
valueName = s->ValueName;
if (canQuery)
QueryRegPathFromObject(s->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreDeleteValueKey) {
PREG_DELETE_VALUE_KEY_INFORMATION d = (PREG_DELETE_VALUE_KEY_INFORMATION)arg2;
valueName = d->ValueName;
if (canQuery)
QueryRegPathFromObject(d->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreDeleteKey) {
PREG_DELETE_KEY_INFORMATION d = (PREG_DELETE_KEY_INFORMATION)arg2;
if (canQuery)
QueryRegPathFromObject(d->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreRenameKey) {
PREG_RENAME_KEY_INFORMATION r = (PREG_RENAME_KEY_INFORMATION)arg2;
if (canQuery)
QueryRegPathFromObject(r->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreCreateKeyEx) {
PREG_CREATE_KEY_INFORMATION c = (PREG_CREATE_KEY_INFORMATION)arg2;
if (c->CompleteName)
checkReg = *c->CompleteName;
}
else if (type == RegNtPreReplaceKey) {
PREG_REPLACE_KEY_INFORMATION rk = (PREG_REPLACE_KEY_INFORMATION)arg2;
if (canQuery)
QueryRegPathFromObject(rk->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreSaveKey) {
PREG_SAVE_KEY_INFORMATION sk = (PREG_SAVE_KEY_INFORMATION)arg2;
if (canQuery)
QueryRegPathFromObject(sk->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreRestoreKey) {
PREG_RESTORE_KEY_INFORMATION res = (PREG_RESTORE_KEY_INFORMATION)arg2;
if (canQuery)
QueryRegPathFromObject(res->Object, &checkReg, &nameInfo);
}
else if (type == RegNtPreLoadKey) {
PREG_LOAD_KEY_INFORMATION lk = (PREG_LOAD_KEY_INFORMATION)arg2;
if (lk->KeyName)
checkReg = *lk->KeyName;
}
if (checkReg.Buffer || (valueName && valueName->Buffer)) {
if (canQuery)
GetProcessImagePathByPid(pid, &exe);
if (IsRegistryBlock(&checkReg, valueName, &exe)) {
need_log = TRUE;
status = STATUS_ACCESS_DENIED;
}
}
if (nameInfo)
ExFreePool2(nameInfo, 'rgeR', NULL, 0);
if (need_log)
LogAnsi3("REG_BLOCK", (ULONG)(ULONG_PTR)pid, &exe, &checkReg);
ExReleaseRundownProtection(&g_Rundown);
return status;
}
+83
View File
@@ -0,0 +1,83 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
static BOOLEAN g_RemoteNotifyEnabled = FALSE;
static VOID ProcessNotifyEx(PEPROCESS Process, HANDLE ProcessId, PPS_CREATE_NOTIFY_INFO CreateInfo)
{
UNREFERENCED_PARAMETER(Process);
UNREFERENCED_PARAMETER(ProcessId);
if (!CreateInfo)
return;
if (g_Unloading)
return;
if (KeGetCurrentIrql() != PASSIVE_LEVEL)
return;
if (!ExAcquireRundownProtection(&g_Rundown))
return;
HANDLE ppid = CreateInfo->CreatingThreadId.UniqueProcess;
if (ppid == (HANDLE)0 || ppid == (HANDLE)4) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
UNICODE_STRING parent = { 0 };
WCHAR pbuf[512] = { 0 };
parent.Buffer = pbuf;
parent.MaximumLength = sizeof(pbuf);
if (!GetProcessImagePathByPid(ppid, &parent)) {
PEPROCESS eproc = PsGetCurrentProcess();
PCSTR n = PsGetProcessImageFileName(eproc);
size_t l = n ? strlen(n) : 0;
for (size_t i = 0; i < l && i < RTL_NUMBER_OF(pbuf) - 1; i++)
pbuf[i] = (WCHAR)n[i];
pbuf[l] = 0;
parent.Length = (USHORT)(l * sizeof(WCHAR));
}
if (IsWhitelist(&parent)) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
UNICODE_STRING img = { 0 };
if (CreateInfo->ImageFileName)
img = *CreateInfo->ImageFileName;
UNICODE_STRING cmd = { 0 };
if (CreateInfo->CommandLine)
cmd = *CreateInfo->CommandLine;
BOOLEAN suspect = FALSE;
if (MatchRemoteSuspectBin(&img) && MatchRemoteCommand(&cmd, &img))
suspect = TRUE;
if (suspect) {
CreateInfo->CreationStatus = STATUS_ACCESS_DENIED;
if (cmd.Buffer && cmd.Length)
LogAnsi3("REMOTE_BLOCK", (ULONG)(ULONG_PTR)ppid, &parent, &cmd);
else if (img.Buffer && img.Length)
LogAnsi3("REMOTE_BLOCK", (ULONG)(ULONG_PTR)ppid, &parent, &img);
else {
UNICODE_STRING none = RTL_CONSTANT_STRING(L"None");
LogAnsi3("REMOTE_BLOCK", (ULONG)(ULONG_PTR)ppid, &parent, &none);
}
}
ExReleaseRundownProtection(&g_Rundown);
}
NTSTATUS InitRemoteProtect(VOID)
{
NTSTATUS s = PsSetCreateProcessNotifyRoutineEx(ProcessNotifyEx, FALSE);
if (NT_SUCCESS(s))
g_RemoteNotifyEnabled = TRUE;
return s;
}
VOID UninitRemoteProtect(VOID)
{
if (g_RemoteNotifyEnabled) {
PsSetCreateProcessNotifyRoutineEx(ProcessNotifyEx, TRUE);
g_RemoteNotifyEnabled = FALSE;
}
}
+266
View File
@@ -0,0 +1,266 @@
#include <ntifs.h>
#include "ProtectRules.h"
wchar_t* g_Whitelist[] = {
L"\\Device\\HarddiskVolume*\\Program*\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\AppData\\**",
L"**\\PYAS*.exe",
L"Registry",
L"vmmem*",
NULL
};
wchar_t* g_WhitelistExcept[] = {
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\vds.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\bcdedit.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\schtasks.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\ntoskrnl.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\wbadmin.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\bcdboot.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\dism.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\bootsect.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\net1.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\msiexec.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\lsass.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\csrss.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\smss.exe",
L"\\Device\\HarddiskVolume*\\Windows\\Sys*\\wininit.exe",
NULL
};
wchar_t* g_AttachDisk[] = {
L"\\FileSystem\\Ntfs",
L"\\FileSystem\\Refs",
L"\\FileSystem\\Fastfat",
L"\\FileSystem\\exfat",
L"\\FileSystem\\Udfs",
NULL
};
wchar_t* g_BlockFile[] = {
L"\\Device\\Harddisk*\\DR*",
L"\\Device\\Harddisk*\\Partition\\**",
L"\\Device\\HarddiskVolume*\\Boot\\**",
L"\\Device\\HarddiskVolume*\\EFI\\**",
L"\\Device\\HarddiskVolume*\\bootmgr",
L"\\Device\\HarddiskVolume*\\Recovery\\**",
L"\\Device\\HarddiskVolume*\\System Volume Information\\**",
L"\\Device\\HarddiskVolume*\\Windows\\**",
L"\\Device\\HarddiskVolume*\\$*\\**",
L"\\Device\\HarddiskVolume*\\ProgramData\\PYAS\\**",
L"**\\PYAS.exe",
L"**\\CON**",
L"**\\PRN**",
L"**\\AUX**",
L"**\\NUL**",
L"**\\COM*\\**",
L"**\\LPT*\\**",
L"**\\evil*.exe",
L"**\\OSDATA**",
NULL
};
wchar_t* g_BlockRansom[] = {
L"\\Device\\HarddiskVolume*\\Users\\*\\Desktop\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\Downloads\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\Documents\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\Music\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\Pictures\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\Videos\\**",
L"\\Device\\HarddiskVolume*\\Users\\*\\OneDrive\\**",
NULL
};
wchar_t* g_Blocksuffix[] = {
L".exe", L".dll", L".sys", L".com", L".scr",
L".zip", L".7z", L".rar", L".tar", L".gz",
L".js", L".bat", L".cmd", L".ps1", L".vbs",
L".ppt", L".pptx", L".wps", L".txt", L".rtf",
L".pdf", L".xls", L".xlsx", L".doc", L".docx",
L".jpg", L".jpeg", L".png", L".webp", L".gif",
L".mp3", L".wav", L".aac", L".ogg", L".flac",
L".mp4", L".avi", L".mov", L".wmv", L".mkv",
L".aux", L".cur", L".mui", L".ttf", L".efi",
NULL
};
wchar_t* g_BlockReg[] = {
L"\\REGISTRY\\MACHINE\\BCD00000000\\**",
L"\\REGISTRY\\MACHINE\\SAM\\**",
L"\\REGISTRY\\MACHINE\\SECURITY\\**",
L"\\REGISTRY\\USER\\*_Classes\\*\\shell\\open\\command\\**",
L"\\REGISTRY\\USER\\S-1-*\\SOFTWARE\\NetWire\\**",
L"\\REGISTRY\\USER\\S-1-*\\SOFTWARE\\Remcos*\\**",
L"\\REGISTRY\\USER\\S-1-*\\SOFTWARE\\DC3_FEXEC\\**",
L"DisableAntiSpyware",
L"DisableWindowsUpdateAccess",
L"EnableLUA",
L"ConsentPromptBehaviorAdmin",
L"NoControlPanel",
L"NoDrives",
L"NoFileMenu",
L"NoFind",
L"NoStartMenuPinnedList",
L"NoSetFolders",
L"NoSetFolderOptions",
L"NoViewOnDrive",
L"NoClose",
L"NoDesktop",
L"NoLogoff",
L"NoFolderOptions",
L"RestrictRun",
L"NoViewContextMenu",
L"HideClock",
L"NoStartMenuMyGames",
L"NoStartMenuMyMusic",
L"DisableCMD",
L"NoAddingComponents",
L"NoWinKeys",
L"NoStartMenuLogOff",
L"NoSimpleNetIDList",
L"NoLowDiskSpaceChecks",
L"DisableLockWorkstation",
L"Restrict_Run",
L"DisableTaskMgr",
L"DisableRegistryTools",
L"DisableChangePassword",
L"Wallpaper",
L"NoComponents",
L"NoStartMenuMorePrograms",
L"NoActiveDesktop",
L"NoSetActiveDesktop",
L"NoRecentDocsMenu",
L"NoWindowsUpdate",
L"NoChangeStartMenu",
L"NoFavoritesMenu",
L"NoRecentDocsHistory",
L"NoSetTaskbar",
L"NoSMHelp",
L"NoTrayContextMenu",
L"NoManageMyComputerVerb",
L"NoRealMode",
L"NoRun",
L"ClearRecentDocsOnExit",
L"NoActiveDesktopChanges",
L"NoStartMenuNetworkPlaces",
L"NoLockScreen",
L"HideFastUserSwitching",
L"ConsentPromptBehaviorUser",
L"EnableSecureUIAPaths",
L"NoSRM",
L"NoInteractiveServices",
L"ShutdownWithoutLogon",
L"AutoAdminLogon",
L"ImagePath",
L"BootExecute",
L"SubSystems",
L"FirmwareBootDevice",
L"BootDriverFlags",
L"SystemStartOptions",
L"CrashDumpEnabled",
L"DisableAutomaticRestartOnFailure",
L"SystemBiosVersion",
L"NoTheme",
L"PendingFileRenameOperations",
L"SystemSetupInProgress",
L"CmdLine",
L"SetupType",
L"AutoReboot",
L"Userinit",
L"UIHost",
L"Debugger",
L"DefaultUserName",
L"DefaultPassword",
L"AltDefaultUserName",
L"AltDefaultPassword",
L"DisableCAD",
L"LegalNoticeCaption",
L"LegalNoticeText",
NULL
};
wchar_t* g_RemoteSuspectBins[] = {
L"powershell.exe",
L"pwsh.exe",
L"wscript.exe",
L"cscript.exe",
L"mshta.exe",
L"rundll32.exe",
L"regsvr32.exe",
L"cmd.exe",
L"bitsadmin.exe",
L"msbuild.exe",
L"installutil.exe",
L"wmic.exe",
NULL
};
wchar_t* g_RemoteCmdIndicatorsHttp[] = {
L"http://",
L"https://",
NULL
};
wchar_t* g_RemoteCmdIndicatorsGeneric[] = {
L"-enc",
L"-e",
L"-encodedcommand",
L"frombase64string(",
L"iex(",
L"downloadstring(",
NULL
};
wchar_t* g_RemoteCmdFromCmdExe[] = {
L"powershell",
L"pwsh",
L"mshta",
L"rundll32",
L"wscript",
L"cscript",
NULL
};
wchar_t* g_RemoteCmdFromRundll32Exe[] = {
L".dll,",
L"javascript:",
L"http",
NULL
};
wchar_t* g_RemoteCmdRegsvr32Need[] = {
L"/i:",
NULL
};
wchar_t* g_RemoteCmdFromMshtaExe[] = {
L"http://",
L"https://",
NULL
};
wchar_t* g_ScreenCapModules[] = {
L"windows.graphics.capture.dll",
L"dxgi.dll",
L"d3d11.dll",
L"dwmapi.dll",
L"dcomp.dll",
L"mfreadwrite.dll",
L"mfplat.dll",
L"opengl32.dll",
L"gdi32full.dll",
L"win32u.dll",
NULL
};
wchar_t* g_ScreenUserSubdirs[] = {
L"\\AppData\\",
L"\\Temp\\",
L"\\Downloads\\",
NULL
};
wchar_t* g_ScreenOtherProcNeedles[] = {
L"\\ProgramData\\",
NULL
};
+25
View File
@@ -0,0 +1,25 @@
#pragma once
#include <ntifs.h>
extern wchar_t* g_Whitelist[];
extern wchar_t* g_WhitelistExcept[];
extern wchar_t* g_AttachDisk[];
extern wchar_t* g_BlockFile[];
extern wchar_t* g_BlockRansom[];
extern wchar_t* g_Blocksuffix[];
extern wchar_t* g_BlockReg[];
extern wchar_t* g_RemoteSuspectBins[];
extern wchar_t* g_RemoteCmdIndicatorsHttp[];
extern wchar_t* g_RemoteCmdIndicatorsGeneric[];
extern wchar_t* g_RemoteCmdFromCmdExe[];
extern wchar_t* g_RemoteCmdFromRundll32Exe[];
extern wchar_t* g_RemoteCmdRegsvr32Need[];
extern wchar_t* g_RemoteCmdFromMshtaExe[];
extern wchar_t* g_ScreenCapModules[];
extern wchar_t* g_ScreenUserSubdirs[];
extern wchar_t* g_ScreenOtherProcNeedles[];
+67
View File
@@ -0,0 +1,67 @@
#include <ntifs.h>
#include "DriverEntry.h"
#include "ProtectMatch.h"
static BOOLEAN g_ScreenImgCb = FALSE;
static VOID ImageLoadNotify(PUNICODE_STRING FullImageName, HANDLE ProcessId, PIMAGE_INFO ImageInfo)
{
UNREFERENCED_PARAMETER(ImageInfo);
if (g_Unloading)
return;
if (KeGetCurrentIrql() != PASSIVE_LEVEL)
return;
if (!ExAcquireRundownProtection(&g_Rundown))
return;
if (!FullImageName || !FullImageName->Buffer || FullImageName->Length == 0) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
UNICODE_STRING proc = { 0 };
WCHAR pbuf[512] = { 0 };
proc.Buffer = pbuf;
proc.MaximumLength = sizeof(pbuf);
if (!GetProcessImagePathByPid(ProcessId, &proc)) {
PEPROCESS eproc = NULL;
if (NT_SUCCESS(PsLookupProcessByProcessId(ProcessId, &eproc))) {
PCSTR n = PsGetProcessImageFileName(eproc);
SIZE_T l = n ? strlen(n) : 0;
for (SIZE_T i = 0; i < l && i < RTL_NUMBER_OF(pbuf) - 1; i++)
pbuf[i] = (WCHAR)n[i];
pbuf[l] = 0;
proc.Length = (USHORT)(l * sizeof(WCHAR));
ObDereferenceObject(eproc);
}
}
if (proc.Length == 0) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
if (IsWhitelist(&proc)) {
ExReleaseRundownProtection(&g_Rundown);
return;
}
BOOLEAN suspicious = MatchSuspiciousProcPath(&proc);
if (suspicious && MatchScreenCapModule(FullImageName))
LogAnsi3("SCREEN_BLOCK", (ULONG)(ULONG_PTR)ProcessId, &proc, FullImageName);
ExReleaseRundownProtection(&g_Rundown);
}
NTSTATUS InitScreenProtect(VOID)
{
NTSTATUS s = PsSetLoadImageNotifyRoutine(ImageLoadNotify);
if (NT_SUCCESS(s)) g_ScreenImgCb = TRUE;
return s;
}
VOID UninitScreenProtect(VOID)
{
if (g_ScreenImgCb) {
PsRemoveLoadImageNotifyRoutine(ImageLoadNotify);
g_ScreenImgCb = FALSE;
}
}
+193 -6
View File
@@ -1,8 +1,195 @@
Python Antivirus Software
# PYAS
Official website:
https://pyantivirus.wixsite.com/pyas ,
https://github.com/87owo/PYAS
Antivirus software written in Python and C that blocks threats through deep learning and behavioral monitoring!
Special thanks to:
Wix, Avast, Github, Google, Python, Microsoft, VirusTotal, VirusShare, LenStevens
<img width="2245" height="1477" alt="PYAS_UI" src="https://github.com/user-attachments/assets/87d40261-7655-49ad-a19c-1ffcca60584f" />
## Requirements
Python 3.10 is recommended. Other Python versions may require different pip commands.
```
pip install numpy==1.26.4
pip install onnxruntime==1.18.1
pip install pefile==2023.2.7
pip install Pillow==11.0.0
pip install pyperclip==1.9.0
pip install PySide6==6.9.1
pip install requests==2.32.4
pip install yara-python==4.5.4
```
## File Information
The following lists the storage locations of all relevant code and other related documents.
```
PYAS/
├── Engine/
│ ├── Models/
│ │ ├── convert.py # Convert executable files or other files to images
│ │ └── train.py # TensorFlow CNN model training complete code
│ │
│ └── Rules/
│ ├── rules.yar # Yara virus signature rule matching
│ └── rules.ips # IP network address rule matching
│
├── Plugins/
│ └── Filter/
│ ├── DriverEntry.c # Main driver entry and initialization logic
│ ├── DriverEntry.h # Global driver definitions, constants, and functions
│ ├── DriverPipe.c # Kernel to user pipe logging implementation
│ ├── ProtectBoot.c # Disk boot sector write protection
│ ├── ProtectImage.c # Image load monitoring and shellcode detection
│ ├── ProtectInject.c # Process thread handle access control to prevent injection
│ ├── ProtectReg.c # Registry modification protection
│ ├── ProtectRules.c # White, block list, and matching logic for files registry
│ └── ProtectRules.h # Protection rule declarations
│
├── PYAS.py # Main application entry point and UI to engine interface
├── PYAS_Config.py # Configuration loading, saving, and global parameters
├── PYAS_Engine.py # Core scanning engine: YARA, IP, ONNX model execution
├── PYAS_Interface.py # User interface components and event handling
├── PYAS_Resource.py # Static image and icon resource management
├── PYAS_Version.py # Version metadata for packaging and updates
└── ... # Other supplementary folders and files
```
## Architecture diagram
PYAS Security antivirus software general architecture diagram.
```mermaid
graph TD
%% Global Styles
classDef ui fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef logic fill:#fff9c4,stroke:#fbc02d,stroke-width:2px;
classDef engine fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
classDef thread fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;
classDef kernel fill:#ffebee,stroke:#c62828,stroke-width:2px;
classDef data fill:#eceff1,stroke:#455a64,stroke-width:2px,stroke-dasharray: 5 5;
User((User))
subgraph Presentation_Layer ["Presentation Layer (View)"]
direction TB
UI_Static["PYAS_Interface.py<br/>(Ui_main_window Class)"]:::ui
UI_Controller["PYAS.py<br/>(MainWindow_Controller Class)"]:::ui
TrayIcon["System Tray Icon"]:::ui
User <--> UI_Controller
UI_Static --- UI_Controller
UI_Controller --- TrayIcon
end
subgraph Core_Logic_Layer ["Core Logic & Controller"]
direction TB
Init_Env["Initialization<br/>(init_environ, init_variable,<br/>init_windll)"]:::logic
Config_Mgr["Configuration Manager<br/>(load_config, save_config)"]:::logic
subgraph System_Tools ["System Tools"]
Sys_Repair["System Repair<br/>(repair_system_mbr,<br/>repair_system_image, etc.)"]:::logic
Sys_Clean["System Cleaner<br/>(clean_button, traverse_temp)"]:::logic
Proc_Mgr["Process Manager<br/>(list_process, kill_process)"]:::logic
List_Mgr["List Manager<br/>(manage_named_list:<br/>Whitelist/Quarantine)"]:::logic
end
UI_Controller --> Init_Env
Init_Env --> Config_Mgr
UI_Controller --> System_Tools
end
subgraph Protection_Layer ["Real-time Protection Threads (Daemons)"]
direction TB
Thread_Proc["Process Guard Thread<br/>(protect_proc_thread)<br/>[WMI/Snapshot]"]:::thread
Thread_File["File Guard Thread<br/>(protect_file_thread)<br/>[ReadDirectoryChangesW]"]:::thread
Thread_Net["Network Guard Thread<br/>(protect_net_thread)<br/>[GetExtendedTcpTable]"]:::thread
Thread_Sys["System Guard Thread<br/>(protect_system_thread)<br/>[Reg/MBR Check]"]:::thread
Thread_Popup["Popup Blocker Thread<br/>(popup_intercept_thread)<br/>[EnumWindows]"]:::thread
Thread_Pipe["Driver IPC Thread<br/>(pipe_server_thread)<br/>[NamedPipe Server]"]:::thread
Init_Env --> Thread_Proc
Init_Env --> Thread_File
Init_Env --> Thread_Net
Init_Env --> Thread_Sys
Init_Env --> Thread_Popup
Init_Env --> Thread_Pipe
end
subgraph Engine_Layer ["Detection Engine (PYAS_Engine.py)"]
direction TB
Scan_Worker["Scan Worker<br/>(scan_worker / scan_engine)"]:::engine
subgraph Scanners
Sign_Check["Signature Scanner<br/>(sign_scanner)<br/>[WinVerifyTrust]"]:::engine
AI_Model["AI Model Scanner<br/>(model_scanner)<br/>[ONNX/ResNet]"]:::engine
Yara_Rules["Rule Scanner<br/>(rule_scanner)<br/>[Yara/IP Lists]"]:::engine
end
Thread_Proc --> Scan_Worker
Thread_File --> Scan_Worker
Thread_Net --> Scan_Worker
UI_Controller -->|Manual Scan| Scan_Worker
Scan_Worker --> Sign_Check
Scan_Worker --> AI_Model
Scan_Worker --> Yara_Rules
end
subgraph Kernel_OS_Layer ["Windows Kernel & Driver"]
direction TB
WinAPI["Windows API (ctypes)<br/>(kernel32, user32, ntdll,<br/>advapi32, iphlpapi, psapi)"]:::kernel
Driver_Sys["Kernel Driver<br/>(PYAS_Driver.sys)"]:::kernel
OS_FS["File System (NTFS)"]:::kernel
OS_Net["Network Stack"]:::kernel
Init_Env -- Load DLLs --> WinAPI
Thread_File -- Monitor --> OS_FS
Thread_Net -- Monitor --> OS_Net
Thread_Proc -- Suspend/Kill --> WinAPI
Thread_Pipe <==>|"Named Pipe IPC<br/>(\\.\pipe\PYAS_Output_Pipe)"| Driver_Sys
Driver_Sys -- Callback/Block --> WinAPI
end
subgraph Data_Persistence ["Data & Resources"]
Config_File[("Config.json")]:::data
Model_Files[("Model Files<br/>(.onnx)")]:::data
Rule_Files[("Rule Files<br/>(.yar)")]:::data
Quarantine_Dir[("/Quarantine/")]:::data
Config_Mgr <--> Config_File
AI_Model <--> Model_Files
Yara_Rules <--> Rule_Files
List_Mgr <--> Quarantine_Dir
end
```
## Support System
| Config | Permissions | System version | Processor | Memory | Storage |
|-----------|---------------|----------------------|-----------|--------|---------|
| Minimum | Administrator | >= Windows 10 (20H1) | 1 GHz | 200MB | 100MB |
| Recommend | Administrator | >= Windows 10 (21H2) | 3 GHz | 500MB | 200MB |
## Packaged Releases
Download the installer. If it is incompatible with your system, you can repackage it yourself.
Packaged Download: https://github.com/87owo/PYAS/releases
## Official Website
If you are interested in this project, you can visit the website to see other related content.
Source Available : https://github.com/87owo/PYAS
Official Website : https://pyas-security.com/antivirus
## Project License
For any questions, needs, or bug feedback, please contact us through the following website.
Source Issues : https://github.com/87owo/PYAS/issues
Official Email : mailto:service.pyas@gmail.com
-10
View File
@@ -1,10 +0,0 @@
import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='2.3.6',
company_name="PYAS",
file_description="Python Antivirus Software",
internal_name="PYAS",
legal_copyright="Copyright© 2020-2022 PYAS",
original_filename="PYAS.exe",
product_name="PYAS")