damienos61/SysWatchPro

GitHub: damienos61/SysWatchPro

一款纯 C 编写的轻量级 Windows 系统监控工具,集成了实时资源监控、行为异常检测、加密取证日志和嵌入式 Web 仪表盘,无外部依赖即可独立运行。

Stars: 0 | Forks: 0

# 🛡️ SysWatch Pro v2.0 ## 📋 目录 1. [简介](#présentation) 2. [功能特性](#fonctionnalités) 3. [项目架构](#architecture-du-projet) 4. [前置条件](#prérequis) 5. [安装](#installation) 6. [编译](#compilation) 7. [启动](#lancement) 8. [控制台界面](#interface-console) 9. [键盘快捷键 F1-F10](#touches-clavier-f1-f10) 10. [Web Dashboard](#dashboard-web) 11. [JSON API](#api-json) 12. [AI 引擎 — 行为评分](#moteur-ia--scoring-comportemental) 13. [加密取证日志](#logs-forensics-chiffrés) 14. [终止进程](#tuer-un-processus) 15. [声音警报](#alertes-sonores) 16. [模块详情](#modules-détaillés) 17. [使用的 Windows API](#api-windows-utilisées) 18. [故障排除](#dépannage) 19. [未来路线图](#roadmap-future) ## 简介 **SysWatch Pro** 是一个完全使用 **纯 C 语言** 开发的全功能 Windows 系统监控器。它实时监控系统的所有关键方面:CPU、内存、进程、网络,并通过一个受专业 SIEM 启发的行为评分引擎自动检测可疑行为。 该程序还提供了一个 **Web Dashboard**,可以通过任意浏览器访问 `http://localhost:8080`,包含每 2 秒自动更新的交互式图表。 ## 功能特性 ### 🖥️ 系统监控 - 全局 CPU 负载及 60 秒图形历史记录 - 物理内存和虚拟内存消耗及 60 秒历史记录 - 完整的活动进程列表(最多 1024 个) - 单个进程详情:PID、CPU%、RAM (KB)、线程数、可执行文件完整路径 - 检测出现时间少于 60 秒的新进程 ### 🌐 网络监控 - 所有活动的 TCP 连接(ESTABLISHED, LISTEN) - 识别每个连接的所属进程 - 检测连接到已知恶意端口的连接 - 区分私有 IP / 公有 IP ### 🧠 AI 异常检测 - 基于 8 条规则的行为评分引擎 - 4 个等级:OK / WARN / ALERTE / CRITIQUE - 检测在 system32 之外执行的系统二进制文件 - 监控持续高 CPU 占用的进程 ### 🔐 取证日志 - 对所有关键事件进行 XOR 加密记录 - 每个条目都有精确的时间戳 - 日志文件达到 5 MB 时自动轮转 - 内置解密模式(`--decrypt`) ### 🌍 Web Dashboard - 端口 8080 上的嵌入式 HTTP 服务器 - 现代 HTML/CSS/JS 界面,2 秒自动刷新 - CPU 和 RAM 迷你图(Sparklines) - 按等级颜色编码的 AI 异常表 - 网络视图和顶级进程视图 ### ⌨️ 高级导航 - F1-F10 键即时切换视图 - 按 CPU 或 RAM 排序(F8) - 通过 PID 终止进程(F9) - 安全退出并保存日志(F10) ### 🔔 声音警报 - 如果 CPU > 85% 或 RAM > 90%,发出警告蜂鸣声 - 如果 CPU > 95% 或 RAM > 95%,发出紧急双蜂鸣声 - 每次超过阈值仅触发一次声音警报 ## 项目架构 ``` SysWatchPro/ │ ├── main.c ← Point d'entrée, orchestrateur principal ├── Makefile ← Compilation en une commande ├── README.md ← Cette documentation ├── SysWatchPro.exe ← Exécutable (généré après compilation) ├── syswatch_forensic.log ← Logs chiffrés (généré au lancement) │ ├── core/ ← Moteur C — logique métier pure │ ├── process.h / process.c ← Snapshot processus, CPU/RAM par PID, kill │ ├── cpu.h / cpu.c ← Charge CPU globale + historique 60s │ ├── memory.h / memory.c ← RAM physique + virtuelle + historique 60s │ ├── network.h / network.c ← Connexions TCP actives via iphlpapi │ ├── anomaly.h / anomaly.c ← Moteur IA scoring comportemental │ └── logger.h / logger.c ← Logs forensics chiffrés XOR + rotation │ ├── gui/ ← Interface console Windows │ ├── widgets.h / widgets.c ← Barres colorées, sections, alertes visuelles │ └── hotkeys.h / hotkeys.c ← F1-F10 navigation non-bloquante │ └── web/ ← Serveur HTTP embarqué ├── httpserver.h / httpserver.c ← Serveur TCP minimal, thread dédié └── dashboard.h ← Dashboard HTML/CSS/JS complet en string C ``` **层间依赖:** ``` web/ ──────────────────────────┐ gui/ ──────────────────────────┤──► core/ (core ne dépend de rien) main.c ─────────────────────────┘ ``` ## 前置条件 - **Windows 7 / 8 / 10 / 11**(32 或 64 位) - **MinGW-w64**(Windows 版 GCC)已安装并在 PATH 中 - 验证:在 cmd 中运行 `gcc --version` - 下载:https://www.mingw-w64.org/ 或通过 MSYS2 ## 安装 **1. 创建项目文件夹** ``` mkdir C:\Users\LENOVO\Documents\SysWatchPro cd C:\Users\LENOVO\Documents\SysWatchPro ``` **2. 创建子文件夹** ``` mkdir core mkdir gui mkdir web ``` **3. 复制所有源文件** 根据上述结构复制到各自的文件夹中。 ## 编译 在项目根目录中打开终端(`cmd`)并运行: ``` gcc -Wall -O2 -std=c11 -o SysWatchPro.exe main.c core/process.c core/cpu.c core/memory.c core/network.c core/anomaly.c core/logger.c gui/widgets.c gui/hotkeys.c web/httpserver.c -lpsapi -lkernel32 -liphlpapi -lws2_32 ``` ### 链接库 | 库 | 作用 | |-----|------| | `-lpsapi` | `GetProcessMemoryInfo` — 进程内存 | | `-lkernel32` | 基础 Windows API | | `-liphlpapi` | `GetExtendedTcpTable` — 网络连接 | | `-lws2_32` | Winsock2 — HTTP 服务器 | ### 编译成功后的预期信息 ``` (aucune ligne "error:") ``` 警告 `ignoring #pragma comment` 是 **正常且无害的**。 ## 启动 ``` SysWatchPro.exe ``` 以管理员模式启动(建议用于终止系统进程): ``` Clic droit sur cmd.exe → "Exécuter en tant qu'administrateur" cd C:\...\SysWatchPro SysWatchPro.exe ``` ## 控制台界面 ``` +===============================================================+ | SysWatch Pro v2.0 | 2026-03-11 15:07:14 | Tout | +===============================================================+ >> PROCESSEUR (CPU) ---------------------------------------- Coeurs : 2 CPU : [|||||||||||||||||||||||-----------------] 58.4% CPU 60s [._:iIHH#@@#IIi:._ ] >> MEMOIRE (RAM) ------------------------------------------- Totale : 3.92 GB Utilisee: 3.19 GB Libre : 738.0 MB Charge : [||||||||||||||||||||||||||||||||--------] 81.6% RAM 60s [HH@@@@HHIi:. ] >> TOP PROCESSUS par CPU [F8=Basculer tri] ---------------- PID CPU% RAM(KB) Threads Nom ------ ------ ---------- ------- ------------------------ 8368 13.6% 266568 16 chrome.exe C:\Program Files\Google\Chrome\Application\chrome.exe ... >> RESEAU - Connexions actives ----------------------------- PID Local IP L.Port Remote IP R.Port Etat ... >> IA - DETECTION D'ANOMALIES ------------------------------ PID Score Nom Raisons ... Dashboard web: http://localhost:8080 Procs:224 Suspects:0 Anomalies:2 Net:0 [F1]CPU [F2]RAM [F3]Procs [F4]Reseau [F5]Anomalies [F6]Logs [F9]Kill [F10]Quitter ``` ### 颜色代码 | 颜色 | 含义 | |---------|--------------| | 🟢 绿色 | 正常(CPU < 50%, RAM < 60%) | | 🟡 黄色 | 注意(CPU 50-80%, RAM 60-85%) | | 🔴 红色 | 紧急(CPU > 80%, RAM > 85%) | | 🔵 青色 | 系统信息 | | ⚪ 白色 | 中性数据 | | 🔘 灰色 | 非活动值 / 历史为空 | ## 键盘快捷键 F1-F10 | 按键 | 显示视图 | 描述 | |--------|-------------|-------------| | **F1** | CPU | 仅 CPU 负载 + 60 秒图表 | | **F2** | RAM | 仅内存 + 60 秒图表 | | **F3** | 进程 | 完整进程列表 | | **F4** | 网络 | 活动 TCP 连接 | | **F5** | AI 异常 | 检测引擎报告 | | **F6** | 日志 | 取证文件信息 | | **F7** | 全部 | 显示所有模块(默认) | | **F8** | — | 切换进程排序:CPU ↔ RAM | | **F9** | — | 输入 PID 以终止进程 | | **F10** | — | 安全退出(保存日志) | | **Ctrl+C** | — | 紧急停止 | ## Web Dashboard 在任意浏览器中打开: ``` http://localhost:8080 ``` ### Dashboard 内容 - **CPU 卡片**:当前值 + 彩色条 + 60 秒迷你图 - **RAM 卡片**:GB 用量 + 彩色条 + 60 秒迷你图 - **AI 异常卡片**:CRITIQUE/ALERTE/WARN 计数器 + 详细表格 - **网络卡片**:TCP/UDP 统计 + 活动连接列表 - **进程表**:前 20 个进程,包含 PID、CPU%、RAM、线程、状态 Dashboard 通过 JSON API 每隔 **2 秒** 自动刷新。 ## JSON API ### 端点 ``` GET http://localhost:8080/api/data ``` ### 响应结构 ``` { "cpu": { "usage": 58.4, "cores": 2, "history": [45.1, 52.3, 58.4, ...] }, "mem": { "usage": 81.6, "used": 3427000000, "total": 4200000000, "history": [79.2, 80.1, 81.6, ...] }, "anomalies": { "crit": 0, "alert": 1, "warn": 2, "list": [ { "pid": 1234, "name": "svchost.exe", "score": 70, "level": 2 } ] }, "network": { "tcp": 42, "udp": 0, "suspects": 0, "list": [ { "pid": 8368, "proc": "chrome.exe", "local": "192.168.1.5", "lport": 54321, "remote": "142.250.74.46", "rport": 443, "state": "ESTABLISHED", "suspicious": false } ] }, "procs": [ { "pid": 8368, "name": "chrome.exe", "cpu": 13.6, "mem": 266568, "threads": 16, "suspicious": false } ] } ``` ## AI 引擎 — 行为评分 每个进程都会根据 8 条规则获得一个 **0 到 100 的分数**: | 规则 | 分数 | 条件 | |-------|--------|-----------| | 已知恶意名称 | +50 | 匹配内置黑名单 | | 系统二进制文件位于 system32 之外 | +35 | svchost.exe, lsass.exe 不在 System32 中 | | 持续高 CPU | +30 | CPU > 80% 持续 10 秒 | | 可疑网络连接 | +25 | 连接到已知恶意端口 | | 新进程 | +20 | 出现时间少于 60 秒 | | 新进程 + 高内存 | +20 | 新进程使用 > 100 MB | | 过多线程 | +15 | 小进程超过 100 个线程 | | 小进程 + 网络 | +15 | < 5 MB 的进程有网络活动 | ### 警报级别 | 分数 | 级别 | 颜色 | 动作 | |-------|--------|---------|--------| | 0-39 | OK | 绿色 | 无 | | 40-64 | WARN | 青色 | 在表格中显示 | | 65-84 | ALERTE | 黄色 | 显示 + 取证日志 | | 85-100 | CRITIQUE | 红色 | 显示 + 日志 + 蜂鸣 | ### 内置黑名单 ``` keylogger, rootkit, backdoor, trojan, miner, cryptominer, stealer, rat.exe, spy, ransom, inject, hook, dump, pwdump, mimikatz, netcat, nc.exe, ncat, psexec ``` 要添加名称,请编辑 `core/process.c` 中的 `SUSPICIOUS_NAMES[]` 数组。 ## 加密取证日志 ### 生成的文件 ``` syswatch_forensic.log (dans le dossier du .exe) ``` ### 加密 使用密钥 `0xA7` 的 **XOR** 加密 —— 防止意外读取的轻度保护。 在 **5 MB** 时自动轮转(旧文件重命名为 `syswatch_TIMESTAMP.log.old`)。 ### 记录的内容 | 类别 | 触发条件 | |-----------|------------| | `[ANOMALY]` | 任何 ALERTE 或 CRITIQUE 级别的进程 | | `[KILL]` | 每次终止尝试(成功或失败) | | `[NET]` | 连接到可疑端口的 TCP 连接 | | `[STARTUP]` | 程序启动 | | `[SHUTDOWN]` | 程序正常关闭 | ### 读取明文日志 ``` SysWatchPro.exe --decrypt syswatch_forensic.log ``` 解密输出示例: ``` [SESSION_START] 2026-03-11 15:07:14 SysWatchPro v2.0 [ANOMALY] 2026-03-11 15:07:45 PID=9876 Score= 70 Level=ALERTE Name=svchost.exe [CHEMIN ANORMAL] [KILL] 2026-03-11 15:08:12 PID=8368 Name=chrome.exe Result=SUCCESS [SESSION] 2026-03-11 15:09:00 SESSION_END ``` ## 终止进程 **方法 1 — F9 键:** 1. 按下 **F9** 2. 输入列表中显示的 PID 3. 按下 **Enter** **方法 2 — 屏幕底部的提示符:** 提示符 `Entrez PID a tuer:` 始终显示在底部。 ### 安全规则 - PID **0, 4**(System, Idle)→ 自动拒绝 - 系统进程(`lsass.exe`, `csrss.exe`)→ 即使是管理员 Windows 也会拒绝 - 失败时 → 显示 `ECHEC (droits?)` 消息 + 取证日志 ### 建议 以 **管理员模式** 启动 SysWatch Pro 以最大化终止权限: ``` Clic droit cmd.exe → Exécuter en tant qu'administrateur ``` ## 声音警报 | 情况 | 声音 | |-----------|-----| | CPU 超过 85% | 1 声 900 Hz 蜂鸣 | | RAM 超过 90% | 1 声 900 Hz 蜂鸣 | | CPU 超过 95% | 3 声快速 1400 Hz 蜂鸣 | | RAM 超过 95% | 3 声快速 1400 Hz 蜂鸣 | 警报在每次超过阈值时 **仅重复一次** (当值保持高位时不会循环蜂鸣)。 ## 模块详情 ### `core/process.c` - `CreateToolhelp32Snapshot` 列出所有进程 - `GetProcessMemoryInfo` (psapi) 获取进程 RAM - `GetProcessTimes` + `GetSystemTimes` 获取进程 CPU - `QueryFullProcessImageNameA` 获取完整路径 - `count_threads()` : 通过 `TH32CS_SNAPTHREAD` 获取线程快照 - First-seen 注册表:检测 < 60s 的新进程 - 路径检查:system32 之外的系统二进制文件 = 可疑 ### `core/cpu.c` - `GetSystemTimes`:计算两次测量之间的 idle/kernel/user 增量 - 60 条目环形缓冲区用于历史记录 - 具有 9 个密度级别的 ASCII 迷你图 ### `core/memory.c` - `GlobalMemoryStatusEx`:总内存、可用内存、虚拟内存 - 与 CPU 模块相同的 60 条目环形缓冲区 ### `core/network.c` - `GetExtendedTcpTable` (iphlpapi):所有带 PID 的 TCP 连接 - 私有 IP 检测(10.x, 192.168.x, 172.16-31.x, 127.x) - 14 个已知恶意端口列表(RAT、矿工、出站 RDP) ### `core/anomaly.c` - 进程评分及规则累积 - 跟踪每个 PID 的高 CPU 连续时间(10s) - 进程 ↔ 网络连接关联 ### `core/logger.c` - 以二进制追加模式 `fopen` - 使用密钥 0xA7 逐字节 XOR - `ftell` 检测 5 MB 轮转 - 模式 `--decrypt`:读取 + 反向 XOR 输出到 stdout ### `gui/widgets.c` - `SetConsoleTextAttribute`:使用 8 种颜色 - `FillConsoleOutputCharacterA`:无闪烁清屏 - `Beep()`:Windows 原生声音警报 ### `gui/hotkeys.c` - `GetNumberOfConsoleInputEvents`:非阻塞检查 - `ReadConsoleInput`:读取 `KEY_EVENT` - 虚键码 `VK_F1` 到 `VK_F10` ### `web/httpserver.c` - `socket()` + `bind()` + `listen()` 在 `127.0.0.1:8080` - `ioctlsocket(FIONBIO)`:非阻塞模式 - 通过 `CreateThread` 创建专用线程 - 路由:`/api/data` → JSON | `/` → HTML dashboard ## 使用的 Windows API | 模块 | 函数 | 描述 | |--------|----------|-------------| | kernel32 | `GetSystemTimes` | CPU idle/kernel/user 时间 | | kernel32 | `GetSystemInfo` | 核心数 | | kernel32 | `GlobalMemoryStatusEx` | 内存统计 | | kernel32 | `CreateToolhelp32Snapshot` | 进程快照 | | kernel32 | `Process32First/Next` | 进程迭代 | | kernel32 | `Thread32First/Next` | 线程迭代 | | kernel32 | `GetTickCount` | First-seen 时间戳 | | kernel32 | `OpenProcess` | 通过 PID 获取句柄 | | kernel32 | `TerminateProcess` | 终止进程 | | kernel32 | `GetProcessTimes` | 进程 CPU | | kernel32 | `QueryFullProcessImageNameA` | exe 路径 | | kernel32 | `SetConsoleTextAttribute` | 控制台颜色 | | kernel32 | `Beep` | 声音警报 | | psapi | `GetProcessMemoryInfo` | 进程 RAM | | iphlpapi | `GetExtendedTcpTable` | 带 PID 的 TCP 连接 | | ws2_32 | `socket/bind/listen/accept` | HTTP 服务器 | | ws2_32 | `inet_ntoa/ntohs` | IP 地址转换 | ## 故障排除 ### `error: undefined reference to GetSystemTimes` → 你的 MinGW 版本太旧。手动的声明已经包含在 `process.h` 和 `cpu.c` 中。请确保使用的是提供的文件。 ### `error: undefined reference to GetExtendedUdpTable` → 不支持 32 位 MinGW。UDP 部分已被移除。 仅监控 TCP —— 这对于检测可疑连接已经足够。 ### Web dashboard 无法打开 → 检查是否有其他程序占用了 8080 端口: ``` netstat -ano | findstr :8080 ``` 如果被占用,修改 `web/httpserver.h` 中的 `HTTP_PORT`。 ### `warning: ignoring #pragma comment` → 无害。MinGW 忽略此 MSVC pragma。库通过命令行的 `-l` 传递。 ### 进程未被终止 — `droits insuffisants` → 以 **管理员身份** 重启 SysWatch Pro。 ### 日志不可读 → 正常 —— 它们是 XOR 加密的。使用: ``` SysWatchPro.exe --decrypt syswatch_forensic.log ``` ## 未来路线图 - [ ] 网络模块的 IPv6 支持 - [ ] 注册表键监控(HKLM Run) - [ ] 检测进程中的 DLL 注入 - [ ] 自动导出每日 HTML 报告 - [ ] 通过 `.ini` 文件配置警报阈值 - [ ] 静默模式(无控制台界面,纯 daemon) - [ ] Dashboard 支持 HTTPS(通过 mbedTLS 实现 TLS) - [ ] Windows toast 通知(WinRT) - [ ] 用于长期历史记录的 SQLite 数据库 *SysWatch Pro — 使用纯 C 语言为 Windows 开发* *模块化架构 — 零外部依赖*
标签:AMSI绕过, CPU内存监控, C语言开发, JSON API, Mr. Robot, Web仪表盘, Windows系统监控, 人工智能, 取证日志, 后渗透, 威胁检测, 客户端加密, 工具集, 异常检测, 数据加密, 无外部依赖, 无线安全, 本地服务器, 流量嗅探, 用户模式Hook绕过, 端点可见性, 系统管理工具, 网络安全, 网络安全审计, 网络连接监控, 隐私保护