crackmesone/crackmesone_python
GitHub: crackmesone/crackmesone_python
crackmes.one 平台的后端源代码,使用 Python/Flask 和 MongoDB 构建的逆向工程挑战分享与解决社区。
Stars: 9 | Forks: 3
# Crackmes.one
[crackmes.one](https://crackmes.one) 的源代码,这是一个用于分享和解决逆向工程挑战的平台。使用 Python 和 Flask 构建。
## 环境要求
- Python 3.8+
- MongoDB 4.0+
- `zip` 命令(用于在批准提交时创建受密码保护的压缩包)
## 安装
1. 创建虚拟环境:
```
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
2. 安装依赖:
```
pip install -r requirements.txt
```
3. 配置应用程序:
- 编辑 `config/config.json` 配置你的设置
- 设置 MongoDB 连接详情
- 如果需要,配置 reCAPTCHA(设置 `Enabled: true`)
- 配置 Discord webhook 用于通知(可选)
- 为会话设置安全的 `SecretKey`
## 运行
### 开发环境
```
python run.py
```
### 生产部署
#### 首次设置
1. 在你的服务器上克隆代码库:
```
cd /home/crackmesone
git clone crackmesone_python
cd crackmesone_python
```
2. 运行设置脚本:
```
chmod +x deploy/setup.sh
./deploy/setup.sh
```
3. 配置应用程序:
```
cp config/config.json.example config/config.json
nano config/config.json # Edit with your settings
```
4. 更新 nginx 以反向代理到 Python 应用程序:
```
upstream python_backend {
server 127.0.0.1:8081;
}
location / {
proxy_pass http://python_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
5. 启动服务:
```
sudo systemctl start crackmesone
sudo systemctl status crackmesone
```
#### 后续部署
```
./deploy/deploy.sh
```
或手动执行:
```
git pull
source venv/bin/activate
pip install -r requirements.txt --quiet
deactivate
sudo systemctl reload crackmesone
```
#### 常用命令
```
# 检查状态
sudo systemctl status crackmesone
# 查看 logs
sudo journalctl -u crackmesone -f
tail -f /var/log/gunicorn/error.log
# 重启(如果 reload 不起作用)
sudo systemctl restart crackmesone
```
## 项目结构
```
crackmesone_python/
├── app/
│ ├── __init__.py # Flask app factory
│ ├── controllers/ # Route handlers
│ ├── models/ # Database models
│ └── services/ # Shared services
├── config/
│ └── config.json # Configuration file
├── deploy/
│ ├── gunicorn.conf.py # Gunicorn configuration
│ ├── crackmesone.service # Systemd service file
│ ├── setup.sh # First-time setup script
│ └── deploy.sh # Deployment script
├── review/ # Reviewer tool (moderation interface)
│ ├── routes.py # Reviewer Flask blueprint
│ ├── users.json # Reviewer credentials
│ └── templates/ # Reviewer templates
├── script/ # Utility scripts
│ └── generate_reviewer_password_hash.py # Password hash generator
├── templates/ # Jinja2 templates
├── static/ # Static files (CSS, JS, images)
├── tmp/ # Upload staging area
├── requirements.txt # Python dependencies
├── run.py # Entry point
└── README.md
```
## 功能
- 用户注册和身份验证
- 上传 crackmes(逆向工程挑战)
- 上传解决方案/writeup
- 对 crackmes 进行评论
- 评分系统(难度和质量)
- 搜索功能
- RSS 订阅源
- 通知
- 内容审核(用于批准/拒绝提交的审核工具)
## 配置
编辑 `config/config.json`:
- **Database.URL**: MongoDB 连接字符串(默认:`mongodb://127.0.0.1:27017`)
- **Database.Name**: 数据库名称(默认:`crackmesone`)
- **Server.Host**: 要绑定的主机(默认:`127.0.0.1`)
- **Server.Port**: 要运行的端口(默认:`8081`)
- **Session.SecretKey**: 用于会话签名的密钥(在生产环境中务必更改!)
- **Session.CookieName**: 会话 cookie 名称
- **Recaptcha.Enabled**: 启用/禁用 reCAPTCHA
- **Recaptcha.SiteKey**: 你的 reCAPTCHA 站点密钥
- **Recaptcha.Secret**: 你的 reCAPTCHA 密钥
- **Discord.Enabled**: 启用/禁用新提交的 Discord 通知
- **Discord.WebhookURL**: 你的 Discord webhook URL(从 Discord 频道设置 → 集成 → Webhook 获取)
- **Reviewer.Enabled**: 启用/禁用审核工具(用于审核提交的内容)
- **Reviewer.PasswordSalt**: 用于审核员密码哈希的 salt(在生产环境中务必更改!)
### 审核工具
审核工具是一个独立的身份验证系统,供站点管理员批准/拒绝 crackme 和解决方案的提交。可以通过 `/review` 访问。
#### 启用审核工具
1. 在 `config/config.json` 中将 `Reviewer.Enabled` 设置为 `true`
2. 为 `Reviewer.PasswordSalt` 设置一个安全的随机字符串
#### 审核员凭证 (`review/users.json`)
审核员账户存储在 `review/users.json` 中,格式如下:
```
{
"username": {
"password_hash": "sha256-hash-of-password-plus-salt",
"is_admin": false
}
}
```
- **password_hash**: 密码与配置中的 `PasswordSalt` 拼接后的 SHA256 哈希值
- **is_admin**: 如果为 `true`,则该用户拥有管理员权限(可以删除已批准的内容、管理审核员、删除用户)
#### 创建审核员账户
使用密码哈希生成器脚本来创建密码哈希:
```
python script/generate_reviewer_password_hash.py
```
然后将用户名和哈希值添加到 `review/users.json` 中:
```
{
"newreviewer": {
"password_hash": "",
"is_admin": false
}
}
```
或者,现有的管理员可以通过 `/review/managereviewers` 的 Web 界面添加新的审核员。
#### 审核员与管理员权限对比
| 操作 | 审核员 | 管理员 |
|--------|----------|-------|
| 批准/拒绝待处理的 crackmes | 是 | 是 |
| 批准/拒绝待处理的解决方案 | 是 | 是 |
| 删除已批准的 crackmes | 否 | 是 |
| 删除已批准的解决方案 | 否 | 是 |
| 删除评论 | 否 | 是 |
| 删除用户账户 | 否 | 是 |
| 重置用户密码 | 否 | 是 |
| 管理审核员账户 | 否 | 是 |
## 常见问题
**如何报告安全漏洞?**
请查看 [SECURITY.md](SECURITY.md) 了解有关报告安全问题的说明。
## 之前的代码库
该站点最初使用 Go 编写。旧的代码库归档于 [crackmesone/crackmes.one](https://github.com/crackmesone/crackmes.one)。
标签:Flask, MongoDB, Python, Web平台, 云资产清单, 无后门, 社区, 逆向工具, 逆向工程