Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8dbd12b69 | ||
|
|
cf6ba66dd2 | ||
|
|
2080b5d10a | ||
|
|
dd180977d9 | ||
|
|
221dcbaf1b | ||
|
|
1a2098f4fb | ||
|
|
73eab17110 | ||
|
|
978a336358 | ||
|
|
6a0fd4e427 | ||
|
|
5fd4efd920 | ||
|
|
43be2987f5 | ||
|
|
06cc048fdc | ||
|
|
5752471420 | ||
|
|
3dfe12b90a | ||
|
|
ad1e3501b1 | ||
|
|
1b46572e4c | ||
|
|
9d8e42d34c | ||
|
|
3f6e9dab3e |
No files matched your search
@@ -14,7 +14,7 @@ DB_PATH = "pe_features.db"
|
||||
MODEL_FILE = "model.txt"
|
||||
ONNX_FILE = "Pefile_General_S1.onnx"
|
||||
FEATURE_FILE = "features.json"
|
||||
TEST_SIZE = 0.0001
|
||||
TEST_SIZE = 0.1
|
||||
RANDOM_SEED = 42
|
||||
|
||||
LGBM_PARAMS = {
|
||||
@@ -31,8 +31,8 @@ LGBM_PARAMS = {
|
||||
'n_jobs': -1,
|
||||
'max_depth': -1,
|
||||
'min_data_in_leaf': 10,
|
||||
'lambda_l1': 0.1,
|
||||
'lambda_l2': 0.1,
|
||||
'lambda_l1': 0.05,
|
||||
'lambda_l2': 0.05,
|
||||
}
|
||||
|
||||
####################################################################################################
|
||||
@@ -170,11 +170,24 @@ def evaluate_and_save(model, X_test, y_test):
|
||||
acc = accuracy_score(y_test, y_pred)
|
||||
auc = roc_auc_score(y_test, y_prob)
|
||||
|
||||
tp = np.sum((y_test == 1) & (y_pred == 1))
|
||||
fn = np.sum((y_test == 1) & (y_pred == 0))
|
||||
tn = np.sum((y_test == 0) & (y_pred == 0))
|
||||
fp = np.sum((y_test == 0) & (y_pred == 1))
|
||||
|
||||
total_malware = tp + fn
|
||||
total_safe = tn + fp
|
||||
|
||||
detection_rate = (tp / total_malware * 100) if total_malware > 0 else 0.0
|
||||
fpr = (fp / total_safe * 100) if total_safe > 0 else 0.0
|
||||
|
||||
print(f"Accuracy : {acc:.4f}")
|
||||
print(f"ROC AUC : {auc:.4f}")
|
||||
print("\n" + classification_report(y_test, y_pred, zero_division=0))
|
||||
print(f"ROC AUC : {auc:.4f}\n")
|
||||
|
||||
print(f"True Positive (Class 1) : {detection_rate:.3f}% ({tp}/{total_malware})")
|
||||
print(f"False Positive (Class 0) : {fpr:.3f}% ({fp}/{total_safe})")
|
||||
|
||||
print("---------------------------------------------------------\n")
|
||||
print("\n---------------------------------------------------------\n")
|
||||
print("[*] Top 20 Features (Importance by Gain):")
|
||||
|
||||
feature_names = model.feature_name()
|
||||
|
||||
@@ -14,7 +14,7 @@ DB_PATH = "pe_features.db"
|
||||
MODEL_FILE = "model.txt"
|
||||
ONNX_FILE = "Pefile_General_T1.onnx"
|
||||
FEATURE_FILE = "features.json"
|
||||
TEST_SIZE = 0.0001
|
||||
TEST_SIZE = 0.1
|
||||
RANDOM_SEED = 42
|
||||
|
||||
LGBM_PARAMS = {
|
||||
@@ -31,8 +31,8 @@ LGBM_PARAMS = {
|
||||
'n_jobs': -1,
|
||||
'max_depth': -1,
|
||||
'min_data_in_leaf': 10,
|
||||
'lambda_l1': 0.1,
|
||||
'lambda_l2': 0.1,
|
||||
'lambda_l1': 0.05,
|
||||
'lambda_l2': 0.05,
|
||||
}
|
||||
|
||||
####################################################################################################
|
||||
@@ -170,11 +170,24 @@ def evaluate_and_save(model, X_test, y_test):
|
||||
acc = accuracy_score(y_test, y_pred)
|
||||
auc = roc_auc_score(y_test, y_prob)
|
||||
|
||||
tp = np.sum((y_test == 1) & (y_pred == 1))
|
||||
fn = np.sum((y_test == 1) & (y_pred == 0))
|
||||
tn = np.sum((y_test == 0) & (y_pred == 0))
|
||||
fp = np.sum((y_test == 0) & (y_pred == 1))
|
||||
|
||||
total_malware = tp + fn
|
||||
total_safe = tn + fp
|
||||
|
||||
detection_rate = (tp / total_malware * 100) if total_malware > 0 else 0.0
|
||||
fpr = (fp / total_safe * 100) if total_safe > 0 else 0.0
|
||||
|
||||
print(f"Accuracy : {acc:.4f}")
|
||||
print(f"ROC AUC : {auc:.4f}")
|
||||
print("\n" + classification_report(y_test, y_pred, zero_division=0))
|
||||
print(f"ROC AUC : {auc:.4f}\n")
|
||||
|
||||
print(f"True Positive (Class 1) : {detection_rate:.3f}% ({tp}/{total_malware})")
|
||||
print(f"False Positive (Class 0) : {fpr:.3f}% ({fp}/{total_safe})")
|
||||
|
||||
print("---------------------------------------------------------\n")
|
||||
print("\n---------------------------------------------------------\n")
|
||||
print("[*] Top 20 Features (Importance by Gain):")
|
||||
|
||||
feature_names = model.feature_name()
|
||||
|
||||
+167
-167
@@ -4,11 +4,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "此裝置已受到防護",
|
||||
"智能掃描": "智能掃描",
|
||||
"此選項可以快速掃病毒": "此選項可以快速掃描病毒",
|
||||
"此選項可以快速掃描裝置安全性": "此選項可以快速掃描裝置安全性",
|
||||
"日誌導出": "日誌導出",
|
||||
"此選項可以篩選導出日誌": "此選項可以篩選導出日誌",
|
||||
"此選項可以篩選日誌並匯出存檔": "此選項可以篩選日誌並匯出存檔",
|
||||
"病毒掃描": "病毒掃描",
|
||||
"此選項可以選擇掃描方式": "此選項可以選擇掃描方式",
|
||||
"此選項可以選擇進階掃描方式": "此選項可以選擇進階掃描方式",
|
||||
"刪除": "刪除",
|
||||
"選擇": "選擇",
|
||||
"檔案掃描": "檔案掃描",
|
||||
@@ -16,17 +16,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "全盤掃描",
|
||||
"停止": "停止",
|
||||
"進程防護": "進程防護",
|
||||
"此選項可以攔截進程病毒": "此選項可以攔截惡意進程",
|
||||
"此選項可以終止惡意進程運行": "此選項可以終止惡意進程運行",
|
||||
"檔案防護": "檔案防護",
|
||||
"此選項可以攔截檔案變更": "此選項可以攔截惡意檔案變更",
|
||||
"此選項可以隔離惡意檔案建立": "此選項可以隔離惡意檔案建立",
|
||||
"系統防護": "系統防護",
|
||||
"此選項可以攔截系統項目": "此選項可以防護系統關鍵項目",
|
||||
"此選項可以實時修復系統異常": "此選項可以實時修復系統異常",
|
||||
"驅動防護": "驅動防護",
|
||||
"此選項可以增強自身防護": "此選項可以增強自身防護",
|
||||
"此選項可以實時攔截惡意行為": "此選項可以實時攔截惡意行為",
|
||||
"網路防護": "網路防護",
|
||||
"此選項可以攔截網路通訊": "此選項可以攔截惡意網路連線",
|
||||
"此選項可以攔截惡意網路連接": "此選項可以攔截惡意網路連接",
|
||||
"自訂防護": "自訂防護",
|
||||
"此選項可以導入自訂防護": "此選項可以導入自訂防護規則",
|
||||
"此選項可以導入自訂防護規則": "此選項可以導入自訂防護規則",
|
||||
"進程管理": "進程管理",
|
||||
"此選項可以實時查看系統進程": "此選項可以實時查看系統進程",
|
||||
"垃圾清理": "垃圾清理",
|
||||
@@ -36,15 +36,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "彈窗攔截",
|
||||
"此選項可以選擇指定窗口攔截": "此選項可以選擇指定窗口攔截",
|
||||
"白名單": "白名單",
|
||||
"此選項可以管理系統白名單": "此選項可以管理系統白名單",
|
||||
"此選項可以查看並管理白名單": "此選項可以查看並管理白名單",
|
||||
"隔離區": "隔離區",
|
||||
"此選項可以管理已隔離的檔案": "此選項可以管理已隔離的檔案",
|
||||
"此選項可以查看並管理隔離區": "此選項可以查看並管理隔離區",
|
||||
"增強模式": "增強模式",
|
||||
"此選項可以增強掃描引擎": "此選項可以增強掃描引擎",
|
||||
"此選項可以增強靜態掃描引擎": "此選項可以增強靜態掃描引擎",
|
||||
"擴展引擎": "擴展引擎",
|
||||
"此選項可以使用擴展引擎": "此選項可以使用擴展引擎",
|
||||
"此選項可以使用擴展規則引擎": "此選項可以使用擴展規則引擎",
|
||||
"雲端服務": "雲端服務",
|
||||
"此選項可以上報雲端引擎": "此選項可以將可疑檔案上報至雲端",
|
||||
"此選項可以自動上報可疑檔案": "此選項可以自動上報可疑檔案",
|
||||
"顯色主題": "顯色主題",
|
||||
"此選項可以選擇主題顏色": "此選項可以選擇主題顏色",
|
||||
"白色主題": "白色主題",
|
||||
@@ -108,7 +108,7 @@ window.AppI18n = {
|
||||
"正在掃描": "正在掃描",
|
||||
"正在刪除": "正在刪除",
|
||||
"選單掃描": "選單掃描",
|
||||
"此選項可以加入右鍵掃描": "此選項可以加入右鍵掃描",
|
||||
"此選項可以啟用右鍵掃描功能": "此選項可以啟用右鍵掃描功能",
|
||||
"刪除項目": "刪除項目",
|
||||
"忽略項目": "忽略項目",
|
||||
"加入隔離區": "加入隔離區",
|
||||
@@ -130,11 +130,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "此设备已受到防护",
|
||||
"智能掃描": "智能扫描",
|
||||
"此選項可以快速掃病毒": "此选项可以快速扫描病毒",
|
||||
"此選項可以快速掃描裝置安全性": "此选项可以快速扫描设备安全性",
|
||||
"日誌導出": "日志导出",
|
||||
"此選項可以篩選導出日誌": "此选项可以筛选并导出日志",
|
||||
"此選項可以篩選日誌並匯出存檔": "此选项可以筛选日志并导出存档",
|
||||
"病毒掃描": "病毒扫描",
|
||||
"此選項可以選擇掃描方式": "此选项可以选择扫描方式",
|
||||
"此選項可以選擇進階掃描方式": "此选项可以选择高级扫描方式",
|
||||
"刪除": "删除",
|
||||
"選擇": "选择",
|
||||
"檔案掃描": "文件扫描",
|
||||
@@ -142,19 +142,19 @@ window.AppI18n = {
|
||||
"全盤掃描": "全盘扫描",
|
||||
"停止": "停止",
|
||||
"進程防護": "进程防护",
|
||||
"此選項可以攔截進程病毒": "此选项可以拦截恶意进程",
|
||||
"此選項可以終止惡意進程運行": "此选项可以终止恶意进程运行",
|
||||
"檔案防護": "文件防护",
|
||||
"此選項可以攔截檔案變更": "此选项可以拦截恶意文件变更",
|
||||
"此選項可以隔離惡意檔案建立": "此选项可以隔离恶意文件建立",
|
||||
"系統防護": "系统防护",
|
||||
"此選項可以攔截系統項目": "此选项可以防护系统关键项目",
|
||||
"此選項可以實時修復系統異常": "此选项可以实时修复系统异常",
|
||||
"驅動防護": "驱动防护",
|
||||
"此選項可以增強自身防護": "此选项可以增强自身防护",
|
||||
"此選項可以實時攔截惡意行為": "此选项可以实时拦截恶意行为",
|
||||
"網路防護": "网络防护",
|
||||
"此選項可以攔截網路通訊": "此选项可以拦截恶意网络连线",
|
||||
"此選項可以攔截惡意網路連接": "此选项可以拦截恶意网络连接",
|
||||
"自訂防護": "自订防护",
|
||||
"此選項可以導入自訂防護": "此选项可以导入自订防护规则",
|
||||
"此選項可以導入自訂防護規則": "此选项可以导入自定义防护规则",
|
||||
"進程管理": "进程管理",
|
||||
"此選項可以實時查看系統进程": "此选项可以实时查看系统进程",
|
||||
"此選項可以實時查看系統進程": "此选项可以实时查看系统进程",
|
||||
"垃圾清理": "垃圾清理",
|
||||
"此選項可以清理暫存垃圾檔案": "此选项可以清理暂存垃圾文件",
|
||||
"系統修復": "系统修复",
|
||||
@@ -162,15 +162,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "弹窗拦截",
|
||||
"此選項可以選擇指定窗口攔截": "此选项可以选择指定窗口拦截",
|
||||
"白名單": "白名单",
|
||||
"此選項可以管理系統白名單": "此选项可以管理系统白名单",
|
||||
"此選項可以查看並管理白名單": "此选项可以查看并管理白名单",
|
||||
"隔離區": "隔离区",
|
||||
"此選項可以管理已隔離的檔案": "此选项可以管理已隔离的文件",
|
||||
"此選項可以查看並管理隔離區": "此选项可以查看并管理隔离区",
|
||||
"增強模式": "增强模式",
|
||||
"此選項可以增強掃描引擎": "此选项可以增强扫描引擎",
|
||||
"此選項可以增強靜態掃描引擎": "此选项可以增强静态扫描引擎",
|
||||
"擴展引擎": "扩展引擎",
|
||||
"此選項可以使用擴展引擎": "此选项可以使用扩展引擎",
|
||||
"此選項可以使用擴展規則引擎": "此选项可以使用扩展规则引擎",
|
||||
"雲端服務": "云端服务",
|
||||
"此選項可以上報雲端引擎": "此选项可以将可疑文件上报至云端",
|
||||
"此選項可以自動上報可疑檔案": "此选项可以自动上报可疑文件",
|
||||
"顯色主題": "显色主题",
|
||||
"此選項可以選擇主題顏色": "此选项可以选择主题颜色",
|
||||
"白色主題": "白色主题",
|
||||
@@ -234,7 +234,7 @@ window.AppI18n = {
|
||||
"正在掃描": "正在扫描",
|
||||
"正在刪除": "正在删除",
|
||||
"選單掃描": "菜单扫描",
|
||||
"此選項可以加入右鍵掃描": "此选项可以加入右键扫描菜单",
|
||||
"此選項可以啟用右鍵掃描功能": "此选项可以启用右键扫描功能",
|
||||
"刪除項目": "删除项目",
|
||||
"忽略項目": "忽略项目",
|
||||
"加入隔離區": "加入隔离区",
|
||||
@@ -256,11 +256,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "This Device is Protected",
|
||||
"智能掃描": "Smart Scan",
|
||||
"此選項可以快速掃病毒": "Quickly scan for viruses",
|
||||
"此選項可以快速掃描裝置安全性": "Quickly scan device security",
|
||||
"日誌導出": "Export Logs",
|
||||
"此選項可以篩選導出日誌": "Filter and export system logs",
|
||||
"此選項可以篩選日誌並匯出存檔": "Filter logs and export to archive",
|
||||
"病毒掃描": "Virus Scan",
|
||||
"此選項可以選擇掃描方式": "Select a scanning method",
|
||||
"此選項可以選擇進階掃描方式": "Select an advanced scanning method",
|
||||
"刪除": "Delete",
|
||||
"選擇": "Select",
|
||||
"檔案掃描": "File Scan",
|
||||
@@ -268,17 +268,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "Full Scan",
|
||||
"停止": "Stop",
|
||||
"進程防護": "Process Protection",
|
||||
"此選項可以攔截進程病毒": "Block malicious processes",
|
||||
"此選項可以終止惡意進程運行": "Terminate malicious process execution",
|
||||
"檔案防護": "File Protection",
|
||||
"此選項可以攔截檔案變更": "Block malicious file modifications",
|
||||
"此選項可以隔離惡意檔案建立": "Quarantine malicious file creation",
|
||||
"系統防護": "System Protection",
|
||||
"此選項可以攔截系統項目": "Protect critical system components",
|
||||
"此選項可以實時修復系統異常": "Real-time repair of system anomalies",
|
||||
"驅動防護": "Driver Protection",
|
||||
"此選項可以增強自身防護": "Enhance self-defense mechanisms",
|
||||
"此選項可以實時攔截惡意行為": "Real-time interception of malicious behavior",
|
||||
"網路防護": "Network Protection",
|
||||
"此選項可以攔截網路通訊": "Block malicious network connections",
|
||||
"此選項可以攔截惡意網路連接": "Block malicious network connections",
|
||||
"自訂防護": "Custom Protection",
|
||||
"此選項可以導入自訂防護": "Import custom protection rules",
|
||||
"此選項可以導入自訂防護規則": "Import custom protection rules",
|
||||
"進程管理": "Process Manager",
|
||||
"此選項可以實時查看系統進程": "Monitor real-time system processes",
|
||||
"垃圾清理": "Junk Cleanup",
|
||||
@@ -288,15 +288,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "Popup Blocker",
|
||||
"此選項可以選擇指定窗口攔截": "Block specific popup windows",
|
||||
"白名單": "Whitelist",
|
||||
"此選項可以管理系統白名單": "Manage system whitelist",
|
||||
"此選項可以查看並管理白名單": "View and manage the whitelist",
|
||||
"隔離區": "Quarantine",
|
||||
"此選項可以管理已隔離的檔案": "Manage quarantined files",
|
||||
"此選項可以查看並管理隔離區": "View and manage the quarantine",
|
||||
"增強模式": "Enhanced Mode",
|
||||
"此選項可以增強掃描引擎": "Enhance the scanning engine",
|
||||
"此選項可以增強靜態掃描引擎": "Enhance the static scanning engine",
|
||||
"擴展引擎": "Extension Engine",
|
||||
"此選項可以使用擴展引擎": "Enable external extension engines",
|
||||
"此選項可以使用擴展規則引擎": "Enable extension rule engines",
|
||||
"雲端服務": "Cloud Service",
|
||||
"此選項可以上報雲端引擎": "Report suspicious files to the cloud",
|
||||
"此選項可以自動上報可疑檔案": "Automatically report suspicious files",
|
||||
"顯色主題": "Color Theme",
|
||||
"此選項可以選擇主題顏色": "Select application color theme",
|
||||
"白色主題": "Light Mode",
|
||||
@@ -360,7 +360,7 @@ window.AppI18n = {
|
||||
"正在掃描": "Scanning...",
|
||||
"正在刪除": "Deleting...",
|
||||
"選單掃描": "Context Menu Scan",
|
||||
"此選項可以加入右鍵掃描": "Add scan option to right-click menu",
|
||||
"此選項可以啟用右鍵掃描功能": "Enable right-click scan functionality",
|
||||
"刪除項目": "Delete Items",
|
||||
"忽略項目": "Ignore Items",
|
||||
"加入隔離區": "Add to Quarantine",
|
||||
@@ -382,11 +382,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "このデバイスは保護されています",
|
||||
"智能掃描": "スマートスキャン",
|
||||
"此選項可以快速掃病毒": "ウイルスを迅速にスキャンします",
|
||||
"此選項可以快速掃描裝置安全性": "デバイスのセキュリティを迅速にスキャンします",
|
||||
"日誌導出": "ログのエクスポート",
|
||||
"此選項可以篩選導出日誌": "システムログをフィルタリングしてエクスポートします",
|
||||
"此選項可以篩選日誌並匯出存檔": "ログをフィルタリングしてアーカイブにエクスポートします",
|
||||
"病毒掃描": "ウイルススキャン",
|
||||
"此選項可以選擇掃描方式": "スキャン方法を選択します",
|
||||
"此選項可以選擇進階掃描方式": "高度なスキャン方法を選択します",
|
||||
"刪除": "削除",
|
||||
"選擇": "選択",
|
||||
"檔案掃描": "ファイルスキャン",
|
||||
@@ -394,17 +394,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "フルスキャン",
|
||||
"停止": "停止",
|
||||
"進程防護": "プロセス保護",
|
||||
"此選項可以攔截進程病毒": "悪意のあるプロセスをブロックします",
|
||||
"此選項可以終止惡意進程運行": "悪意のあるプロセスの実行を終了します",
|
||||
"檔案防護": "ファイル保護",
|
||||
"此選項可以攔截檔案變更": "悪意のあるファイル変更をブロックします",
|
||||
"此選項可以隔離惡意檔案建立": "悪意のあるファイルの作成を隔離します",
|
||||
"系統防護": "システム保護",
|
||||
"此選項可以攔截系統項目": "重要なシステムコンポーネントを保護します",
|
||||
"此選項可以實時修復系統異常": "システムの異常をリアルタイムで修復します",
|
||||
"驅動防護": "ドライバー保護",
|
||||
"此選項可以增強自身防護": "自己防衛メカニズムを強化します",
|
||||
"此選項可以實時攔截惡意行為": "悪意のある動作をリアルタイムでインターセプトします",
|
||||
"網路防護": "ネットワーク保護",
|
||||
"此選項可以攔截網路通訊": "悪意のあるネットワーク接続をブロックします",
|
||||
"此選項可以攔截惡意網路連接": "悪意のあるネットワーク接続をブロックします",
|
||||
"自訂防護": "カスタム保護",
|
||||
"此選項可以導入自訂防護": "カスタム保護ルールをインポートします",
|
||||
"此選項可以導入自訂防護規則": "カスタム保護ルールをインポートします",
|
||||
"進程管理": "プロセス管理",
|
||||
"此選項可以實時查看系統進程": "システムプロセスをリアルタイムで監視します",
|
||||
"垃圾清理": "ジャンククリーンアップ",
|
||||
@@ -414,15 +414,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "ポップアップブロック",
|
||||
"此選項可以選擇指定窗口攔截": "特定のポップアップウィンドウをブロックします",
|
||||
"白名單": "ホワイトリスト",
|
||||
"此選項可以管理系統白名單": "システムのホワイトリストを管理します",
|
||||
"此選項可以查看並管理白名單": "ホワイトリストを表示および管理します",
|
||||
"隔離區": "隔離",
|
||||
"此選項可以管理已隔離的檔案": "隔離されたファイルを管理します",
|
||||
"此選項可以查看並管理隔離區": "隔離領域を表示および管理します",
|
||||
"增強模式": "強化モード",
|
||||
"此選項可以增強掃描引擎": "スキャンエンジンを強化します",
|
||||
"此選項可以增強靜態掃描引擎": "静的スキャンエンジンを強化します",
|
||||
"擴展引擎": "拡張エンジン",
|
||||
"此選項可以使用擴展引擎": "外部拡張エンジンを有効にします",
|
||||
"此選項可以使用擴展規則引擎": "拡張ルールエンジンを有効にします",
|
||||
"雲端服務": "クラウドサービス",
|
||||
"此選項可以上報雲端引擎": "疑わしいファイルをクラウドに報告します",
|
||||
"此選項可以自動上報可疑檔案": "不審なファイルを自動的に報告します",
|
||||
"顯色主題": "カラーテーマ",
|
||||
"此選項可以選擇主題顏色": "アプリケーションのテーマカラーを選択します",
|
||||
"白色主題": "ライトモード",
|
||||
@@ -486,7 +486,7 @@ window.AppI18n = {
|
||||
"正在掃描": "スキャン中...",
|
||||
"正在刪除": "削除中...",
|
||||
"選單掃描": "コンテキストメニュースキャン",
|
||||
"此選項可以加入右鍵掃描": "右クリックメニューにスキャンオプションを追加します",
|
||||
"此選項可以啟用右鍵掃描功能": "右クリックでスキャン機能を有効にします",
|
||||
"刪除項目": "アイテムを削除",
|
||||
"忽略項目": "アイテムを無視",
|
||||
"加入隔離區": "隔離に追加",
|
||||
@@ -508,11 +508,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "이 장치는 보호되고 있습니다",
|
||||
"智能掃描": "스마트 스캔",
|
||||
"此選項可以快速掃病毒": "바이러스를 빠르게 스캔합니다",
|
||||
"此選項可以快速掃描裝置安全性": "디바이스 보안을 빠르게 스캔합니다",
|
||||
"日誌導出": "로그 내보내기",
|
||||
"此選項可以篩選導出日誌": "시스템 로그를 필터링하고 내보냅니다",
|
||||
"此選項可以篩選日誌並匯出存檔": "로그를 필터링하고 아카이브로 내보냅니다",
|
||||
"病毒掃描": "바이러스 스캔",
|
||||
"此選項可以選擇掃描方式": "스캔 방법을 선택합니다",
|
||||
"此選項可以選擇進階掃描方式": "고급 스캔 방법을 선택합니다",
|
||||
"刪除": "삭제",
|
||||
"選擇": "선택",
|
||||
"檔案掃描": "파일 스캔",
|
||||
@@ -520,17 +520,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "전체 스캔",
|
||||
"停止": "정지",
|
||||
"進程防護": "프로세스 보호",
|
||||
"此選項可以攔截進程病毒": "악성 프로세스를 차단합니다",
|
||||
"此選項可以終止惡意進程運行": "악성 프로세스 실행을 종료합니다",
|
||||
"檔案防護": "파일 보호",
|
||||
"此選項可以攔截檔案變更": "악의적인 파일 변경을 차단합니다",
|
||||
"此選項可以隔離惡意檔案建立": "악성 파일 생성을 격리합니다",
|
||||
"系統防護": "시스템 보호",
|
||||
"此選項可以攔截系統項目": "중요한 시스템 구성 요소를 보호합니다",
|
||||
"此選項可以實時修復系統異常": "시스템 이상을 실시간으로 복구합니다",
|
||||
"驅動防護": "드라이버 보호",
|
||||
"此選項可以增強自身防護": "자체 보호 메커니즘을 강화합니다",
|
||||
"此選項可以實時攔截惡意行為": "악의적인 행동을 실시간으로 차단합니다",
|
||||
"網路防護": "네트워크 보호",
|
||||
"此選項可以攔截網路通訊": "악의적인 네트워크 연결을 차단합니다",
|
||||
"此選項可以攔截惡意網路連接": "악의적인 네트워크 연결을 차단합니다",
|
||||
"自訂防護": "사용자 지정 보호",
|
||||
"此選項可以導入自訂防護": "사용자 지정 보호 규칙을 가져옵니다",
|
||||
"此選項可以導入自訂防護規則": "사용자 지정 보호 규칙을 가져옵니다",
|
||||
"進程管理": "프로세스 관리",
|
||||
"此選項可以實時查看系統進程": "실시간으로 시스템 프로세스를 모니터링합니다",
|
||||
"垃圾清理": "정크 정리",
|
||||
@@ -540,15 +540,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "팝업 차단",
|
||||
"此選項可以選擇指定窗口攔截": "특정 팝업 창을 차단합니다",
|
||||
"白名單": "화이트리스트",
|
||||
"此選項可以管理系統白名單": "시스템 화이트리스트를 관리합니다",
|
||||
"此選項可以查看並管理白名單": "화이트리스트를 보고 관리합니다",
|
||||
"隔離區": "격리소",
|
||||
"此選項可以管理已隔離的檔案": "격리된 파일을 관리합니다",
|
||||
"此選項可以查看並管理隔離區": "격리 구역을 보고 관리합니다",
|
||||
"增強模式": "고급 모드",
|
||||
"此選項可以增強掃描引擎": "스캔 엔진을 강화합니다",
|
||||
"此選項可以增強靜態掃描引擎": "정적 스캔 엔진을 강화합니다",
|
||||
"擴展引擎": "확장 엔진",
|
||||
"此選項可以使用擴展引擎": "외부 확장 엔진을 활성화합니다",
|
||||
"此選項可以使用擴展規則引擎": "확장 규칙 엔진을 활성화합니다",
|
||||
"雲端服務": "클라우드 서비스",
|
||||
"此選項可以上報雲端引擎": "의심스러운 파일을 클라우드에 보고합니다",
|
||||
"此選項可以自動上報可疑檔案": "의심스러운 파일을 자동으로 보고합니다",
|
||||
"顯色主題": "색상 테마",
|
||||
"此選項可以選擇主題顏色": "응용 프로그램 테마 색상을 선택합니다",
|
||||
"白色主題": "라이트 모드",
|
||||
@@ -591,7 +591,7 @@ window.AppI18n = {
|
||||
"結束進程?": "프로세스를 종료하시겠습니까?",
|
||||
"確定要結束選取的進程嗎?": "선택한 프로세스를 종료하시겠습니까?",
|
||||
"已清理 ": "정리 완료 ",
|
||||
"設定已重置,請重新啟동程式以套用預設值。": "설정이 초기화되었습니다. 기본값을 적용하려면 프로그램을 다시 시작하십시오.",
|
||||
"設定已重置,請重新啟動程式以套用預設值。": "설정이 초기화되었습니다. 기본값을 적용하려면 프로그램을 다시 시작하십시오.",
|
||||
"導出成功": "내보내기 성공",
|
||||
"選取進程路徑:\n": "선택된 프로세스 경로:\n",
|
||||
"對 ": "대상: ",
|
||||
@@ -612,7 +612,7 @@ window.AppI18n = {
|
||||
"正在掃描": "스캔 중...",
|
||||
"正在刪除": "삭제 중...",
|
||||
"選單掃描": "컨텍스트 메뉴 스캔",
|
||||
"此選項可以加入右鍵掃描": "마우스 우클릭 메뉴에 스캔 옵션을 추가합니다",
|
||||
"此選項可以啟用右鍵掃描功能": "우클릭 스캔 기능을 활성화합니다",
|
||||
"刪除項目": "항목 삭제",
|
||||
"忽略項目": "항목 무시",
|
||||
"加入隔離區": "격리소에 추가",
|
||||
@@ -634,11 +634,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "Cet appareil est protégé",
|
||||
"智能掃描": "Analyse intelligente",
|
||||
"此選項可以快速掃病毒": "Analysez rapidement les virus",
|
||||
"此選項可以快速掃描裝置安全性": "Analyser rapidement la sécurité de l'appareil",
|
||||
"日誌導出": "Exporter les journaux",
|
||||
"此選項可以篩選導出日誌": "Filtrer et exporter les journaux système",
|
||||
"此選項可以篩選日誌並匯出存檔": "Filtrer les journaux et les exporter vers l'archive",
|
||||
"病毒掃描": "Analyse antivirus",
|
||||
"此選項可以選擇掃描方式": "Sélectionnez une méthode d'analyse",
|
||||
"此選項可以選擇進階掃描方式": "Sélectionnez une méthode d'analyse avancée",
|
||||
"刪除": "Supprimer",
|
||||
"選擇": "Sélectionner",
|
||||
"檔案掃描": "Analyse de fichier",
|
||||
@@ -646,17 +646,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "Analyse complète",
|
||||
"停止": "Arrêter",
|
||||
"進程防護": "Protection des processus",
|
||||
"此選項可以攔截進程病毒": "Bloque les processus malveillants",
|
||||
"此選項可以終止惡意進程運行": "Mettre fin à l'exécution de processus malveillants",
|
||||
"檔案防護": "Protection des fichiers",
|
||||
"此選項可以攔截檔案變更": "Bloque les modifications de fichiers malveillantes",
|
||||
"此選項可以隔離惡意檔案建立": "Mettre en quarantaine la création de fichiers malveillants",
|
||||
"系統防護": "Protection du système",
|
||||
"此選項可以攔截系統項目": "Protège les composants critiques du système",
|
||||
"此選項可以實時修復系統異常": "Réparation en temps réel des anomalies du système",
|
||||
"驅動防護": "Protection des pilotes",
|
||||
"此選項可以增強自身防護": "Améliore les mécanismes d'autodéfense",
|
||||
"此選項可以實時攔截惡意行為": "Interception en temps réel des comportements malveillants",
|
||||
"網路防護": "Protection réseau",
|
||||
"此選項可以攔截網路通訊": "Bloque les connexions réseau malveillantes",
|
||||
"此選項可以攔截惡意網路連接": "Bloquer les connexions réseau malveillantes",
|
||||
"自訂防護": "Protection personnalisée",
|
||||
"此選項可以導入自訂防護": "Importer des règles de protection personnalisées",
|
||||
"此選項可以導入自訂防護規則": "Importer des règles de protection personnalisées",
|
||||
"進程管理": "Gestionnaire de processus",
|
||||
"此選項可以實時查看系統進程": "Surveille les processus système en temps réel",
|
||||
"垃圾清理": "Nettoyage des déchets",
|
||||
@@ -666,15 +666,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "Bloqueur de fenêtres contextuelles",
|
||||
"此選項可以選擇指定窗口攔截": "Bloque les fenêtres contextuelles spécifiques",
|
||||
"白名單": "Liste blanche",
|
||||
"此選項可以管理系統白名單": "Gérer la liste blanche du système",
|
||||
"此選項可以查看並管理白名單": "Afficher et gérer la liste blanche",
|
||||
"隔離區": "Quarantaine",
|
||||
"此選項可以管理已隔離的檔案": "Gérer les fichiers mis en quarantaine",
|
||||
"此選項可以查看並管理隔離區": "Afficher et gérer la zone de quarantaine",
|
||||
"增強模式": "Mode amélioré",
|
||||
"此選項可以增強掃描引擎": "Améliore le moteur d'analyse",
|
||||
"此選項可以增強靜態掃描引擎": "Améliorer le moteur d'analyse statique",
|
||||
"擴展引擎": "Moteur d'extension",
|
||||
"此選項可以使用擴展引擎": "Activer les moteurs d'extension externes",
|
||||
"此選項可以使用擴展規則引擎": "Activer les moteurs de règles d'extension",
|
||||
"雲端服務": "Service cloud",
|
||||
"此選項可以上報雲端引擎": "Signaler les fichiers suspects au cloud",
|
||||
"此選項可以自動上報可疑檔案": "Signaler automatiquement les fichiers suspects",
|
||||
"顯色主題": "Thème de couleur",
|
||||
"此選項可以選擇主題顏色": "Sélectionnez le thème de couleur de l'application",
|
||||
"白色主題": "Mode clair",
|
||||
@@ -738,7 +738,7 @@ window.AppI18n = {
|
||||
"正在掃描": "Analyse en cours...",
|
||||
"正在刪除": "Suppression en cours...",
|
||||
"選單掃描": "Analyse du menu contextuel",
|
||||
"此選項可以加入右鍵掃描": "Ajouter l'option d'analyse au menu contextuel",
|
||||
"此選項可以啟用右鍵掃描功能": "Activer la fonctionnalité d'analyse par clic droit",
|
||||
"刪除項目": "Supprimer les éléments",
|
||||
"忽略項目": "Ignorer les éléments",
|
||||
"加入隔離區": "Ajouter à la quarantaine",
|
||||
@@ -760,11 +760,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "Este dispositivo está protegido",
|
||||
"智能掃描": "Escaneo inteligente",
|
||||
"此選項可以快速掃病毒": "Escanea rápidamente en busca de virus",
|
||||
"此選項可以快速掃描裝置安全性": "Escanear rápidamente la seguridad del dispositivo",
|
||||
"日誌導出": "Exportar registros",
|
||||
"此選項可以篩選導出日誌": "Filtrar y exportar registros del sistema",
|
||||
"此選項可以篩選日誌並匯出存檔": "Filtrar registros y exportar a un archivo",
|
||||
"病毒掃描": "Escaneo de virus",
|
||||
"此選項可以選擇掃描方式": "Seleccione un método de escaneo",
|
||||
"此選項可以選擇進階掃描方式": "Seleccione un método de escaneo avanzado",
|
||||
"刪除": "Eliminar",
|
||||
"選擇": "Seleccionar",
|
||||
"檔案掃描": "Escaneo de archivos",
|
||||
@@ -772,17 +772,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "Escaneo completo",
|
||||
"停止": "Detener",
|
||||
"進程防護": "Protección de procesos",
|
||||
"此選項可以攔截進程病毒": "Bloquea procesos maliciosos",
|
||||
"此選項可以終止惡意進程運行": "Terminar la ejecución de procesos maliciosos",
|
||||
"檔案防護": "Protección de archivos",
|
||||
"此選項可以攔截檔案變更": "Bloquea modificaciones de archivos maliciosos",
|
||||
"此選項可以隔離惡意檔案建立": "Poner en cuarentena la creación de archivos maliciosos",
|
||||
"系統防護": "Protección del sistema",
|
||||
"此選項可以攔截系統項目": "Protege componentes críticos del sistema",
|
||||
"此選項可以實時修復系統異常": "Reparación en tiempo real de anomalías del sistema",
|
||||
"驅動防護": "Protección de controladores",
|
||||
"此選項可以增強自身防護": "Mejora los mecanismos de autodefensa",
|
||||
"此選項可以實時攔截惡意行為": "Interceptación en tiempo real de comportamientos maliciosos",
|
||||
"網路防護": "Protección de red",
|
||||
"此選項可以攔截網路通訊": "Bloquea conexiones de red maliciosas",
|
||||
"此選項可以攔截惡意網路連接": "Bloquear conexiones de red maliciosas",
|
||||
"自訂防護": "Protección personalizada",
|
||||
"此選項可以導入自訂防護": "Importar reglas de protección personalizadas",
|
||||
"此選項可以導入自訂防護規則": "Importar reglas de protección personalizadas",
|
||||
"進程管理": "Administrador de procesos",
|
||||
"此選項可以實時查看系統進程": "Monitorea procesos del sistema en tiempo real",
|
||||
"垃圾清理": "Limpieza de basura",
|
||||
@@ -792,15 +792,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "Bloqueador de ventanas emergentes",
|
||||
"此選項可以選擇指定窗口攔截": "Bloquea ventanas emergentes específicas",
|
||||
"白名單": "Lista blanca",
|
||||
"此選項可以管理系統白名單": "Gestionar la lista blanca del sistema",
|
||||
"此選項可以查看並管理白名單": "Ver y administrar la lista blanca",
|
||||
"隔離區": "Cuarentena",
|
||||
"此選項可以管理已隔離的檔案": "Gestionar archivos en cuarentena",
|
||||
"此選項可以查看並管理隔離區": "Ver y administrar la zona de cuarentena",
|
||||
"增強模式": "Modo mejorado",
|
||||
"此選項可以增強掃描引擎": "Mejora el motor de escaneo",
|
||||
"此選項可以增強靜態掃描引擎": "Mejorar el motor de escaneo estático",
|
||||
"擴展引擎": "Motor de extensión",
|
||||
"此選項可以使用擴展引擎": "Habilitar motores de extensión externos",
|
||||
"此選項可以使用擴展規則引擎": "Habilitar motores de reglas de extensión",
|
||||
"雲端服務": "Servicio en la nube",
|
||||
"此選項可以上報雲端引擎": "Reportar archivos sospechosos a la nube",
|
||||
"此選項可以自動上報可疑檔案": "Reportar automáticamente archivos sospechosos",
|
||||
"顯色主題": "Tema de color",
|
||||
"此選項可以選擇主題顏色": "Seleccione el tema de color de la aplicación",
|
||||
"白色主題": "Modo claro",
|
||||
@@ -864,7 +864,7 @@ window.AppI18n = {
|
||||
"正在掃描": "Escaneando...",
|
||||
"正在刪除": "Eliminando...",
|
||||
"選單掃描": "Escaneo de menú contextual",
|
||||
"此選項可以加入右鍵掃描": "Añadir opción de escaneo al menú contextual",
|
||||
"此選項可以啟用右鍵掃描功能": "Habilitar la función de escaneo con el botón derecho",
|
||||
"刪除項目": "Eliminar elementos",
|
||||
"忽略項目": "Ignorar elementos",
|
||||
"加入隔離區": "Añadir a la cuarentena",
|
||||
@@ -886,11 +886,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "यह डिवाइस सुरक्षित है",
|
||||
"智能掃描": "स्मार्ट स्कैन",
|
||||
"此選項可以快速掃病毒": "वायरस के लिए जल्दी स्कैन करें",
|
||||
"此選項可以快速掃描裝置安全性": "डिवाइस सुरक्षा को जल्दी स्कैन करें",
|
||||
"日誌導出": "लॉग निर्यात",
|
||||
"此選項可以篩選導出日誌": "सिस्टम लॉग को फ़िल्टर और निर्यात करें",
|
||||
"此選項可以篩選日誌並匯出存檔": "लॉग फ़िल्टर करें और संग्रह में निर्यात करें",
|
||||
"病毒掃描": "वायरस स्कैन",
|
||||
"此選項可以選擇掃描方式": "एक स्कैनिंग विधि चुनें",
|
||||
"此選項可以選擇進階掃描方式": "एक उन्नत स्कैनिंग विधि चुनें",
|
||||
"刪除": "हटाएं",
|
||||
"選擇": "चुनें",
|
||||
"檔案掃描": "फ़ाइल स्कैन",
|
||||
@@ -898,17 +898,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "पूर्ण स्कैन",
|
||||
"停止": "रोकें",
|
||||
"進程防護": "प्रक्रिया सुरक्षा",
|
||||
"此選項可以攔截進程病毒": "दुर्भावनापूर्ण प्रक्रियाओं को रोकें",
|
||||
"此選項可以終止惡意進程運行": "दुर्भावनापूर्ण प्रक्रिया निष्पादन को समाप्त करें",
|
||||
"檔案防護": "फ़ाइल सुरक्षा",
|
||||
"此選項可以攔截檔案變更": "दुर्भावनापूर्ण फ़ाइल संशोधनों को रोकें",
|
||||
"此選項可以隔離惡意檔案建立": "दुर्भावनापूर्ण फ़ाइल निर्माण को संगरोध करें",
|
||||
"系統防護": "सिस्टम सुरक्षा",
|
||||
"此選項可以攔截系統項目": "महत्वपूर्ण सिस्टम घटकों की रक्षा करें",
|
||||
"此選項可以實時修復系統異常": "सिस्टम विसंगतियों की रीयल-टाइम मरम्मत",
|
||||
"驅動防護": "ड्राइवर सुरक्षा",
|
||||
"此選項可以增強自身防護": "आत्मरक्षा तंत्र को बढ़ाएं",
|
||||
"此選項可以實時攔截惡意行為": "दुर्भावनापूर्ण व्यवहार का रीयल-टाइम अवरोधन",
|
||||
"網路防護": "नेटवर्क सुरक्षा",
|
||||
"此選項可以攔截網路通訊": "दुर्भावनापूर्ण नेटवर्क कनेक्शन को रोकें",
|
||||
"此選項可以攔截惡意網路連接": "दुर्भावनापूर्ण नेटवर्क कनेक्शन को रोकें",
|
||||
"自訂防護": "कस्टम सुरक्षा",
|
||||
"此選項可以導入自訂防護": "कस्टम सुरक्षा नियम आयात करें",
|
||||
"此選項可以導入自訂防護規則": "कस्टम सुरक्षा नियम आयात करें",
|
||||
"進程管理": "प्रक्रिया प्रबंधक",
|
||||
"此選項可以實時查看系統進程": "रीयल-टाइम में सिस्टम प्रक्रियाओं की निगरानी करें",
|
||||
"垃圾清理": "कचरा सफाई",
|
||||
@@ -918,15 +918,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "पॉपअप ब्लॉकर",
|
||||
"此選項可以選擇指定窗口攔截": "विशिष्ट पॉपअप विंडो ब्लॉक करें",
|
||||
"白名單": "श्वेतसूची",
|
||||
"此選項可以管理系統白名單": "सिस्टम श्वेतसूची प्रबंधित करें",
|
||||
"此選項可以查看並管理白名單": "श्वेतसूची देखें और प्रबंधित करें",
|
||||
"隔離區": "संगरोध",
|
||||
"此選項可以管理已隔離的檔案": "संगरोधित फ़ाइलों का प्रबंधन करें",
|
||||
"此選項可以查看並管理隔離區": "संगरोध क्षेत्र देखें और प्रबंधित करें",
|
||||
"增強模式": "उन्नत मोड",
|
||||
"此選項可以增強掃描引擎": "स्कैनिंग इंजन को बढ़ाएं",
|
||||
"此選項可以增強靜態掃描引擎": "स्थिर स्कैनिंग इंजन को बढ़ाएं",
|
||||
"擴展引擎": "विस्तार इंजन",
|
||||
"此選項可以使用擴展引擎": "बाहरी विस्तार इंजन सक्षम करें",
|
||||
"此選項可以使用擴展規則引擎": "विस्तार नियम इंजन सक्षम करें",
|
||||
"雲端服務": "क्लाउड सेवा",
|
||||
"此選項可以上報雲端引擎": "संदिग्ध फ़ाइलों की क्लाउड पर रिपोर्ट करें",
|
||||
"此選項可以自動上報可疑檔案": "संदिग्ध फ़ाइलों की स्वचालित रूप से रिपोर्ट करें",
|
||||
"顯色主題": "रंग थीम",
|
||||
"此選項可以選擇主題顏色": "एप्लिकेशन का रंग थीम चुनें",
|
||||
"白色主題": "लाइट मोड",
|
||||
@@ -990,7 +990,7 @@ window.AppI18n = {
|
||||
"正在掃描": "स्कैन कर रहा है...",
|
||||
"正在刪除": "हटा रहा है...",
|
||||
"選單掃描": "संदर्भ मेनू स्कैन",
|
||||
"此選項可以加入右鍵掃描": "राइट-क्लिक मेनू में स्कैन विकल्प जोड़ें",
|
||||
"此選項可以啟用右鍵掃描功能": "राइट-क्लिक स्कैन कार्यक्षमता सक्षम करें",
|
||||
"刪除項目": "आइटम हटाएं",
|
||||
"忽略項目": "आइटम अनदेखा करें",
|
||||
"加入隔離區": "संगरोध में जोड़ें",
|
||||
@@ -1012,11 +1012,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "هذا الجهاز محمي",
|
||||
"智能掃描": "فحص ذكي",
|
||||
"此選項可以快速掃病毒": "فحص سريع للفيروسات",
|
||||
"此選項可以快速掃描裝置安全性": "فحص أمان الجهاز بسرعة",
|
||||
"日誌導出": "تصدير السجلات",
|
||||
"此選項可以篩選導出日誌": "تصفية وتصدير سجلات النظام",
|
||||
"此選項可以篩選日誌並匯出存檔": "تصفية السجلات وتصديرها إلى الأرشيف",
|
||||
"病毒掃描": "فحص الفيروسات",
|
||||
"此選項可以選擇掃描方式": "حدد طريقة الفحص",
|
||||
"此選項可以選擇進階掃描方式": "حدد طريقة فحص متقدمة",
|
||||
"刪除": "حذف",
|
||||
"選擇": "تحديد",
|
||||
"檔案掃描": "فحص الملفات",
|
||||
@@ -1024,17 +1024,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "فحص شامل",
|
||||
"停止": "إيقاف",
|
||||
"進程防護": "حماية العمليات",
|
||||
"此選項可以攔截進程病毒": "يمنع العمليات الخبيثة",
|
||||
"此選項可以終止惡意進程運行": "إنهاء تنفيذ العمليات الخبيثة",
|
||||
"檔案防護": "حماية الملفات",
|
||||
"此選項可以攔截檔案變更": "يمنع التعديلات الخبيثة على الملفات",
|
||||
"此選項可以隔離惡意檔案建立": "عزل إنشاء الملفات الخبيثة",
|
||||
"系統防護": "حماية النظام",
|
||||
"此選項可以攔截系統項目": "يحمي مكونات النظام الحيوية",
|
||||
"此選項可以實時修復系統異常": "إصلاح في الوقت الفعلي لأعطال النظام",
|
||||
"驅動防護": "حماية برامج التشغيل",
|
||||
"此選項可以增強自身防護": "يعزز آليات الدفاع الذاتي",
|
||||
"此選項可以實時攔截惡意行為": "اعتراض السلوك الخبيث في الوقت الفعلي",
|
||||
"網路防護": "حماية الشبكة",
|
||||
"此選項可以攔截網路通訊": "يمنع اتصالات الشبكة الخبيثة",
|
||||
"此選項可以攔截惡意網路連接": "حظر اتصالات الشبكة الخبيثة",
|
||||
"自訂防護": "حماية مخصصة",
|
||||
"此選項可以導入自訂防護": "استيراد قواعد حماية مخصصة",
|
||||
"此選項可以導入自訂防護規則": "استيراد قواعد حماية مخصصة",
|
||||
"進程管理": "مدير العمليات",
|
||||
"此選項可以實時查看系統進程": "مراقبة عمليات النظام في الوقت الفعلي",
|
||||
"垃圾清理": "تنظيف المخلفات",
|
||||
@@ -1044,15 +1044,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "حظر النوافذ المنبثقة",
|
||||
"此選項可以選擇指定窗口攔截": "حظر نوافذ منبثقة معينة",
|
||||
"白名單": "القائمة البيضاء",
|
||||
"此選項可以管理系統白名單": "إدارة القائمة البيضاء للنظام",
|
||||
"此選項可以查看並管理白名單": "عرض وإدارة القائمة البيضاء",
|
||||
"隔離區": "الحجر الصحي",
|
||||
"此選項可以管理已隔離的檔案": "إدارة الملفات المحجوزة",
|
||||
"此選項可以查看並管理隔離區": "عرض وإدارة منطقة الحجر الصحي",
|
||||
"增強模式": "وضع محسن",
|
||||
"此選項可以增強掃描引擎": "يعزز محرك الفحص",
|
||||
"此選項可以增強靜態掃描引擎": "تحسين محرك الفحص الثابت",
|
||||
"擴展引擎": "محرك الإضافات",
|
||||
"此選項可以使用擴展引擎": "تفعيل محركات الإضافات الخارجية",
|
||||
"此選項可以使用擴展規則引擎": "تمكين محركات قواعد الإضافة",
|
||||
"雲端服務": "خدمة السحابة",
|
||||
"此選項可以上報雲端引擎": "الإبلاغ عن الملفات المشبوهة للسحابة",
|
||||
"此選項可以自動上報可疑檔案": "الإبلاغ تلقائيًا عن الملفات المشبوهة",
|
||||
"顯色主題": "سمة اللون",
|
||||
"此選項可以選擇主題顏色": "تحديد سمة ألوان التطبيق",
|
||||
"白色主題": "الوضع الفاتح",
|
||||
@@ -1116,7 +1116,7 @@ window.AppI18n = {
|
||||
"正在掃描": "جاري الفحص...",
|
||||
"正在刪除": "جاري الحذف...",
|
||||
"選單掃描": "فحص قائمة السياق",
|
||||
"此選項可以加入右鍵掃描": "إضافة خيار الفحص إلى قائمة النقر الأيمن",
|
||||
"此選項可以啟用右鍵掃描功能": "تمكين ميزة الفحص بزر الماوس الأيمن",
|
||||
"刪除項目": "حذف العناصر",
|
||||
"忽略項目": "تجاهل العناصر",
|
||||
"加入隔離區": "إضافة إلى الحجر الصحي",
|
||||
@@ -1138,11 +1138,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "Это устройство защищено",
|
||||
"智能掃描": "Умное сканирование",
|
||||
"此選項可以快速掃病毒": "Быстрое сканирование на наличие вирусов",
|
||||
"此選項可以快速掃描裝置安全性": "Быстрое сканирование безопасности устройства",
|
||||
"日誌導出": "Экспорт журналов",
|
||||
"此選項可以篩選導出日誌": "Фильтрация и экспорт системных журналов",
|
||||
"此選項可以篩選日誌並匯出存檔": "Фильтрация журналов и экспорт в архив",
|
||||
"病毒掃描": "Сканирование на вирусы",
|
||||
"此選項可以選擇掃描方式": "Выберите метод сканирования",
|
||||
"此選項可以選擇進階掃描方式": "Выберите расширенный метод сканирования",
|
||||
"刪除": "Удалить",
|
||||
"選擇": "Выбрать",
|
||||
"檔案掃描": "Сканирование файлов",
|
||||
@@ -1150,17 +1150,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "Полное сканирование",
|
||||
"停止": "Остановить",
|
||||
"進程防護": "Защита процессов",
|
||||
"此選項可以攔截進程病毒": "Блокирует вредоносные процессы",
|
||||
"此選項可以終止惡意進程運行": "Завершение выполнения вредоносных процессов",
|
||||
"檔案防護": "Защита файлов",
|
||||
"此選項可以攔截檔案變更": "Блокирует вредоносные изменения файлов",
|
||||
"此選項可以隔離惡意檔案建立": "Карантин создания вредоносных файлов",
|
||||
"系統防護": "Защита системы",
|
||||
"此選項可以攔截系統項目": "Защищает критические системные компоненты",
|
||||
"此選項可以實時修復系統異常": "Восстановление системных аномалий в реальном времени",
|
||||
"驅動防護": "Защита драйверов",
|
||||
"此選項可以增強自身防護": "Усиливает механизмы самозащиты",
|
||||
"此選項可以實時攔截惡意行為": "Блокировка вредоносного поведения в реальном времени",
|
||||
"網路防護": "Сетевая защита",
|
||||
"此選項可以攔截網路通訊": "Блокирует вредоносные сетевые подключения",
|
||||
"此選項可以攔截惡意網路連接": "Блокировка вредоносных сетевых подключений",
|
||||
"自訂防護": "Пользовательская защита",
|
||||
"此選項可以導入自訂防護": "Импорт пользовательских правил защиты",
|
||||
"此選項可以導入自訂防護規則": "Импорт пользовательских правил защиты",
|
||||
"進程管理": "Диспетчер процессов",
|
||||
"此選項可以實時查看系統進程": "Мониторинг системных процессов в реальном времени",
|
||||
"垃圾清理": "Очистка мусора",
|
||||
@@ -1170,15 +1170,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "Блокировщик всплывающих окон",
|
||||
"此選項可以選擇指定窗口攔截": "Блокировка определенных всплывающих окон",
|
||||
"白名單": "Белый список",
|
||||
"此選項可以管理系統白名單": "Управление системным белым списком",
|
||||
"此選項可以查看並管理白名單": "Просмотр и управление белым списком",
|
||||
"隔離區": "Карантин",
|
||||
"此選項可以管理已隔離的檔案": "Управление файлами в карантине",
|
||||
"此選項可以查看並管理隔離區": "Просмотр и управление карантинной зоной",
|
||||
"增強模式": "Расширенный режим",
|
||||
"此選項可以增強掃描引擎": "Усиление механизма сканирования",
|
||||
"此選項可以增強靜態掃描引擎": "Улучшение статического механизма сканирования",
|
||||
"擴展引擎": "Модули расширения",
|
||||
"此選項可以使用擴展引擎": "Включение внешних модулей расширения",
|
||||
"此選項可以使用擴展規則引擎": "Включить механизмы правил расширения",
|
||||
"雲端服務": "Облачный сервис",
|
||||
"此選項可以上報雲端引擎": "Сообщить о подозрительных файлах в облако",
|
||||
"此選項可以自動上報可疑檔案": "Автоматически сообщать о подозрительных файлах",
|
||||
"顯色主題": "Цветовая тема",
|
||||
"此選項可以選擇主題顏色": "Выберите цветовую тему приложения",
|
||||
"白色主題": "Светлый режим",
|
||||
@@ -1242,7 +1242,7 @@ window.AppI18n = {
|
||||
"正在掃描": "Сканирование...",
|
||||
"正在刪除": "Удаление...",
|
||||
"選單掃描": "Сканирование из контекстного меню",
|
||||
"此選項可以加入右鍵掃描": "Добавить опцию сканирования в контекстное меню",
|
||||
"此選項可以啟用右鍵掃描功能": "Включить функцию сканирования по правому клику",
|
||||
"刪除項目": "Удалить элементы",
|
||||
"忽略項目": "Игнорировать элементы",
|
||||
"加入隔離區": "Добавить в карантин",
|
||||
@@ -1264,11 +1264,11 @@ window.AppI18n = {
|
||||
"PYAS Security": "PYAS Security",
|
||||
"此裝置已受到防護": "Ta naprava je zaščitena",
|
||||
"智能掃描": "Pametno skeniranje",
|
||||
"此選項可以快速掃病毒": "Hitro skeniranje za viruse",
|
||||
"此選項可以快速掃描裝置安全性": "Hitro skeniranje varnosti naprave",
|
||||
"日誌導出": "Izvoz dnevnikov",
|
||||
"此選項可以篩選導出日誌": "Filtriranje in izvoz sistemskih dnevnikov",
|
||||
"此選項可以篩選日誌並匯出存檔": "Filtriranje dnevnikov in izvoz v arhiv",
|
||||
"病毒掃描": "Skeniranje virusov",
|
||||
"此選項可以選擇掃描方式": "Izberite metodo skeniranja",
|
||||
"此選項可以選擇進階掃描方式": "Izberite napredno metodo skeniranja",
|
||||
"刪除": "Izbriši",
|
||||
"選擇": "Izberi",
|
||||
"檔案掃描": "Skeniranje datotek",
|
||||
@@ -1276,17 +1276,17 @@ window.AppI18n = {
|
||||
"全盤掃描": "Celotno skeniranje",
|
||||
"停止": "Ustavi",
|
||||
"進程防護": "Zaščita procesov",
|
||||
"此選項可以攔截進程病毒": "Blokira zlonamerne procese",
|
||||
"此選項可以終止惡意進程運行": "Končajte izvajanje zlonamernih procesov",
|
||||
"檔案防護": "Zaščita datotek",
|
||||
"此選項可以攔截檔案變更": "Blokira zlonamerne spremembe datotek",
|
||||
"此選項可以隔離惡意檔案建立": "Karantena za ustvarjanje zlonamernih datotek",
|
||||
"系統防護": "Sistemska zaščita",
|
||||
"此選項可以攔截系統項目": "Ščiti kritične sistemske komponente",
|
||||
"此選項可以實時修復系統異常": "Popravilo sistemskih anomalij v realnem času",
|
||||
"驅動防護": "Zaščita gonilnikov",
|
||||
"此選項可以增強自身防護": "Krepi samoobrambne mehanizme",
|
||||
"此選項可以實時攔截惡意行為": "Prestreganje zlonamernega vedenja v realnem času",
|
||||
"網路防護": "Omrežna zaščita",
|
||||
"此選項可以攔截網路通訊": "Blokira zlonamerne omrežne povezave",
|
||||
"此選項可以攔截惡意網路連接": "Blokiraj zlonamerne omrežne povezave",
|
||||
"自訂防護": "Zaščita po meri",
|
||||
"此選項可以導入自訂防護": "Uvozi pravila zaščite po meri",
|
||||
"此選項可以導入自訂防護規則": "Uvozi pravila zaščite po meri",
|
||||
"進程管理": "Upravitelj procesov",
|
||||
"此選項可以實時查看系統進程": "Spremlja sistemske procese v realnem času",
|
||||
"垃圾清理": "Čiščenje nesnage",
|
||||
@@ -1296,15 +1296,15 @@ window.AppI18n = {
|
||||
"彈窗攔截": "Blokator pojavnih oken",
|
||||
"此選項可以選擇指定窗口攔截": "Blokira določena pojavna okna",
|
||||
"白名單": "Seznam dovoljenih",
|
||||
"此選項可以管理系統白名單": "Upravlja sistemski seznam dovoljenih",
|
||||
"此選項可以查看並管理白名單": "Ogled in upravljanje seznama dovoljenih",
|
||||
"隔離區": "Karantena",
|
||||
"此選項可以管理已隔離的檔案": "Upravlja datoteke v karanteni",
|
||||
"此選項可以查看並管理隔離區": "Ogled in upravljanje karantene",
|
||||
"增強模式": "Izboljšan način",
|
||||
"此選項可以增強掃描引擎": "Izboljša mehanizem skeniranja",
|
||||
"此選項可以增強靜態掃描引擎": "Izboljša statični mehanizem skeniranja",
|
||||
"擴展引擎": "Razširitveni mehanizem",
|
||||
"此選項可以使用擴展引擎": "Omogoči zunanje razširitvene mehanizme",
|
||||
"此選項可以使用擴展規則引擎": "Omogoči razširitvene mehanizme pravil",
|
||||
"雲端服務": "Storitev v oblaku",
|
||||
"此選項可以上報雲端引擎": "Poroča sumljive datoteke v oblak",
|
||||
"此選項可以自動上報可疑檔案": "Samodejno prijavi sumljive datoteke",
|
||||
"顯色主題": "Barvna tema",
|
||||
"此選項可以選擇主題顏色": "Izberite barvno temo aplikacije",
|
||||
"白色主題": "Svetel način",
|
||||
@@ -1368,7 +1368,7 @@ window.AppI18n = {
|
||||
"正在掃描": "Skeniranje...",
|
||||
"正在刪除": "Brisanje...",
|
||||
"選單掃描": "Skeniranje iz kontekstnega menija",
|
||||
"此選項可以加入右鍵掃描": "Dodaj možnost skeniranja v kontekstni meni",
|
||||
"此選項可以啟用右鍵掃描功能": "Omogoči funkcijo skeniranja z desnim klikom",
|
||||
"刪除項目": "Izbriši elemente",
|
||||
"忽略項目": "Prezri elemente",
|
||||
"加入隔離區": "Dodaj v karanteno",
|
||||
|
||||
+166
-54
@@ -149,6 +149,16 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
if (widget.renderData) widget.renderData();
|
||||
});
|
||||
document.documentElement.lang = langMap[currentLang] || "en";
|
||||
|
||||
const progressText = document.getElementById('progress_text');
|
||||
if (progressText && progressText.dataset.dynamicMsg) {
|
||||
try {
|
||||
const msgs = JSON.parse(progressText.dataset.dynamicMsg);
|
||||
if (msgs[lang]) {
|
||||
progressText.textContent = msgs[lang];
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
};
|
||||
|
||||
const applyTheme = (theme) => {
|
||||
@@ -201,6 +211,25 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
widget.gridState.colWidths.forEach((w, idx) => {
|
||||
widget.style.setProperty(`--col-${idx}`, `${w}px`);
|
||||
});
|
||||
|
||||
listUl.addEventListener('click', (e) => {
|
||||
const li = e.target.closest('.manage-list-item');
|
||||
if (!li) return;
|
||||
|
||||
const cb = li.querySelector('input[type="checkbox"]');
|
||||
if (e.target.tagName !== 'INPUT') {
|
||||
cb.checked = !cb.checked;
|
||||
}
|
||||
|
||||
if (containerSelector === '#scan_window') {
|
||||
virusState.set(cb.value, cb.checked);
|
||||
if (typeof checkVirusListEmpty === 'function') checkVirusListEmpty();
|
||||
}
|
||||
|
||||
if (typeof widget.updateSelectAllState === 'function') {
|
||||
widget.updateSelectAllState();
|
||||
}
|
||||
});
|
||||
}
|
||||
const state = widget.gridState;
|
||||
|
||||
@@ -280,7 +309,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
virusState.set(cb.value, isChecked);
|
||||
}
|
||||
});
|
||||
if (containerSelector === '#scan_window') checkVirusListEmpty();
|
||||
if (containerSelector === '#scan_window' && typeof checkVirusListEmpty === 'function') {
|
||||
checkVirusListEmpty();
|
||||
}
|
||||
});
|
||||
|
||||
let displayData = dataList.filter(item => {
|
||||
@@ -312,12 +343,15 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
}
|
||||
|
||||
listUl.innerHTML = '';
|
||||
widget.updateSelectAllState = () => {
|
||||
const total = listUl.querySelectorAll('input[type="checkbox"]').length;
|
||||
const checked = listUl.querySelectorAll('input[type="checkbox"]:checked').length;
|
||||
selectAllCb.checked = (total > 0 && total === checked);
|
||||
selectAllCb.indeterminate = (checked > 0 && checked < total);
|
||||
};
|
||||
|
||||
let htmlContent = '';
|
||||
displayData.forEach(item => {
|
||||
const li = document.createElement('li');
|
||||
li.className = 'manage-list-item';
|
||||
|
||||
let isChecked = defaultChecked;
|
||||
if (containerSelector === '#scan_window') {
|
||||
isChecked = virusState.get(item[valKey]) ?? true;
|
||||
@@ -331,34 +365,16 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
`<div class="row-col" style="width: var(--col-${idx}); flex: 0 0 auto;" title="${String(item[col.key] || '').replace(/"/g, '"')}">${item[col.key] || ''}</div>`
|
||||
).join('');
|
||||
|
||||
li.innerHTML = `
|
||||
<input type="checkbox" value="${item[valKey]}" ${checkedAttr} data-path="${item.path || ''}">
|
||||
<div class="manage-list-item-content">${rowColsHtml}</div>
|
||||
htmlContent += `
|
||||
<li class="manage-list-item">
|
||||
<input type="checkbox" value="${item[valKey]}" ${checkedAttr} data-path="${item.path || ''}">
|
||||
<div class="manage-list-item-content">${rowColsHtml}</div>
|
||||
</li>
|
||||
`;
|
||||
|
||||
li.addEventListener('click', (e) => {
|
||||
if (e.target.tagName !== 'INPUT') {
|
||||
const cb = li.querySelector('input');
|
||||
cb.checked = !cb.checked;
|
||||
}
|
||||
if (containerSelector === '#scan_window') {
|
||||
const cb = li.querySelector('input');
|
||||
virusState.set(item[valKey], cb.checked);
|
||||
checkVirusListEmpty();
|
||||
}
|
||||
updateSelectAllState();
|
||||
});
|
||||
|
||||
listUl.appendChild(li);
|
||||
});
|
||||
|
||||
function updateSelectAllState() {
|
||||
const total = listUl.querySelectorAll('input[type="checkbox"]').length;
|
||||
const checked = listUl.querySelectorAll('input[type="checkbox"]:checked').length;
|
||||
selectAllCb.checked = (total > 0 && total === checked);
|
||||
selectAllCb.indeterminate = (checked > 0 && checked < total);
|
||||
}
|
||||
updateSelectAllState();
|
||||
listUl.innerHTML = htmlContent;
|
||||
widget.updateSelectAllState();
|
||||
};
|
||||
|
||||
widget.renderData();
|
||||
@@ -582,26 +598,40 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
checkVirusListEmpty();
|
||||
};
|
||||
|
||||
const removeListItems = (removedPaths) => {
|
||||
const removedSet = new Set(removedPaths);
|
||||
removedPaths.forEach(p => virusState.delete(p));
|
||||
window.virusResults = window.virusResults.filter(v => !removedSet.has(v.path));
|
||||
|
||||
const listUl = document.querySelector('#scan_window .virus-list');
|
||||
if (listUl) {
|
||||
listUl.querySelectorAll('.manage-list-item').forEach(li => {
|
||||
const cb = li.querySelector('input[type="checkbox"]');
|
||||
if (cb && removedSet.has(cb.value)) {
|
||||
li.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const widget = document.querySelector('#scan_window .virus-widget');
|
||||
if (widget && typeof widget.updateSelectAllState === 'function') {
|
||||
widget.updateSelectAllState();
|
||||
}
|
||||
};
|
||||
|
||||
if (action === 'delete') {
|
||||
window.pywebview.api.solve_scan(paths).then((deletedPaths) => {
|
||||
const deletedSet = new Set(deletedPaths);
|
||||
deletedPaths.forEach(p => virusState.delete(p));
|
||||
window.virusResults = window.virusResults.filter(v => !deletedSet.has(v.path));
|
||||
renderDataGrid('#scan_window', window.virusResults, cols.virus, 'path', true);
|
||||
removeListItems(deletedPaths);
|
||||
finalizeAction();
|
||||
});
|
||||
} else if (action === 'ignore') {
|
||||
paths.forEach(p => virusState.delete(p));
|
||||
window.virusResults = window.virusResults.filter(v => !paths.includes(v.path));
|
||||
renderDataGrid('#scan_window', window.virusResults, cols.virus, 'path', true);
|
||||
removeListItems(paths);
|
||||
finalizeAction();
|
||||
} else if (action === 'quarantine' || action === 'whitelist') {
|
||||
const listKey = action === 'quarantine' ? 'quarantine' : 'white_list';
|
||||
window.pywebview.api.manage_named_list(listKey, paths, 'add').then(() => {
|
||||
window.pywebview.api.remove_virus_result(paths).then(() => {
|
||||
paths.forEach(p => virusState.delete(p));
|
||||
window.virusResults = window.virusResults.filter(v => !paths.includes(v.path));
|
||||
renderDataGrid('#scan_window', window.virusResults, cols.virus, 'path', true);
|
||||
removeListItems(paths);
|
||||
finalizeAction();
|
||||
});
|
||||
});
|
||||
@@ -612,31 +642,95 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
updateCustomSelectUI('scan_method_select', 'none');
|
||||
if (virusState.size === 0) {
|
||||
changeScanSelectMode('scan');
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "病毒掃描";
|
||||
progressTitle.textContent = getMsg("病毒掃描");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.setAttribute('data-i18n', '');
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.dataset.originText = "此選項可以選擇進階掃描方式";
|
||||
progressText.textContent = getMsg("此選項可以選擇進階掃描方式");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.addVirusResult = (label, path) => {
|
||||
if (!window.virusResults.some(v => v.path === path)) {
|
||||
window.virusResults.push({ label: label, path: path });
|
||||
if (!virusState.has(path)) {
|
||||
const item = { label: label, path: path };
|
||||
window.virusResults.push(item);
|
||||
virusState.set(path, true);
|
||||
renderDataGrid('#scan_window', window.virusResults, cols.virus, 'path', true);
|
||||
|
||||
const listUl = document.querySelector('#scan_window .virus-list');
|
||||
const widget = document.querySelector('#scan_window .virus-widget');
|
||||
|
||||
if (listUl && widget && widget.gridState) {
|
||||
const rowColsHtml = cols.virus.map((col, idx) =>
|
||||
`<div class="row-col" style="width: var(--col-${idx}); flex: 0 0 auto;" title="${String(item[col.key] || '').replace(/"/g, '"')}">${item[col.key] || ''}</div>`
|
||||
).join('');
|
||||
|
||||
const liHtml = `
|
||||
<li class="manage-list-item">
|
||||
<input type="checkbox" value="${path}" checked data-path="${path}">
|
||||
<div class="manage-list-item-content">${rowColsHtml}</div>
|
||||
</li>
|
||||
`;
|
||||
|
||||
listUl.insertAdjacentHTML('beforeend', liHtml);
|
||||
|
||||
if (typeof widget.updateSelectAllState === 'function') {
|
||||
widget.updateSelectAllState();
|
||||
}
|
||||
} else {
|
||||
renderDataGrid('#scan_window', window.virusResults, cols.virus, 'path', true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.updateScanProgress = (path) => {
|
||||
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
||||
progressText.textContent = path;
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "正在掃描";
|
||||
progressTitle.textContent = getMsg("正在掃描");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.removeAttribute('data-i18n');
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.textContent = path;
|
||||
}
|
||||
};
|
||||
|
||||
window.updateDeleteProgress = (path) => {
|
||||
if (progressTitle) progressTitle.textContent = getMsg("正在刪除");
|
||||
progressText.textContent = path;
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "正在刪除";
|
||||
progressTitle.textContent = getMsg("正在刪除");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.removeAttribute('data-i18n');
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.textContent = path;
|
||||
}
|
||||
};
|
||||
|
||||
window.finishScan = (msg, count) => {
|
||||
window.finishScan = (msgData, count) => {
|
||||
isScanning = false;
|
||||
if (progressTitle) progressTitle.textContent = getMsg("病毒掃描");
|
||||
progressText.textContent = msg;
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "病毒掃描";
|
||||
progressTitle.textContent = getMsg("病毒掃描");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.removeAttribute('data-i18n');
|
||||
if (typeof msgData === 'object' && msgData !== null) {
|
||||
progressText.dataset.dynamicMsg = JSON.stringify(msgData);
|
||||
progressText.textContent = msgData[currentLang] || msgData["english_switch"];
|
||||
} else {
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.textContent = msgData;
|
||||
}
|
||||
}
|
||||
stopBtn.classList.add('hidden');
|
||||
scanMethodSelect.classList.remove('hidden');
|
||||
|
||||
@@ -658,8 +752,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
scanMethodSelect.classList.add('hidden');
|
||||
stopBtn.classList.remove('hidden');
|
||||
stopBtn.disabled = false;
|
||||
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
||||
progressText.textContent = getMsg("正在初始化中");
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "正在掃描";
|
||||
progressTitle.textContent = getMsg("正在掃描");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.setAttribute('data-i18n', '');
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.dataset.originText = "正在初始化中";
|
||||
progressText.textContent = getMsg("正在初始化中");
|
||||
}
|
||||
window.pywebview.api.trigger_scan(method);
|
||||
}
|
||||
|
||||
@@ -731,8 +834,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
scanMethodSelect.classList.add('hidden');
|
||||
stopBtn.classList.remove('hidden');
|
||||
changeScanSelectMode('scan');
|
||||
if (progressTitle) progressTitle.textContent = getMsg("正在掃描");
|
||||
progressText.textContent = getMsg("正在初始化中");
|
||||
if (progressTitle) {
|
||||
progressTitle.setAttribute('data-i18n', '');
|
||||
progressTitle.dataset.originText = "正在掃描";
|
||||
progressTitle.textContent = getMsg("正在掃描");
|
||||
}
|
||||
if (progressText) {
|
||||
progressText.setAttribute('data-i18n', '');
|
||||
progressText.removeAttribute('data-dynamic-msg');
|
||||
progressText.dataset.originText = "正在初始化中";
|
||||
progressText.textContent = getMsg("正在初始化中");
|
||||
}
|
||||
window.pywebview.api.start_scan([path]);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -60,13 +60,13 @@
|
||||
<div class="quick-actions">
|
||||
<div class="list-item" style="cursor: pointer;" id="quick_scan_btn" data-action="scan">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>智能掃描</h2><p data-i18n>此選項可以快速掃病毒</p>
|
||||
<h2 data-i18n>智能掃描</h2><p data-i18n>此選項可以快速掃描裝置安全性</p>
|
||||
</div>
|
||||
<button class="icon-action-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>
|
||||
</div>
|
||||
<div class="list-item" style="cursor: pointer;" data-target="log_export_window">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>日誌導出</h2><p data-i18n>此選項可以篩選導出日誌</p>
|
||||
<h2 data-i18n>日誌導出</h2><p data-i18n>此選項可以篩選日誌並匯出存檔</p>
|
||||
</div>
|
||||
<button class="icon-action-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>
|
||||
</div>
|
||||
@@ -81,7 +81,7 @@
|
||||
<div class="progress-widget">
|
||||
<div class="header-group">
|
||||
<h2 class="section-title" data-i18n>病毒掃描</h2>
|
||||
<p class="section-desc" id="progress_text" data-i18n>此選項可以選擇掃描方式</p>
|
||||
<p class="section-desc" id="progress_text" data-i18n>此選項可以選擇進階掃描方式</p>
|
||||
</div>
|
||||
<div class="action-group modern-action-group">
|
||||
<select id="scan_method_select" class="modern-select">
|
||||
@@ -105,37 +105,37 @@
|
||||
<div class="list-widget">
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>進程防護</h2><p data-i18n>此選項可以攔截進程病毒</p>
|
||||
<h2 data-i18n>進程防護</h2><p data-i18n>此選項可以終止惡意進程運行</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>檔案防護</h2><p data-i18n>此選項可以攔截檔案變更</p>
|
||||
<h2 data-i18n>檔案防護</h2><p data-i18n>此選項可以隔離惡意檔案建立</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>系統防護</h2><p data-i18n>此選項可以攔截系統項目</p>
|
||||
<h2 data-i18n>系統防護</h2><p data-i18n>此選項可以實時修復系統異常</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>驅動防護</h2><p data-i18n>此選項可以增強自身防護</p>
|
||||
<h2 data-i18n>驅動防護</h2><p data-i18n>此選項可以實時攔截惡意行為</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>網路防護</h2><p data-i18n>此選項可以攔截網路通訊</p>
|
||||
<h2 data-i18n>網路防護</h2><p data-i18n>此選項可以攔截惡意網路連接</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item" style="cursor: pointer;" data-target="custom_protect_window">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>自訂防護</h2><p data-i18n>此選項可以導入自訂防護</p>
|
||||
<h2 data-i18n>自訂防護</h2><p data-i18n>此選項可以導入自訂防護規則</p>
|
||||
</div>
|
||||
<button class="icon-action-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>
|
||||
</div>
|
||||
@@ -170,13 +170,13 @@
|
||||
</div>
|
||||
<div class="list-item" style="cursor: pointer;" data-target="whitelist_window">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>白名單</h2><p data-i18n>此選項可以管理系統白名單</p>
|
||||
<h2 data-i18n>白名單</h2><p data-i18n>此選項可以查看並管理白名單</p>
|
||||
</div>
|
||||
<button class="icon-action-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>
|
||||
</div>
|
||||
<div class="list-item" style="cursor: pointer;" data-target="quarantine_window">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>隔離區</h2><p data-i18n>此選項可以管理已隔離的檔案</p>
|
||||
<h2 data-i18n>隔離區</h2><p data-i18n>此選項可以查看並管理隔離區</p>
|
||||
</div>
|
||||
<button class="icon-action-btn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg></button>
|
||||
</div>
|
||||
@@ -187,25 +187,25 @@
|
||||
<div class="list-widget">
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>增強模式</h2><p data-i18n>此選項可以增強掃描引擎</p>
|
||||
<h2 data-i18n>增強模式</h2><p data-i18n>此選項可以增強靜態掃描引擎</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox"><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>擴展引擎</h2><p data-i18n>此選項可以使用擴展引擎</p>
|
||||
<h2 data-i18n>擴展引擎</h2><p data-i18n>此選項可以使用擴展規則引擎</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox"><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>雲端服務</h2><p data-i18n>此選項可以上報雲端引擎</p>
|
||||
<h2 data-i18n>雲端服務</h2><p data-i18n>此選項可以自動上報可疑檔案</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox" checked><span class="slider"></span></label>
|
||||
</div>
|
||||
<div class="list-item">
|
||||
<div class="item-info">
|
||||
<h2 data-i18n>選單掃描</h2><p data-i18n>此選項可以加入右鍵掃描</p>
|
||||
<h2 data-i18n>選單掃描</h2><p data-i18n>此選項可以啟用右鍵掃描功能</p>
|
||||
</div>
|
||||
<label class="toggle-switch"><input type="checkbox"><span class="slider"></span></label>
|
||||
</div>
|
||||
|
||||
@@ -435,12 +435,13 @@ class WindowAPI:
|
||||
self.logs_data = []
|
||||
self.tray_icon = None
|
||||
self.engine_initialized = False
|
||||
self.logs_dirty = False
|
||||
|
||||
self.lock_proc = threading.RLock()
|
||||
self.lock_net = threading.RLock()
|
||||
|
||||
self.pyas_default = {
|
||||
"version": "3.5.2",
|
||||
"version": "3.5.3",
|
||||
"api_host": "https://pyas-security.com/",
|
||||
"api_key": "fBRZxYS1UxykM-qzNOlKOEl63WILzlvgNMn6QfsG6FXCAAIktCrOPTAfY5_hEyuZ",
|
||||
"suffix": [".exe", ".dll", ".sys", ".ocx", ".scr", ".efi", ".acm", ".ax", ".cpl", ".drv", ".com", ".mui", ".pyd"],
|
||||
@@ -470,6 +471,8 @@ class WindowAPI:
|
||||
]
|
||||
|
||||
self.thread_pool = ThreadPoolExecutor(max_workers=8)
|
||||
self.start_daemon_thread(self.log_flush_thread)
|
||||
|
||||
for _ in range(2):
|
||||
self.start_daemon_thread(self.cloud_worker)
|
||||
|
||||
@@ -605,6 +608,21 @@ class WindowAPI:
|
||||
except Exception:
|
||||
self.logs_data = []
|
||||
|
||||
def log_flush_thread(self):
|
||||
while True:
|
||||
time.sleep(5)
|
||||
|
||||
with self.lock_logs:
|
||||
if getattr(self, 'logs_dirty', False):
|
||||
try:
|
||||
os.makedirs(os.path.dirname(self.file_log), exist_ok=True)
|
||||
with open(self.file_log, "w", encoding="utf-8") as f:
|
||||
json.dump(self.logs_data, f, indent=4, ensure_ascii=False)
|
||||
|
||||
self.logs_dirty = False
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def write_log(self, level, action, detail=None, code=None, pid=None, file_hash=None, source=None, target=None, operate=None, success=True):
|
||||
with self.lock_logs:
|
||||
entry = {
|
||||
@@ -623,15 +641,11 @@ class WindowAPI:
|
||||
"success": success
|
||||
}
|
||||
self.logs_data.append(entry)
|
||||
if len(self.logs_data) > 10000:
|
||||
self.logs_data = self.logs_data[-10000:]
|
||||
|
||||
if len(self.logs_data) > 1000:
|
||||
self.logs_data = self.logs_data[-1000:]
|
||||
|
||||
try:
|
||||
os.makedirs(os.path.dirname(self.file_log), exist_ok=True)
|
||||
with open(self.file_log, "w", encoding="utf-8") as f:
|
||||
json.dump(self.logs_data, f, indent=4, ensure_ascii=False)
|
||||
except Exception:
|
||||
pass
|
||||
self.logs_dirty = True
|
||||
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.updateLogs) window.updateLogs({json.dumps(entry)});")
|
||||
@@ -908,6 +922,7 @@ class WindowAPI:
|
||||
####################################################################################################
|
||||
|
||||
def scan_worker(self, targets):
|
||||
last_update = 0.0
|
||||
try:
|
||||
for file_path in self.yield_files(targets):
|
||||
with self.lock_virus:
|
||||
@@ -918,6 +933,12 @@ class WindowAPI:
|
||||
if not norm_path:
|
||||
continue
|
||||
|
||||
current_time = time.time()
|
||||
if current_time - last_update >= 0.05:
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.updateScanProgress) window.updateScanProgress({json.dumps(norm_path.replace(os.sep, '/'))});")
|
||||
last_update = current_time
|
||||
|
||||
was_locked = False
|
||||
try:
|
||||
with self.lock_file_ops:
|
||||
@@ -947,9 +968,6 @@ class WindowAPI:
|
||||
self.cloud_check(norm_path)
|
||||
self.write_log("SCAN", "Virus Detected", source=norm_path, file_hash=self.calc_file_hash(norm_path))
|
||||
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.updateScanProgress) window.updateScanProgress({json.dumps(norm_path.replace(os.sep, '/'))});")
|
||||
|
||||
except Exception as e:
|
||||
self.write_log("WARN", "Scan Engine", source=norm_path, detail=str(e), success=False)
|
||||
finally:
|
||||
@@ -961,9 +979,6 @@ class WindowAPI:
|
||||
count = len(self.virus_results)
|
||||
elapsed = int(time.time() - self.scan_start)
|
||||
scanned = self.scan_count
|
||||
|
||||
with self.lock_config:
|
||||
lang = self.pyas_config.get("language", "traditional_switch")
|
||||
|
||||
messages = {
|
||||
"traditional_switch": f"發現 {count} 個病毒,掃描 {scanned} 個檔案,耗時 {elapsed} 秒",
|
||||
@@ -978,10 +993,9 @@ class WindowAPI:
|
||||
"russian_switch": f"Найдено {count} вирусов, проверено {scanned} файлов, время {elapsed}с",
|
||||
"slovenian_switch": f"Najdenih {count} virusov, skeniranih {scanned} datotek, čas {elapsed}s"
|
||||
}
|
||||
result_msg = messages.get(lang, messages["traditional_switch"])
|
||||
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(result_msg)}, {count});")
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(messages)}, {count});")
|
||||
self.write_log("INFO", "Scan Completed", detail=f"Found {count} viruses, scanned {scanned} files, time {elapsed}s")
|
||||
|
||||
####################################################################################################
|
||||
@@ -1034,6 +1048,8 @@ class WindowAPI:
|
||||
if norm_p:
|
||||
proc_map.setdefault(os.path.normcase(norm_p), []).append(proc["pid"])
|
||||
|
||||
last_update = 0.0
|
||||
|
||||
with self.lock_virus:
|
||||
deleted_set = set()
|
||||
for raw_path in file_paths:
|
||||
@@ -1041,8 +1057,11 @@ class WindowAPI:
|
||||
if not path:
|
||||
continue
|
||||
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.updateDeleteProgress) window.updateDeleteProgress({json.dumps(path.replace(os.sep, '/'))});")
|
||||
current_time = time.time()
|
||||
if current_time - last_update >= 0.05:
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.updateDeleteProgress) window.updateDeleteProgress({json.dumps(path.replace(os.sep, '/'))});")
|
||||
last_update = current_time
|
||||
|
||||
try:
|
||||
if path in self.virus_lock:
|
||||
@@ -1073,9 +1092,6 @@ class WindowAPI:
|
||||
self.virus_results = [p for p in self.virus_results if p not in deleted_set]
|
||||
|
||||
remaining = len(self.virus_results)
|
||||
|
||||
with self.lock_config:
|
||||
lang = self.pyas_config.get("language", "traditional_switch")
|
||||
|
||||
messages = {
|
||||
"traditional_switch": f"剩餘 {remaining} 個病毒,已刪除 {len(deleted_paths)} 個檔案。",
|
||||
@@ -1090,10 +1106,9 @@ class WindowAPI:
|
||||
"russian_switch": f"Осталось вирусов: {remaining}, удалено файлов: {len(deleted_paths)}.",
|
||||
"slovenian_switch": f"Preostalih virusov: {remaining}, izbrisanih datotek: {len(deleted_paths)}."
|
||||
}
|
||||
result_msg = messages.get(lang, messages["traditional_switch"])
|
||||
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(result_msg)}, {remaining});")
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(messages)}, {remaining});")
|
||||
return deleted_paths
|
||||
|
||||
def remove_virus_result(self, paths):
|
||||
@@ -1105,9 +1120,6 @@ class WindowAPI:
|
||||
####################################################################################################
|
||||
|
||||
def trigger_scan(self, method):
|
||||
with self.lock_config:
|
||||
lang = self.pyas_config.get("language", "traditional_switch")
|
||||
|
||||
messages = {
|
||||
"traditional_switch": "已取消掃描",
|
||||
"simplified_switch": "已取消扫描",
|
||||
@@ -1121,7 +1133,6 @@ class WindowAPI:
|
||||
"russian_switch": "Сканирование отменено",
|
||||
"slovenian_switch": "Skeniranje preklicano"
|
||||
}
|
||||
cancel_msg = messages.get(lang, messages["traditional_switch"])
|
||||
|
||||
targets = []
|
||||
if method == "smart":
|
||||
@@ -1144,7 +1155,7 @@ class WindowAPI:
|
||||
self.start_scan(targets)
|
||||
else:
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan('{cancel_msg}', 0);")
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(messages)}, 0);")
|
||||
|
||||
elif method == "path":
|
||||
targets = self.select_folder()
|
||||
@@ -1152,7 +1163,7 @@ class WindowAPI:
|
||||
self.start_scan(targets)
|
||||
else:
|
||||
if self._window:
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan('{cancel_msg}', 0);")
|
||||
self._window.evaluate_js(f"if(window.finishScan) window.finishScan({json.dumps(messages)}, 0);")
|
||||
|
||||
elif method == "full":
|
||||
targets = [f"{chr(d)}:/" for d in range(65, 91) if os.path.exists(f"{chr(d)}:/")]
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ import pyinstaller_versionfile
|
||||
|
||||
pyinstaller_versionfile.create_versionfile(
|
||||
output_file="versionfile.txt",
|
||||
version='3.5.2.0',
|
||||
version='3.5.3.0',
|
||||
company_name="PYAS Security",
|
||||
file_description="PYAS Security Antivirus",
|
||||
internal_name="PYAS",
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
"*\\DisableTaskMgr",
|
||||
"*\\DisableRegistryTools",
|
||||
"*\\DisableChangePassword",
|
||||
"*\\Wallpaper",
|
||||
"*\\NoComponents",
|
||||
"*\\NoStartMenuMorePrograms",
|
||||
"*\\NoActiveDesktop",
|
||||
@@ -125,6 +124,9 @@
|
||||
"*\\XLLiveUD.exe",
|
||||
"*\\PC4399_WPFLauncher.exe",
|
||||
"*\\bin\\APlayer.exe",
|
||||
"*\\hrkill-*.exe",
|
||||
"*\\bin\\HipsDaemon.exe",
|
||||
"*\\360Safe.exe",
|
||||
],
|
||||
"Rule_Process_ExploitableBlacklist": [
|
||||
"*\\cmd.exe",
|
||||
@@ -203,6 +205,7 @@
|
||||
"*\\ventoy\\Boot\\*",
|
||||
"*\\AdminRegionConfig.*",
|
||||
"*\\nt_qq\\nt_*\\*",
|
||||
"*\\cache\\*",
|
||||
],
|
||||
"Rule_File_RansomwareExtensions": [
|
||||
".zip", ".7z", ".rar", ".tar", ".gz",
|
||||
|
||||
@@ -127,6 +127,12 @@ graph TD
|
||||
BootProtect -->|IOCTL_DISK_FORMAT_TRACKS...| Disk
|
||||
```
|
||||
|
||||
## Machine Learning
|
||||
|
||||
The machine learning-based virus scanning engine training achieved extremely high accuracy.
|
||||
|
||||
<img width="1191" height="1323" alt="train" src="https://github.com/user-attachments/assets/2eea8426-1f82-44e3-9a38-f96f9257cf50" />
|
||||
|
||||
## Support System
|
||||
|
||||
Please ensure your computer supports Microsoft Visual C++ 2015-2022 Redistributable and Edge Webview2.
|
||||
|
||||
Reference in new issue
Block a user