jrzanol/anomalia
GitHub: jrzanol/anomalia
专为游戏服务器设计的实时网络流量分析器,通过插件化协议解码和统计启发式算法实现机器人检测与异常行为分析。
Stars: 0 | Forks: 0
Anomalia
Real-time network traffic analyzer for online game servers
Features •
Screenshots •
Getting Started •
Building •
Plugins •
License
Anomalia 是一款专为在线游戏服务器设计的模块化、基于插件的网络流量分析器。它能够实时捕获数据包,通过动态插件解密特定游戏的协议,编目数据包结构,并应用统计启发式算法来检测机器人、异常行为和可疑活动。
专为需要深入了解网络传输细节的服务器管理员、游戏安全研究人员和反作弊开发者而构建。
## 功能特性
- **实时数据包捕获** — 由 Npcap/libpcap 驱动的高性能捕获引擎,采用无锁 SPSC 队列实现零争用数据包处理。
- **基于插件的协议解码** — 每个游戏都拥有独立的插件 (DLL/.so),负责处理解密、去混淆和操作码映射。添加新游戏无需修改引擎。
- **数据包结构编目** — 在运行时解析 C 头文件,将二进制数据包解析为命名字段(位置、HP、物品 ID 等),并具备完整的类型感知能力。
- **统计分析引擎** — 通过 Boost.Accumulators 使用 Welford 算法进行均值、方差、频率和到达间隔时间 (IAT) 的在线计算,确保数值稳定性。
- **Bot 检测** — 四种加权启发式算法结合为一个单一的机器人概率评分:
| 启发式指标 | 权重 | 检测内容 |
|-----------|--------|-----------------|
| IAT 机械性 | 40% | 数据包时间几乎零方差 |
| 模式规律性 | 20% | 移动字段的变异系数低 |
| 操作码熵 (Shannon) | 20% | 操作码 repertoire 受限 |
| 响应一致性 | 20% | 操作码之间统一的机械时间 |
- **异常检测** — 标记异常的流量模式、不寻常的操作码序列以及偏离正常玩家行为的统计离群值。
- **玩家追踪** — 插件可以通过 API 暴露玩家列表、详细的玩家信息(等级、位置、HP)和连接统计数据。
- **会话管理** — 追踪单个玩家连接,处理 TCP 重组,并检测断开连接(FIN、RST、超时)。
- **灵活的数据包头描述符** — 插件描述其游戏数据包头部的确切二进制布局(操作码位置、大小字段、字节序、自定义字段),因此引擎从不假定固定格式。
- **持久化存储** — 基于 SQLite 的数据库,用于存储会话数据、警报和历史统计数据。
- **终端 UI (TUI)** — 使用 FTXUI 构建的全屏控制台仪表板,包含五个选项卡:Dashboard(仪表板)、Packets(数据包)、Players(玩家)、Alerts(警报)和 Config(配置)。
## 截图
Dashboard — plugin info, IP ranking, RTT, opcode frequency
Packets (dissected) — struct fields with offsets and statistics
Packets (hex dump) — raw hex + ASCII for uncataloged opcodes
Players — account/character info, per-player bot detection
## 快速开始
### 前置条件
| 依赖项 | 版本 | 备注 |
|------------|---------|-------|
| C++ 编译器 | C++20 | MSVC 2022+, GCC 12+, 或 Clang 15+ |
| CMake | 3.16+ | 构建系统 |
| Boost | 1.74+ | `system`, `thread` (编译); `accumulators`, `lockfree` (仅头文件) |
| Npcap SDK | 1.16+ | 仅限 Windows — 数据包捕获驱动 |
| FTXUI | 5.0.0 | 通过 CMake FetchContent 自动下载 |
### 快速入门
1. 安装 [Npcap](https://npcap.com/) (运行时驱动)。
2. 克隆仓库:
git clone https://github.com/your-username/anomalia.git
cd anomalia
3. 构建:
cmake -B build
cmake --build build --config Release
4. 将游戏插件 DLL 放置在 `plugins/` 目录中。
5. 运行:
./build/Release/Anomalia.exe
## 构建
### 控制台 UI (默认)
```
cmake -B build
cmake --build build --config Release
```
### Qt6 GUI *(开发中)*
```
cmake -B build -DANOM_BUILD_UI=ON
cmake --build build --config Release
```
### Linux *(开发中)*
Linux 支持已计划并在开发中。代码库使用平台抽象(`LoadLibrary`/`dlopen`, `GetProcAddress`/`dlsym`)以促进移植,但尚未在 Linux 上完全测试。
```
# Future — 尚未完全支持
cmake -B build
cmake --build build
```
## 插件
Anomalia 使用动态插件系统来支持不同的游戏。每个游戏都需要自己的插件 —— 一个实现数据包解密并通过纯 C ABI 提供元数据的共享库。
**创建插件很简单:**
1. 包含 `plugin_api.h` (唯一的依赖)。
2. 实现 `AnomGetPluginInfo` 和 `AnomDecryptPacket` (必需)。
3. 可选择实现操作码映射、头部描述符和玩家追踪。
4. 编译为 DLL/.so 并放入 `plugins/`。
```
#include "plugin_api.h"
ANOM_EXPORT AnomPluginResult AnomGetPluginInfo(AnomPluginInfo* info) {
info->abi_version = ANOM_PLUGIN_ABI_VERSION;
info->name = "My Game";
info->game_id = "mygame";
info->version_major = 1;
info->version_minor = 0;
info->protocol = ANOM_PROTO_TCP;
info->default_ports[0] = 7777;
info->num_ports = 1;
return ANOM_OK;
}
ANOM_EXPORT AnomPluginResult AnomDecryptPacket(
const uint8_t* in, uint32_t in_size,
uint8_t* out, uint32_t* out_size,
AnomPacketDirection direction,
uint32_t client_ip, uint16_t client_port,
uint32_t server_ip)
{
// Your decryption logic here
memcpy(out, in, in_size);
*out_size = in_size;
return ANOM_OK;
}
```
完整的插件开发指南,请参阅 **[docs/PLUGINS.md](docs/PLUGINS.md)**。
## 项目结构
```
anomalia/
├── src/
│ ├── Core/ # Core engine, types, platform abstractions
│ ├── Plugins/ # Plugin API and dynamic loader
│ ├── Pipeline/ # Capture engine and lock-free packet queue
│ ├── Catalog/ # Struct cataloging and C header parser
│ ├── Stats/ # Statistical engine and bot detector
│ ├── Database/ # SQLite persistence layer
│ └── UI/
│ ├── Console/ # FTXUI terminal interface
│ └── Qt/ # Qt6 graphical interface (in development)
├── plugins/ # Game plugin DLLs (runtime)
├── catalog/ # Game struct header files (.h)
├── 3rdparty/ # Npcap SDK, SQLite
├── docs/
│ ├── DESIGN.md # Software design document
│ ├── PLUGINS.md # Plugin development guide
│ └── img/ # Documentation images
├── CMakeLists.txt
└── LICENSE
```
## 路线图
- [x] 具有无锁队列的核心捕获引擎
- [x] 具有 ABI 版本控制的动态插件系统
- [x] 从 C 头文件编目数据包结构
- [x] 统计分析引擎 (Welford/Boost.Accumulators)
- [x] Bot 检测 (4 种组合启发式算法)
- [x] FTXUI 终端仪表板
- [x] 玩家追踪 API (ABI v4+)
- [x] SQLite 持久化
- [ ] Qt6 图形界面
- [ ] Linux 平台支持
- [ ] 插件热重载
- [ ] 用于外部集成的 REST API
- [ ] 警报 Webhook (Discord, Slack)
- [ ] 捕获会话的回放/播放
## 许可证
本项目采用 **GNU General Public License v3.0** 许可 — 详情请参见 [LICENSE](LICENSE) 文件。
## 支持项目
如果 Anomalia 对您有用,请考虑支持其开发:
**Bitcoin:** `bc1q40mtqs5dz0mzfsnag97a6we8dtrls7fwr23fcg`
## 联系方式
- **GitHub:** [@jrzanol](https://github.com/jrzanol)
- **Email:** jrzanol.92@gmail.com
标签:Bash脚本, C++20, Npcap, 协议逆向, 反作弊, 异常检测, 数据包解剖, 服务端安全, 机器人检测, 深度包检测, 游戏安全, 游戏服务器, 统计分析, 网络安全, 网络安全分析, 网络游戏, 隐私保护