NewHome/func/av.html

147 lines
5.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="renderer" content="webkit">
<script>(function(){var t;try{t=localStorage.getItem("hp-theme")}catch(e){}if(!t){t=(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches)?"dark":"light"}document.documentElement.setAttribute("data-theme",t);})();</script>
<title>杀软识别</title>
<link rel="icon" href="../assets/img/logo.svg">
<link rel="stylesheet" href="../assets/css/common.css">
</head>
<body>
<div class="func-bar"><div class="wrap func-bar-inner">
<a class="btn btn-sm js-fb-back" href="index.php" title="返回功能区首页">← 返回功能区首页</a>
<span class="func-bar-title">杀软识别</span>
<a class="btn btn-sm" href="../index.php">首页</a>
</div></div>
<main class="page-main">
<div class="wrap page-body">
<div class="panel-card">
<p class="tip" style="margin-top:0">🔒 粘贴的 tasklist 输出仅在本机浏览器内解析匹配,不会上传服务器;如需离线独立使用,请将 <code>data/avlist.js</code> 一并拷贝。</p>
<h2>使用说明</h2>
<p class="tip">在目标机器执行 <code>tasklist</code> 复制全部输出,粘贴到下方输入框后点击“识别”。
系统会逐行解析进程名并与预置的安全软件进程表data/avlist.js进行大小写不敏感匹配<strong>表格仅展示识别出的安全软件进程</strong>,常规进程不展示。</p>
<label class="fl" for="taskInput">tasklist 输出内容</label>
<textarea id="taskInput" rows="12" placeholder="在此粘贴 tasklist 命令输出…"></textarea>
<div class="field-row" style="margin-top:10px">
<button type="button" class="btn btn-primary" id="btnAv">识别</button>
<button type="button" class="btn" id="btnAvClear">清空</button>
</div>
<div id="avMsg"></div>
</div>
<div class="panel-card" id="avResult" hidden>
<h2>识别结果 <span id="avStat" class="tip"></span></h2>
<div style="overflow-x:auto">
<table class="tbl">
<thead><tr><th>#</th><th>进程名</th><th>识别结果</th><th>产品 / 说明</th></tr></thead>
<tbody id="avBody"></tbody>
</table>
</div>
</div>
</div>
</main>
<button type="button" class="theme-fab js-theme-btn" title="切换昼夜模式" aria-label="切换昼夜模式"><span class="js-theme-icon"></span></button>
<button type="button" class="theme-fab to-top js-to-top" title="返回顶部" aria-label="返回顶部"></button>
<script src="../data/avlist.js"></script>
<script src="../assets/js/common.js"></script>
<script>
(function () {
'use strict';
function $(id) { return document.getElementById(id); }
function parseLines(text) {
var lines = text.split(/\r?\n/);
var out = [];
for (var i = 0; i < lines.length; i++) {
var line = lines[i].trim();
if (!line) continue;
if (/映像名称|Image Name|进程名|PID|===/i.test(line) && !/\d$/.test(line.trim())) continue;
var name = line.split(/[\s,]+/)[0];
if (!name) continue;
out.push({ name: name, raw: line });
}
return out;
}
function normalizeName(n) {
return n.toLowerCase().replace(/\.exe$/i, '');
}
function lookup(name) {
var lower = name.toLowerCase();
var map = window.avList || {};
if (Object.prototype.hasOwnProperty.call(map, lower)) return map[lower];
var base = normalizeName(name);
for (var key in map) {
if (Object.prototype.hasOwnProperty.call(map, key) && normalizeName(key) === base) {
return map[key];
}
}
return null;
}
function esc(s) {
var d = document.createElement('div');
d.textContent = s == null ? '' : String(s);
return d.innerHTML;
}
function run() {
var text = $('taskInput').value;
var msg = $('avMsg');
msg.innerHTML = '';
if (!text.trim()) {
msg.innerHTML = '<div class="err-msg">请先粘贴 tasklist 输出内容。</div>';
return;
}
var rows = parseLines(text);
if (!rows.length) {
msg.innerHTML = '<div class="err-msg">未能解析到有效的进程行,请确认粘贴的是 tasklist 输出。</div>';
return;
}
var body = $('avBody');
body.innerHTML = '';
var matched = [];
rows.forEach(function (r) {
var info = lookup(r.name);
if (info) matched.push({ name: r.name, info: info });
});
if (!matched.length) {
$('avResult').hidden = true;
msg.innerHTML = '<div class="ok-msg">共解析 ' + rows.length + ' 行进程,未识别到已知的安全软件进程。</div>';
return;
}
matched.forEach(function (m, i) {
var tr = document.createElement('tr');
tr.innerHTML =
'<td>' + (i + 1) + '</td>' +
'<td>' + esc(m.name) + '</td>' +
'<td><span class="badge badge-ok">已匹配</span></td>' +
'<td>' + esc(m.info) + '</td>';
body.appendChild(tr);
});
$('avStat').textContent = '共解析 ' + rows.length + ' 行进程,识别到 ' + matched.length + ' 个安全软件进程';
$('avResult').hidden = false;
msg.innerHTML = '';
}
$('btnAv').addEventListener('click', run);
$('btnAvClear').addEventListener('click', function () {
$('taskInput').value = '';
$('avResult').hidden = true;
$('avBody').innerHTML = '';
$('avMsg').innerHTML = '';
$('taskInput').focus();
});
$('taskInput').addEventListener('keydown', function (ev) {
if (ev.key === 'Enter' && (ev.ctrlKey || ev.metaKey)) run();
});
})();
</script>
</body>
</html>