NewHome/func/av.php

143 lines
5.1 KiB
PHP
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.

<?php
/**
* func/av.php —— 杀软识别
* 粘贴 tasklist 输出 → 匹配 data/avlist.js 进程表 → 表格输出 + 统计
*/
$P = '../';
require_once dirname(__DIR__) . '/includes/layout.php';
require_once __DIR__ . '/_bar.php';
layout_head('杀软识别');
func_bar('杀软识别');
?>
<main class="page-main">
<div class="wrap page-body">
<div class="panel-card">
<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>
<?php layout_theme_fab(); ?>
<?php layout_footer(); ?>
<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();
});
// 输入内容后可用 Ctrl/Cmd + Enter 快速识别
$('taskInput').addEventListener('keydown', function (ev) {
if (ev.key === 'Enter' && (ev.ctrlKey || ev.metaKey)) run();
});
})();
</script>
</body>
</html>