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绕过, 端点可见性, 系统管理工具, 网络安全, 网络安全审计, 网络连接监控, 隐私保护