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