fg-time/ENI-RAT-Fixed
GitHub: fg-time/ENI-RAT-Fixed
一款修复了 9 个关键缺陷的红队 C2 命令与控制框架,提供跨平台 Agent、加密通信与 Web 控制面板。
Stars: 0 | Forks: 0
# ENI-RAT 修复版 (Fixed Edition)
**远程管理工具包 — C2 命令与控制框架**
面向红队行动、安全评估和授权渗透测试的完整 C2 框架。端到端 AES-256 加密、跨平台 Agent、浏览器控制面板。
**基于 [Adam-ZS/ENI-RAT](https://github.com/Adam-ZS/ENI-RAT) 修复,原作者 [@Adam-ZS](https://github.com/Adam-ZS)。**
本工具仅限授权安全测试和教育用途。
未经授权访问计算机系统属于违法行为。使用者须遵守所有适用法律。
## 本 Fork 修复内容(9 个关键 Bug)
原始版本有 9 个 Bug 导致 C2-Agent 管道在 Windows 上完全不可用:
| # | Bug | 影响 | 修复 |
|---|-----|------|------|
| 1 | WebSocket 客户端帧缺少 RFC 6455 Masking | Agent 永远连不上 C2 服务器 | 按协议规范为帧添加掩码 |
| 2 | Keylogger 语法错误 | Agent 启动即崩溃 | 修正为 |
| 3 | REST API 任务只写内存不查 DB | Web 面板发命令 Agent 拿不到 | 改为读 SQLite |
| 4 | 心跳 ack 与任务响应帧碰撞 | Agent 消费了错误的 WebSocket 帧 | 心跳静默处理;循环排空混合响应 |
| 5 | 任务执行无异常保护 | 一个任务失败整个线程崩 | 所有任务包 try/except |
| 6 | 每次重连生成新 Agent ID | Web 面板命令发到僵尸 Agent | hostname 匹配复用已有 agent_id |
| 7 | 断线不重连 | 死 socket 空转,线程永不复原 | 断线检测 + 指数退避重试 |
| 8 | Google Fonts @import 阻塞面板 | 防火墙环境下页面卡死 | 改用系统字体,零外部依赖 |
| 9 | Windows GBK 编码崩溃 | emoji 导致服务器启动失败 | PYTHONIOENCODING=utf-8 |
## 新增功能
- **`start.bat`** — 双击一键启动 C2 + API + 面板
- **死 Agent 自动检测** — 60 秒无心跳 → 状态标 dead
- **MachineGuid 指纹** — 同机器重连保持相同 agent_id
- **WebSocket 线程安全** — send/recv 锁保护
- **自动重连** — 网络恢复后 Agent 自己回来
## 已知未修复
| 问题 | 状态 |
|------|------|
| 截图分辨率硬编码 1920x1080 | 源码已修,待重新构建 |
| 无文件管理器 — 仅支持单文件上传/下载 | 功能缺失 |
| 无远程桌面 — 仅截图,无实时画面 | 功能缺失 |
| 进程注入仅为空壳函数 | 未实现 |
| AV 免杀仅用户态 patch(VirtualProtect) | 对抗 EDR 较弱 |
## 快速开始
### 环境
pip install -r requirements.txt
### 启动 C2 服务器
**Windows(推荐):**
双击 start.bat
自动启动 C2 WebSocket、REST API 和 Web 面板。
**手动:**
set PYTHONIOENCODING=utf-8
python start.py
启动两个服务:
- WebSocket 服务器端口 8443(Agent 通信)
- REST API 和 Web 面板端口 5000
浏览器打开 进入控制面板。
### 构建 Payload
python builder/builder.py --host 你的IP地址
Builder 将 C2 服务器 IP 嵌入 Payload,同时生成唯一的 AES-256 密钥对。
**Builder 参数:**
| 参数 | 说明 |
|------|------|
| | C2 服务器 IP 或主机名(必填) |
| | WebSocket 端口(默认 8443) |
| | REST API 端口(默认 5000) |
| | PyInstaller 编译为 Windows 可执行文件(无窗口) |
| | PyArmor 混淆 |
| | 不安装持久化 |
| | 跳过沙箱/虚拟机检测 |
## 架构
目标机器 你的机器
+-----------------+ +----------------------+
| Agent | | C2 服务器 |
| (payload.py |<--AES-256--| |
| 或 .exe) | WebSocket | WebSocket :8443 |
| | | REST API :5000 |
| - 键盘记录 | | SQLite 数据库 |
| - 屏幕截图 | | Web 面板 |
| - Shell 执行 | | 死 Agent 检测 |
| - 文件操作 | | |
| - 持久化 | +----------+-----------+
| - AV 免杀 | |
| - 自动重连 | +----------+-----------+
+-----------------+ | 控制界面 |
| |
| Web 面板 |
| 桌面 GUI |
| 命令行 |
+----------------------+
## Agent 命令
Agent 上线后通过 C2 面板发送命令:
| 命令 | 功能 |
|------|------|
| | 在目标执行系统命令 |
| | 截取屏幕并回传图片 |
| | 开始键盘记录 |
| | 停止键盘记录并回传 |
| | 窃取目标文件 |
| | 下载文件到目标 |
| | 安装持久化 |
| | 尝试终止杀软进程 |
| | 返回系统信息 |
| | 暂停 Agent 指定时长 |
| | 退出 Agent |
| | 清除所有痕迹并删除自身 |
## 项目结构
+-- server/
| +-- c2_core.py WebSocket C2 服务器
| +-- api_server.py REST API 和 Web 面板
+-- client/
| +-- payload.py 跨平台 Agent
+-- gui/
| +-- rat_gui.py 桌面 GUI
+-- builder/
| +-- builder.py Payload 构建器
| +-- update_ddns.sh DDNS 更新脚本
+-- docs/
| +-- specs/ 设计文档
+-- start.py 启动脚本
+-- start.bat Windows 一键启动
+-- requirements.txt Python 依赖
## 加密
Agent 与 C2 之间所有通信使用 AES-256 CBC 模式加密。每次构建生成唯一的 32 字节密钥和 16 字节 IV,嵌入 Payload,绝不通过网络传输。
## 系统要求
- Python 3.8+
- C2 服务器:Linux 或 Windows
- Agent:Windows 或 Linux
- 依赖见 requirements.txt
## 许可证与免责声明
本软件仅供授权安全测试、研究和教育用途。未经授权访问计算机系统属于违法行为。作者不承担任何责任,不对任何滥用或损害负责。
使用本软件即表示你同意遵守所有适用的地方、州、国家和国际法律。
**修复版维护者 [@fg-time](https://github.com/fg-time)。原作者 [@Adam-ZS](https://github.com/Adam-ZS)。为红队行动而生。**
## English
**Fork of [Adam-ZS/ENI-RAT](https://github.com/Adam-ZS/ENI-RAT) by [@Adam-ZS](https://github.com/Adam-ZS)** — C2 framework with 9 critical bugs fixed for Windows deployment.
### Bug Fixes Summary
| # | Bug | Fix |
|---|-----|-----|
| 1 | WebSocket client masking missing | RFC 6455 compliant masking |
| 2 | Keylogger import syntax error | Fixed access |
| 3 | REST API task queue isolated from C2 | DB-driven task queue |
| 4 | Heartbeat/task response race | Silent heartbeat + drain loop |
| 5 | No exception guard on tasks | try/except wrapper |
| 6 | Agent ID regenerated each reconnect | Hostname-based ID reuse |
| 7 | No auto-reconnect | Disconnect detection + backoff |
| 8 | Google Fonts @import | System font stack |
| 9 | GBK encoding crash | PYTHONIOENCODING=utf-8 |
### New Features
- — one-click launcher
- Dead agent detection (60s timeout)
- MachineGuid fingerprint
- Thread-safe WebSocket
- Auto-reconnect
### Known Issues
| Issue | Status |
|-------|--------|
| Screenshot resolution hardcoded | Fixed, pending rebuild |
| No file browser | Missing |
| No remote desktop | Missing |
| Process injection stub | Not implemented |
| Basic AV evasion | Weak against EDR |
**Fixed Edition by [@fg-time](https://github.com/fg-time). Original by [@Adam-ZS](https://github.com/Adam-ZS). Built for red team operations.**
标签:C2框架, IP 地址批量处理, Python, 安全学习资源, 无后门, 漏洞挖掘, 远程管理工具, 逆向工具