Android 游戏平台专用的 Unity Runtime 注入漏洞自动化检测工具。
一句话总结:攻击者可以完全控制受影响的 Unity 游戏/应用,拿到该应用的所有权限。
关键点:在 Android 上,恶意应用可以劫持 Unity 应用已获得的权限
关键点:在 Windows 上,如果游戏注册了 custom URI handler,点击特制链接即可触发漏洞
好消息:攻击者无法突破应用本身的权限边界
坏消息:很多游戏要求大量权限(摄像头、麦克风、存储、位置等),攻击者可以完全利用这些权限
作为安卓游戏平台运营方,最糟糕的后果:
[来源:Unity 官方安全公告、GMO Flatt Security 技术分析]
# 仅需 Python 3.7+ 标准库,无需额外依赖
python3 --version # 确认 Python 版本
# 步骤 1: 运行测试
python test_demo.py
# 步骤 2: 检测单个 APK
python unity_vulnerability_checker.py your_game.apk
# 步骤 3: 批量检测
python unity_vulnerability_checker.py --batch /path/to/apks
# 步骤 4: 查看使用示例
python usage_examples.py
from unity_vulnerability_checker import check_unity_vulnerability
# 检测单个 APK 文件
result = check_unity_vulnerability("your_game.apk")
# 方式 1: 使用便捷属性
if result.is_vulnerable:
print(f"⚠️ 应用受影响!({result.version})")
print(f"建议:{result.recommendation}")
elif result.is_safe:
print(f"✅ 应用安全")
print(f"原因:{result.message}")
else:
print(f"❓ 需要人工复核")
print(f"原因:{result.message}")
# 方式 2: 使用 status 字段
if result.status == "positive":
print(f"受影响:{result.version}")
from unity_vulnerability_checker import batch_check
# 批量扫描一个目录
results = batch_check("/path/to/apk/folder")
# 筛选受影响的应用
vulnerable_apps = [
(name, result)
for name, result in results.items()
if result.is_vulnerable
]
print(f"发现 {len(vulnerable_apps)} 个受影响的应用")
for name, result in vulnerable_apps:
print(f" - {name}: {result.version}")
from unity_vulnerability_checker import UnityVulnerabilityChecker
class MyPlatform:
"""你的游戏平台系统"""
def __init__(self):
self.checker = UnityVulnerabilityChecker()
def check_new_upload(self, apk_path: str) -> bool:
"""检查新上传的 APK,返回是否可以上架"""
result = self.checker.check_apk(apk_path)
if result.is_vulnerable:
# 受影响 - 拒绝上架
self.notify_developer(
f"您的应用受 Unity 漏洞影响\n"
f"版本:{result.version}\n"
f"建议:{result.recommendation}"
)
return False
elif result.is_safe:
# 安全 - 批准上架
return True
else:
# 无法确定 - 人工复核
self.queue_manual_review(apk_path, result.message)
return False
def notify_developer(self, message: str):
"""通知开发者(实现你的通知逻辑)"""
pass
def queue_manual_review(self, apk_path: str):
"""加入人工复核队列(实现你的逻辑)"""
pass
工具返回三种结果类型:
输出示例(单行简洁格式):
# 受影响的应用
⚠️ 该应用受 CVE-2025-59489 影响 (Unity 2019.2.6f1)
# 安全的应用(3 种情况)
✅ 该应用安全 - 非 Unity 应用
✅ 该应用安全 - 已使用 Unity patcher 工具修复
✅ 该应用安全 - 已修复版本 (2019.4.41f1)
# 无法确定
❓ 无法确定 - Unity 应用但无法提取版本,可能被加壳或混淆,建议人工复核
⚠️ 文件过大无法处理 (1500.0MB,限制 1024MB) - 修改代码第 15 行 MAX_APK_SIZE_MB 为更大值
.
├── unity_vulnerability_checker.py # 核心模块
│ ├─ UnityVulnerabilityChecker 类 - 漏洞检测核心引擎
│ ├─ check_unity_vulnerability() - 简化的检测函数
│ ├─ batch_check() - 批量检测功能
│ └─ 完整的版本解析和判定逻辑
│
├── usage_examples.py # 使用示例
│ ├─ 基础使用示例
│ ├─ 批量检测示例
│ ├─ 平台集成示例
│ ├─ 自动化响应示例
│ └─ Flask API 集成示例
│
├── test_demo.py # 测试演示
│ ├─ 版本号解析测试
│ ├─ 版本提取测试
│ ├─ 修复判断测试
│ ├─ APK 扫描场景模拟
│ └─ 性能基准测试
│
├── test_version_detection.py # 单元测试(33 个测试用例)
│
├── README.md # 完整文档(包含快速开始指南)
│
└── CLAUDE.md # 开发规范
# 单文件检测
python unity_vulnerability_checker.py game.apk
# 详细日志模式
python unity_vulnerability_checker.py game.apk -v
# 批量检测目录
python unity_vulnerability_checker.py --batch /path/to/apk/folder
# 批量检测(详细模式)
python unity_vulnerability_checker.py --batch /path/to/apk/folder -v
from unity_vulnerability_checker import batch_check
results = batch_check("/path/to/apk/directory", verbose=True)
# 筛选受影响的应用
vulnerable = {name: result for name, result in results.items()
if result.is_vulnerable}
print(f"发现 {len(vulnerable)} 个受影响的应用")
from unity_vulnerability_checker import UnityVulnerabilityChecker
class AppReviewSystem:
def __init__(self):
self.checker = UnityVulnerabilityChecker(verbose=False)
def review_upload(self, apk_path: str) -> str:
result = self.checker.check_apk(apk_path)
if result.is_vulnerable:
return "REJECT" # 拒绝上架
elif result.is_safe:
return "APPROVE" # 批准
else:
return "MANUAL_REVIEW" # 人工复核
reviewer = AppReviewSystem()
decision = reviewer.review_upload("new_game.apk")
from flask import Flask, request, jsonify
from unity_vulnerability_checker import check_unity_vulnerability
app = Flask(__name__)
@app.route('/api/scan', methods=['POST'])
def scan_apk():
file = request.files['file']
temp_path = f"/tmp/{file.filename}"
file.save(temp_path)
result = check_unity_vulnerability(temp_path)
# 使用 to_dict() 方法直接转换为 JSON
response = result.to_dict()
response["filename"] = file.filename
response["vulnerable"] = result.is_vulnerable
return jsonify(response)
┌─────────────────┐
│ 读取 APK 文件 │
└────────┬─────────┘
│
▼
┌─────────────────┐
│ 是否为 Unity 应用? │──NO──> negative
└────────┬─────────┘
│ YES
▼
┌─────────────────────┐
│ 检测到 patcher 补丁? │──YES──> negative
└────────┬─────────────┘
│ NO
▼
┌─────────────────┐
│ 提取 Unity 版本 │──失败──> inconclusive
└────────┬─────────┘
│ 成功
▼
┌─────────────────┐
│ 版本 < 2017.1 ? │──YES──> negative
└────────┬─────────┘
│ NO
▼
┌─────────────────┐
│ 版本已修复? │──YES──> negative
└────────┬─────────┘
│ NO
▼
positive
检测 APK 中是否存在以下特征:
lib/*/libunity.so - Unity 运行时库assets/bin/Data/* - Unity 资源文件从以下位置提取 Unity 版本号:
支持的版本号格式:
2019.4.40f1, 2022.3.15f16000.0.23f1, 6000.2.6f22019.4.40, 6000.0.23基于 Unity 官方安全公告的规则:
在应用上架前自动扫描,拒绝受影响的应用上架
from unity_vulnerability_checker import check_unity_vulnerability
def pre_publish_check(apk_path):
result = check_unity_vulnerability(apk_path)
if result.is_vulnerable:
return {
"approved": False,
"reason": f"CVE-2025-59489 vulnerability detected ({result.version})",
"recommendation": result.recommendation
}
return {"approved": True, "message": result.message}
批量扫描现有应用库,识别需要更新的应用
python unity_vulnerability_checker.py --batch /data/published_apps > scan_report.txt
每日定时扫描新上传应用,自动通知开发者
import schedule
from unity_vulnerability_checker import batch_check
def daily_scan():
results = batch_check("/data/new_uploads")
vulnerable = [(name, result) for name, result in results.items() if result.is_vulnerable]
if vulnerable:
# 发送通知,包含详细信息
for name, result in vulnerable:
send_notification(name, result.version, result.message)
schedule.every().day.at("02:00").do(daily_scan)
生成平台安全报告,统计漏洞分布情况
from unity_vulnerability_checker import batch_check
import json
results = batch_check("/data/all_apps")
report = {
"total": len(results),
"vulnerable": sum(1 for r in results.values() if r.is_vulnerable),
"safe": sum(1 for r in results.values() if r.is_safe),
"unclear": sum(1 for r in results.values() if r.is_uncertain),
# 详细列表
"vulnerable_apps": [
{"name": name, "version": r.version, "message": r.message}
for name, r in results.items() if r.is_vulnerable
]
}
with open("security_report.json", "w") as f:
json.dump(report, f, indent=2)
集成到持续集成流程,自动化安全检查
#!/bin/bash
# 在 CI pipeline 中使用
python unity_vulnerability_checker.py build/output.apk
result=$(python unity_vulnerability_checker.py build/output.apk | grep "检测结果")
if echo "$result" | grep -q "positive"; then
echo "Security check failed: CVE-2025-59489 detected"
exit 1
fi
echo "Security check passed"
可能误判为安全的情况:
可能误判为受影响的情况:
inconclusive 结果,建议人工复核可能原因:
建议:对这类应用进行人工复核
Unity 官方未为 2017.1-2018.4 版本提供安全补丁。这些版本确实存在漏洞,但由于:
因此返回 "inconclusive" 而非 "positive",建议:
基于 Unity 官方公告的规则,对标准构建的 APK 准确率 > 95%。混淆或加壳的 APK 可能需要额外处理。
单个 APK 检测通常在 0.5-2 秒内完成,支持并行批量处理以提高效率。详细性能指标见本文档"性能指标"章节。
当前版本专注于 Android APK。iOS .ipa 文件检测需要额外适配。
修改 unity_vulnerability_checker.py 中的 PATCHED_VERSIONS 字典,关注 Unity 官方公告获取最新信息。
立即行动
持续监控
用户通知
升级 Unity 版本
临时方案(无法升级时)
验证修复
positive遇到问题?
test_demo.py 验证工具正常工作usage_examples.py 寻找类似场景项目已配置完整的代码质量检查工具:
# 安装依赖
pip install ruff pre-commit
# 安装 pre-commit hooks
pre-commit install
# 手动运行所有检查
pre-commit run --all-files
所有提交前会自动运行以下检查:
Ruff Linter - Python 代码静态分析
Ruff Formatter - Python 代码格式化
通用文件检查
Markdown 格式检查
ruff.toml - Ruff 配置.pre-commit-config.yaml - Pre-commit hooks 配置所有代码在提交前必须通过 ruff 检查。如果检查失败,提交会被阻止。
# 如果 pre-commit 失败,会自动修复部分问题
# 修复后需要重新 git add 并提交
git add .
git commit -m "your message"
# 只检查 Python 文件
ruff check *.py
# 自动修复问题
ruff check --fix *.py
# 格式化代码
ruff format *.py
major >= 2019 or major >= 6000)本工具仅供安全审计和合规检查使用。
| 如果游戏有这个权限 | 攻击者就能 |
|---|
| 📸 摄像头 | 偷拍你 |
| 🎤 麦克风 | 偷听你 |
| 📍 位置 | 追踪你 |
| 📱 联系人 | 窃取你的通讯录 |
| 💾 存储 | 读取/删除你的文件 |
| 💰 支付 | 盗刷游戏内支付 |
| 🔐 账号 | 窃取游戏账号 |
| Unity 版本 | 最低修复版本 | 状态 |
|---|
| 6000.3 | 6000.3.0b4 | ✅ 有补丁 |
| 6000.2 | 6000.2.6f2 | ✅ 有补丁 |
| 6000.0 LTS | 6000.0.58f2 | ✅ 有补丁 |
| 2022.3 | 2022.3.62f2 | ✅ 有补丁 |
| 2021.3 | 2021.3.45f2 | ✅ 有补丁 |
| 2020.x | 2020.1.18f1+ | ✅ 有补丁 |
| 2019.x | 2019.1.15f1+ | ✅ 有补丁 |
| 2017-2018 | N/A | ⚠️ 无官方补丁,建议升级版本 |