Miro-sh/matrix-checker
GitHub: Miro-sh/matrix-checker
一个通过 MAS 注册流程精确检测 Matrix.org 用户名可用性的扫描工具,解决了传统 profile 查询误报率高的问题。
Stars: 1 | Forks: 0
# matrix-checker
一个用于 Matrix.org 的用户名可用性扫描工具。给它提供一个名单列表,每行一个,
它会告诉你哪些用户名仍然可以注册。
## 为什么不直接使用 /profile
大多数脚本通过调用
`GET /_matrix/client/v3/profile/@name:matrix.org` 来检查 Matrix 用户名。在 matrix.org 上,这种检查方式在很多情况下是不准确的。那里的身份验证由
Matrix Authentication Service (MAS) 处理,许多已经存在的账户仍然会在 profile endpoint 返回 `No row found (profiles)`。像 `void`、`ghost`、
`zero`、`hex` 和 `cipher` 这样的名字通过这种方式读取会显示为“可用”,尽管它们
实际上已被注册。
matrix-checker 会询问实际拥有账户的组件。它会重放
MAS 注册表单的用户名验证步骤并读取结果。这样就避免了 profile 技巧带来的误报,
并且绝对不会创建账户。
## 工作原理
1. `GET /register/password` 以获取 session cookie 和 CSRF token。
2. 带着用户名和不匹配确认字段的密码发起 `POST /register/password` 请求。
密码不匹配会导致表单每次都提交失败,因此注册过程永远不会
完成。服务器仍然会首先验证用户名,如果该名称已被使用,则会返回
"This username is already taken"。如果没有该提示,则意味着
该名称可用。
MAS endpoint 是从 `/_matrix/client/v1/auth_metadata` 读取的,因此同样的
方法也适用于其他委托给 MAS 实例的 homeserver。
## 安装
```
git clone https://github.com/Miro-sh/matrix-checker.git
cd matrix-checker
pip install -r requirements.txt
```
## 使用方法
```
# 检查列表,每行一个用户名
python3 matrix_scan.py -i wordlists/pokemon.txt
# 提高并发并保存空闲名称
python3 matrix_scan.py -i input.txt -c 4 -o available.txt
# 指向另一个使用 MAS 的 homeserver
python3 matrix_scan.py -s https://example.org -i input.txt
```
### 选项
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `-i, --input` | `input.txt` | 输入文件,每行一个用户名 |
| `-s, --homeserver` | `https://matrix.org` | Homeserver 基础 URL |
| `-c, --concurrency` | `3` | 并行请求数 |
| `-t, --timeout` | `20` | 每个请求的超时时间(秒) |
| `-o, --available-out` | `available.txt` | 写入可用用户名的文件路径 |
空行和以 `#` 开头的行将被跳过,重复项会被移除,并且在检查前 `@user:matrix.org` 会被简化为 `user`。
## 示例输出
```
[*] MAS register endpoint : https://account.matrix.org/register/password
[*] 7 pseudos a verifier | concurrence 2
[+] zzq9x7k2vplm4random FREE
[-] ghost TAKEN
[-] cipher TAKEN
[-] void TAKEN
[+] qwlkjzxcv8827aa FREE
[*] Termine en 0.3s
Libres : 2
Pris : 5
Invalides : 0
Erreurs : 0
```
每行的前缀含义如下:`+` 表示可用,`-` 表示已被占用,`x` 表示无效的
localpart,`!` 表示出现错误。
## 词表
`wordlists/` 文件夹中有一些按主题分类的列表,你可以将其作为输入使用。
| 文件 | 主题 |
|------|-------|
| `attacks.txt` | Web 和网络攻击技术 |
| `bugbounty.txt` | Bug bounty 工具和术语 |
| `pokemon.txt` | 法语 Pokémon 名称 |
| `pays.txt` | 法语国家名称 |
| `nouns_en.txt` | 常见英语名词 |
| `nouns_fr.txt` | 常见法语名词 |
如果你愿意,可以先将它们合并到一个文件中:
```
cat wordlists/*.txt > input.txt
python3 matrix_scan.py -i input.txt -o available.txt
```
## 注意事项与限制
请保持较低的并发度,大约在 3 到 5 之间。MAS 会对突发请求进行 rate-limits,扫描器在遇到 `429` 错误时会自动退避并重试。仅查询符合 Matrix 语法 `[a-z0-9._=/+-]` 的小写 localpart;其他任何内容都会被标记为 `INVALID`。由于注册尝试是故意设置为无效的,因此不会在服务器端写入任何内容。
## 免责声明
请仅使用此工具检查你自己想要注册的名称,并遵守
matrix.org 的服务条款。
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:Matrix, Python, 无后门, 用户名枚举, 系统独立性, 逆向工具