Try-H4ck-M3/modzero
GitHub: Try-H4ck-M3/modzero
ModZero 是一款基于 C++20 的 Modbus TCP 协议安全评估工具,用于 ICS/SCADA 环境下的 PLC 设备侦察、从机发现和内存转储。
Stars: 5 | Forks: 0
ModZero
ModBus Exploration Tool — Industrial Control Systems Reconnaissance & Assessment
ModZero 是一款** Modbus TCP 探索与安全评估工具**,专为工业控制系统(ICS/SCADA)安全研究人员和渗透测试人员设计。它可连接至可编程逻辑控制器(PLC),并执行设备识别、从机发现以及跨所有标准 Modbus 数据类型的内存转储。
## 功能
- **设备侦察** — 通过 Modbus FC 43 / MEI Type 0x0E(读取设备标识)识别 PLC 供应商、产品代码、固件版本等
- **从机 ID 暴力破解** — 扫描从机 ID 1–247,发现 Modbus 网关背后的活动设备
- **内存转储** — 读取并显示所有四个 Modbus 数据区域的值:
- 线圈(数字输出)
- 离散输入(数字输入)
- 输入寄存器(模拟输入)
- 保持寄存器(模拟输出)
- **智能边界检测** — 在触及内存限制时,从分块读取回退到单地址探测,并通过连续范围合并提供紧凑的输出
## 快速开始
### 前置条件
- 支持 C++20 的 **g++**
- **libmodbus** 开发库
- **TCLAP**(Templatized C++ Command Line Parser)— 仅需头文件
#### 安装依赖 (Ubuntu)
```
sudo apt install g++ libmodbus-dev libtclap-dev
```
### 构建
```
git clone https://github.com/Try-H4ck-M3/modzero.git
cd modzero
./build.sh
```
编译后的二进制文件将位于 `bin/modzero`。
## 使用方法
```
modzero -i
[options] [action(s)]
```
### 参数
| 参数 | 描述 |
|---|---|
| `-i ` | 目标 PLC IP 地址 **(必填)** |
| `-p ` | Modbus TCP 端口(默认:`502`) |
| `-s ` | Modbus 单元/从机 ID(默认:`1`) |
| `-t ` | 连接超时时间,以毫秒为单位(默认:`500`) |
| `-d ` | Modbus 数据包之间的延迟,以毫秒为单位(默认:`100`) |
| `-b` | 暴力破解从机 ID 1–247 |
| `-r` | 设备识别(侦察) |
| `-a` | 转储所有内存类型 |
| `-c` | 转储线圈值 |
| `-n` | 转储离散输入值 |
| `-e` | 转储输入寄存器值 |
| `-g` | 转储保持寄存器值 |
| `-h` | 显示帮助 |
### 示例
**基本设备侦察:**
```
./bin/modzero -i 192.168.1.100 -r
```
**暴力破解从机 ID:**
```
./bin/modzero -i 192.168.1.100 -b
```
**转储特定从机的所有内存:**
```
./bin/modzero -i 192.168.1.100 -s 10 -a
```
## 项目结构
```
modzero/
├── build.sh # Build script
├── bin/
│ └── modzero # Compiled binary
└── src/
├── main.cpp # Entry point and CLI orchestration
├── includes.h # Central includes
├── logger.h/cpp # Color-coded logging
├── recon.h/cpp # Device identification & slave brute-force
├── read.h/cpp # Memory dump functions
├── write.h/cpp # Write stubs (not yet implemented)
└── utils.h/cpp # Hex formatting & ASCII art banner
```
## 路线图
- [X] 通过 Modbus FC 43 / MEI 0x0E 进行设备侦察
- [X] 从机 ID 暴力破解 (1–247)
- [X] 内存转储 — 线圈、离散输入、输入寄存器、保持寄存器
- [X] 带范围合并的智能边界检测
- [X] 带颜色和时间戳的日志记录
- [X] ASCII 艺术 banner
- [ ] 写入功能(线圈/寄存器写入操作)
- [ ] 可配置的地址范围
- [ ] 机器可读的输出格式(JSON、CSV)
- [ ] CMake 构建系统
- [ ] 或许支持 Modbus RTU(串行)?
## 免责声明
本工具仅供**授权的安全评估和研究目的**使用。未经授权访问任何计算机或 ICS 是违法的。作者不对因滥用本工具而造成的任何损害负责。请负责任地使用,并且仅在您拥有或获得明确测试许可的系统上使用。
## 许可证
本项目基于 MIT 许可证授权。详情请参阅 [LICENSE](LICENSE) 文件。标签:C++, PKINIT, SCADA, 协议分析, 哈希传递, 工控安全, 插件系统, 数据擦除, 权限提升