krya1012/password-hacker-java
GitHub: krya1012/password-hacker-java
一个 Java 编写的教学型 TCP 密码破解客户端,通过分阶段逐步引入暴力破解、字典攻击、异常泄露和边信道攻击技术来学习网络安全基础。
Stars: 0 | Forks: 0
# 密码破解器 (Java)
这是一个 Hyperskill 项目,采用渐进式的方式实现了一个 TCP 密码破解客户端。每个阶段都会引入一种更复杂的攻击技术,最终实现时间边信道攻击。
## 技术栈
| 层级 | 技术 |
|---|---|
| 编程语言 | Java 17+ |
| 构建 | Gradle (Hyperskill wrapper) |
| 测试 | Hyperskill `hs-test` 框架 (底层使用 JUnit 4) |
| 协议 | TCP socket — `DataOutputStream.writeUTF` / `DataInputStream.readUTF` |
| 通信格式 | 纯文本 (阶段 1–3),JSON (阶段 4–5) |
## 如何运行
该程序将 host、port 以及(仅限阶段 1)一个 message 作为命令行参数。
```
# 编译
./gradlew :Password_Hacker__Java_-task:classes
# Stage 1 — 发送单条消息
java -cp "Password Hacker (Java)/task/build/classes/java/main" hacker.Main localhost 9090 mypassword
# Stages 2–5 — 没有 message 参数;程序会自行发现密码
java -cp "Password Hacker (Java)/task/build/classes/java/main" hacker.Main localhost 9090
```
在启动客户端之前,服务器必须已经在指定的 host 和 port 上进行监听。
**阶段 5 输出示例:**
```
{"login": "superuser", "password": "aDgT9tq1PU0"}
```
## 阶段概述
| 阶段 | 名称 | 技术 |
|---|---|---|
| 1 | 建立连接 | 连接一次,发送一个 message,打印回复 |
| 2 | 简单爆破 | 遍历所有 `a–z 1–9 0` 组合,最短的优先 |
| 3 | 字典爆破 | 尝试每个字典单词的每种大小写排列 (每个单词 2^N 种) |
| 4 | 捕获异常 | JSON login+password;利用服务器异常泄露逐个前缀地破解密码 |
| 5 | 基于时间的漏洞 | 与阶段 4 相同,但通过 100ms 的服务器 `Thread.sleep` 而非异常响应来检测前缀匹配 |
## 服务器协议 (阶段 4–5)
**请求:**
```
{"login": "admin", "password": "abc"}
```
**响应:**
| `result` 值 | 含义 |
|---|---|
| `"Wrong login!"` | login 未被识别 |
| `"Wrong password!"` | login 正确,密码错误 (阶段 5:如果密码是一个前缀,可能包含 100ms 延迟) |
| `"Exception happened during login"` | login 正确且密码是真实密码的非空前缀 (仅限阶段 4) |
| `"Connection success!"` | 两者均正确 |
| `"Bad request!"` | JSON 格式错误 |
## 如何运行测试
```
# 仅运行 active stage 的测试(推荐)
./gradlew :Password_Hacker__Java_-task:test --tests HackingTests
# 运行所有测试(会产生一个无害的 ServerHack initializationError — 不是真正的失败)
./gradlew :Password_Hacker__Java_-task:test
```
测试报告将写入:
```
Password Hacker (Java)/task/build/reports/tests/test/index.html
```
标签:DOS头擦除, Homebrew安装, PoC, SysWhispers, TCP通信, 侧信道攻击, 后台面板检测, 域名枚举, 密码破解, 暴力破解, 网络安全, 隐私保护