rahilmadoune/Hacker_vs_Defender
GitHub: rahilmadoune/Hacker_vs_Defender
一款基于 Python 和 Pygame 开发的网络安全防御模拟游戏,让玩家通过实际防御操作抵御模拟的 AI 攻击者来学习网络安全原理。
Stars: 0 | Forks: 0
# 🛡️ Hacker vs Defender — 网络安全模拟
[](https://github.com/rahilmadoune/hacker-vs-defender/actions)
[](https://www.python.org/downloads/)
[](LICENSE)
## 📸 游戏截图

*图 1:包含难度选择、游戏指南访问和持久化排行榜的主菜单。*

*图 2:显示数据包流、节点状态警报和防火墙激活状态的模拟画面。*
## 📋 目录
- [项目概述](#-project-overview)
- [游戏概念](#-game-concept)
- [网络安全学习目标](#-cybersecurity-learning-objectives)
- [使用的技术](#️-technologies-used)
- [项目结构](#-project-structure)
- [如何运行](#-how-to-run)
- [游戏指南](#-gameplay-guide)
- [游戏机制](#️-game-mechanics)
- [难度系统](#-difficulty-system)
- [测试与 CI](#-testing--ci)
- [未来改进](#-future-improvements)
## 📌 项目概述
**Hacker vs Defender** 是一个学术级的网络安全模拟游戏,玩家将扮演一名网络安全分析师,负责保护企业网络免受持续的 AI 驱动的攻击者的攻击。
该模拟模拟了真实的攻击生命周期——从前期的侦察和端口扫描,到主动利用,再到横向移动和服务器攻陷——并要求玩家使用真实的防御技术进行应对。
本项目作为 **Python 大学课程作业** 开发,旨在展示对以下方面的实际理解:
- 网络安全原则
- 攻击模拟与建模
- 防御对策
- 入侵检测系统
它也被构建为一个合格的 **独立软件工程项目**:代码库经过了完整的单元测试,并在每次 push 时运行持续集成,而不仅仅是一个课程作业演示。
## 🎮 游戏概念
网络包含:
- **7 个节点** — 工作站和数据库服务器
- **1 个中央服务器** — 主要目标(必须受到保护)
- **一个可配置的防火墙** — 可以阻止攻击者流量
- **模拟的网络端口** — SSH、HTTP、FTP、MySQL、Telnet、SMB 等
**AI 攻击者** 遵循 **Cyber Kill Chain**:
1. 🔍 **侦察** — 通过 ping 扫描发现存活主机
2. 🔎 **扫描** — 枚举开放端口(模拟 TCP SYN 扫描)
3. 💥 **利用** — 基于概率对开放端口进行漏洞利用尝试
4. 🔗 **持久化 / 横向移动** — 通过被攻陷的节点向服务器跳板渗透
**玩家(Defender)** 必须:
- 使用 IDS 日志检测可疑活动
- 在易受攻击的端口被利用之前将其关闭
- 激活防火墙以阻止攻击者的 IP
- 修复受损节点以恢复健康度
- 使用蜜罐和紧急封锁等战略工具
- 坚持生存指定的攻击波数以获得胜利
## 🎓 网络安全学习目标
| 概念 | 实现 |
|--------|---------------|
| **Cyber Kill Chain** | AI 攻击者阶段(侦察 → 扫描 → 利用 → 持久化) |
| **端口安全** | 开放/关闭/过滤的端口状态,服务枚举 |
| **防火墙管理** | 带有 IP 封锁规则的可切换防火墙 |
| **入侵检测** | 带有基于严重程度的警报和扫描计数器的 IDS |
| **漏洞修补** | 恢复健康度,端口加固操作 |
| **欺骗技术** | 部署蜜罐以误导攻击者 |
| **攻击概率建模** | 漏洞利用成功概率随时间升级 |
| **事件响应** | 玩家必须在时间压力下优先采取行动 |
| **网络拓扑** | 节点、连接和信任区域的可视化表示 |
## 🛠️ 使用的技术
| 技术 | 用途 |
|-----------|---------|
| **Python 3.9+** | 核心语言 |
| **Pygame 2.x** | 2D 渲染、事件处理、动画 |
| **dataclasses** | 网络实体的整洁、类型化数据模型 |
| **enum** | 类型安全的状态机 |
| **random** | 蒙特卡洛漏洞利用概率模拟 |
| **time** | 冷却管理,IDS 时间戳 |
| **pytest** | 单元测试套件 |
| **GitHub Actions** | 跨 Python 3.9–3.12 的持续集成 |
## 📁 项目结构
```
hacker-vs-defender/
│
├── main.py # Entry point, game loop & state machine
├── network.py # Network topology, nodes, ports, firewall, IDS
├── attacker_ai.py # AI hacker — kill chain phases, packet animation
├── defender_actions.py # Player actions, scoring system, cooldowns
├── ui.py # Pygame rendering — diagram, HUD, log panel, tutorial
├── high_scores.py # Persistent leaderboard & tutorial-seen flag (scores.json)
├── assets/ # Screenshots and future image/sound assets
├── tests/ # pytest unit test suite
│ ├── test_network.py
│ ├── test_attacker.py
│ ├── test_defender.py
│ └── test_high_scores.py
├── pytest.ini # pytest configuration
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt # Development/test dependencies
├── .gitignore
├── LICENSE # MIT License
└── README.md # This file
```
### 模块职责
**`network.py`**
定义了核心模拟实体:`NetworkNode`、`Port`、`Firewall` 和 `IDS`。提供 `build_network()` 工厂来构建初始拓扑。
**`attacker_ai.py`**
将 `AttackerAI` 类实现为在 kill chain 各个阶段循环的有限状态机。包含用于动画流量可视化的 `Packet` 类、三个可配置的难度配置文件,以及用于蜜罐减速效果的 `speed_multiplier` 钩子。
**`defender_actions.py`**
提供带有六个防御者动作的 `DefenderController`,每个动作都有自己的冷却时间。`ScoreTracker` 会根据玩家的动作和网络事件增加/扣除分数,并评估输/赢条件。
**`ui.py`**
整个 Pygame 渲染引擎。绘制网络图、HUD、带冷却条的动作栏、IDS 警报日志、主菜单(含排行榜)、游戏结束界面以及多页的 How to Play 教程。
**`high_scores.py`**
轻量级的 JSON 持久化层(`scores.json`),存储前 5 名最高分数以及玩家是否完成了首次运行教程。
**`main.py`**
顶层 `HackerVsDefender` 类通过 `MENU → HOW_TO_PLAY → PLAYING → GAME_OVER` 状态机协调所有系统。
## 🚀 如何运行
### 前置条件
- Python 3.9 或更高版本
- pip
### 安装
```
# 1. Clone the repository
git clone https://github.com/your-username/hacker-vs-defender.git
cd hacker-vs-defender
# 2. (Optional) Create a virtual environment
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate.bat # Windows
# 3. Install dependencies
pip install -r requirements.txt
# (Optional) Install development dependencies for testing
pip install -r requirements-dev.txt
# 4. Run the game
python main.py
# 5. Run the test suite
python -m pytest
```
### 控制
| 按键 | 动作 |
|-----|--------|
| `S` | 扫描网络 |
| `C` | 关闭端口(在选中的节点上) |
| `F` | 切换防火墙 |
| `P` | 修复节点 |
| `H` | 部署蜜罐 |
| `L` | 紧急封锁 |
| `ESC` | 返回菜单(或跳过教程) |
| `←` / `→` | 导航 How to Play 页面 |
| `Enter` | How to Play 中的 下一步 / 完成 |
| **鼠标点击(节点)** | 选择节点作为目标 |
| **鼠标点击(按钮)** | 执行动作 |
## 🎮 游戏指南
1. 从主菜单**选择难度**(Easy / Medium / Hard)。
2. **网络图**显示所有节点当前的安全状态。
3. 查看 **IDS 日志**(右侧面板)以获取警报——CRITICAL 警报需要立即处理。
4. **端口徽章**(节点上的带编号圆圈)显示攻击者可以利用多少个开放端口。
5. **关闭端口**并**修复节点**以减少攻击面。
6. 尽早**激活防火墙**——它会阻止攻击者的 IP 并显著减缓其进度。
7. 坚持生存**攻击波数**以获得奖励分数。
8. 当您在不让服务器被攻陷的情况下撑过目标波数(Easy = 3,Medium = 5,Hard = 7)时,游戏将以**胜利**告终;如果服务器的健康度降至 0%,则以**失败**告终。
9. 分数会自动保存到本地排行榜(前 5 名),并显示在主菜单和游戏结束界面上。
### 节点颜色指南
| 颜色 | 含义 |
|--------|---------|
| 🟢 绿色 | 安全 |
| 🟡 黄色 | 正在被攻击者扫描 |
| 🟠 橙色 | 脆弱(发现开放端口) |
| 🔴 红橙色 | 遭到主动攻击 |
| ❤️ 绯红色 | 已被攻陷 |
| 🔵 青色 | 已修复 |
## ⚙️ 游戏机制
### 攻击者 AI — Kill Chain
AI 循环经历四个阶段:
| 阶段 | 行为 |
|-------|-----------|
| 侦察 | 发现节点(模拟 ping 扫描) |
| 端口扫描 | 枚举已知节点上的开放端口 |
| 漏洞利用 | 基于概率对开放端口进行漏洞利用尝试 |
| 持久化 | 通过被攻陷的节点向服务器进行横向移动 |
**升级**:攻击者的漏洞利用成功概率会随着时间的推移而增加,模拟了一个更有经验或更坚决的对手。
### 计分
| 事件 | 分数 |
|-------|--------|
| 关闭端口 | +50 |
| 修复节点 | +75 |
| 阻挡攻击 | +30 |
| 激活防火墙 | +40 |
| 网络扫描 | +20 |
| 部署蜜罐 | +60 |
| 紧急封锁 | +80 |
| 坚持一波 | +100 |
| 游戏获胜 | +300 |
| 节点被攻陷 | −150 |
| 服务器受损 | −50 |
| 服务器被攻陷 | −500 |
### 防御者冷却时间
| 动作 | 冷却时间 |
|--------|----------|
| 扫描网络 | 8s |
| 关闭端口 | 5s |
| 切换防火墙 | 15s |
| 修复节点 | 12s |
| 部署蜜罐 | 25s |
| 紧急封锁 | 40s |
## 🎚️ 难度系统
| 设置 | 扫描间隔 | 攻击间隔 | 利用几率 | 最大目标数 | 波数间隔 | 获胜波数 |
|---------|--------------|-----------------|---------------|-------------|---------------|---------------|
| **Easy** | 4.0s | 6.0s | 25% | 1 | 45s | 3 |
| **Medium** | 2.5s | 3.5s | 40% | 2 | 30s | 5 |
| **Hard** | 1.0s | 1.8s | 60% | 3 | 20s | 7 |
## 🧪 测试与 CI
核心模拟逻辑——网络状态、攻击者 AI、防御者动作、计分和高分持久化——由 `tests/` 中的 `pytest` 套件覆盖。UI 渲染(`ui.py`)被有意排除在单元测试之外,因为它是最好通过实际玩游戏来验证的 Pygame 绘制代码。
```
pip install -r requirements-dev.txt
python -m pytest
```
每次 push 和 pull request 都会自动通过 GitHub Actions(`.github/workflows/ci.yml`)在 **Python 3.9、3.10、3.11 和 3.12** 环境下运行完整的测试套件,因此本 README 中的兼容性声明是经过持续验证的,而不仅仅是口头声明。
## 🔮 未来改进
- [x] **保存高分** — 通过 JSON 实现持久化排行榜
- [x] **游戏内引导** — 首次运行的 How to Play 教程
- [ ] **多种攻击媒介** — DDoS 模拟、SQL 注入、网络钓鱼
- [ ] **网络流量可视化** — 数据包图表 / 流向图
- [ ] **节点角色** — 添加路由器、VPN 网关、DMZ 区段
- [ ] **攻击者档案** — 脚本小子、国家级黑客、内部威胁
- [ ] **事件回放** — 游戏后查看完整的攻击时间线
- [ ] **音效** — 警报声,防火墙激活音效
- [ ] **可在网页游玩的版本** — 导出 pygbag/WASM 以在浏览器中游玩
- [ ] **多人游戏模式** — 两名玩家,一名攻击者和一名防御者
## 📚 学术参考
本模拟借鉴了以下网络安全框架:
- **Lockheed Martin Cyber Kill Chain** — 7 阶段入侵模型
- **MITRE ATT&CK 框架** — 对手的战术、技术和程序
- **NIST SP 800-61** — 计算机安全事件处理指南
- **CIS Controls** — 优先的防御性安全行动
## 👤 作者
**Rahil Aya Soulaf MADOUNE**
## 📄 许可证
在 [MIT 许可证](LICENSE) 下发布——可免费使用、修改和分发,但需注明出处。
*作为一个网络安全项目的测试游戏开发。所有攻击模拟均为虚构,仅供教育目的。*
标签:安全规则引擎, 底层分析