ifBars/UEWorkshopScanner
GitHub: ifBars/UEWorkshopScanner
Rust 编写的虚幻引擎5 IoStore 资产静态恶意软件扫描器,在游戏加载前检测 Blueprint 中的恶意行为链并输出机器可读的判定结果。
Stars: 0 | Forks: 0
# UEWorkshopScanner
[](https://github.com/ifBars/UEWorkshopScanner/actions/workflows/ci.yml)
[](LICENSE)
[](https://www.rust-lang.org/)
UEWorkshopScanner 是一款用于 Unreal Engine Workshop 内容的本地静态恶意软件扫描器。
它在进程内打开 UE5 IoStore 包,扫描 cooked assets 以检测关联的 Blueprint 行为,
并在游戏加载该附加组件之前返回机器可读的判定结果。
初始规则主要针对恶意的
[MECCHA CHAMELEON](https://store.steampowered.com/app/4704690/MECCHA_CHAMELEON/)
Workshop 地图中使用的攻击链:自动 Blueprint 执行、外部文件写入、脚本
构造、隐藏 shell 执行以及下载行为。
## 它能检测什么
- 触及文件或 URL 操作的自动 `BeginPlay` 行为;
- 写入用户控制的目录,尤其是脚本扩展;
- PowerShell 和命令行 shell 的下载并执行链;
- JSON/batch 多态构造;
- 隐藏 shell 执行;
- 已记录的 Meccha Chameleon dropper 行为链;
- 保留的历史 RCE fixture 名称。
规则会在同一个 cooked asset 中关联这些标记。单个双用途的
Blueprint 函数本身不会阻止地图加载。
## 快速开始
Windows 归档文件将通过
[GitHub Releases](../../releases) 发布。在第一个归档文件可用之前,请按照
以下说明从源代码构建 CLI。解压整个归档文件,然后通过其 `.utoc` 入口点扫描
Workshop 包:
```
.\ue-workshop-scanner.exe "D:\path\to\WorkshopItem\Map-Windows.utoc"
```
发布归档文件将扫描器及其指定的 Oodle 解码器保存在一起。
首次使用时,请查看并接受捆绑的二进制文件条款:
```
.\ue-workshop-scanner.exe --licenses
.\ue-workshop-scanner.exe "D:\path\to\Map-Windows.utoc" --accept-eula
```
接受状态会存储在用户的本地配置目录中一次。
交互式使用会弹出提示,而不需要强制使用该标志。
### 阅读结果
CLI 会将 JSON 报告写入标准输出。
| 判定结果 | 退出代码 | 含义 |
| --- | ---: | --- |
| `allow` | 0 | 扫描完成,且未匹配到当前规则 |
| `review` | 2 | 可疑的双用途行为需要审查 |
| `block` | 3 | 匹配到高置信度的恶意行为链 |
| `incomplete` | 4 | 部分内容无法被安全检查 |
示例:
```
{
"verdict": "block",
"complete": true,
"chunks_seen": 2088,
"chunks_scanned": 2088,
"findings": [
{
"rule_id": "UWS108",
"title": "Meccha Chameleon Blueprint dropper behavior chain",
"severity": "critical",
"blocking": true
}
]
}
```
## 安全特性
- 无网络客户端,且无运行时依赖下载;
- 无需 Unreal Engine 或 `UnrealPak.exe`;
- 不将扫描的资产提取到磁盘;
- 精确的 Oodle 可分发哈希白名单;
- 可配置的每 chunk 大小上限;
- 未完成的分析绝不会产生 `allow`;
- 确定性的构建产物和发现顺序;
- Workshop 包、cooked assets 和恶意软件样本被排除在 Git 之外。
原生解码器和容器解析器仍然会处理受攻击者控制的
输入。计划中的桌面集成应将此 CLI 作为非特权、资源受限的
worker 运行。请参阅 [THREAT_MODEL.md](THREAT_MODEL.md) 和
[ARCHITECTURE.md](ARCHITECTURE.md)。
## 从源代码构建
环境要求:
- 当前稳定的 Rust 工具链,使用 2024 edition;
- 授权的 Oodle Data 2.9.10 Windows 解码器,用于处理 Oodle 压缩的内容。
```
cargo build --locked --release
cargo test --locked
cargo clippy --locked --all-targets -- -D warnings
```
通过提供路径和摘要来使用单独获取的解码器:
```
.\target\release\ue-workshop-scanner.exe `
"D:\path\to\Map-Windows.utoc" `
--oodle-path "D:\path\to\oo2core_9_win64.dll" `
--oodle-sha256 ""
```
运行 `ue-workshop-scanner --help` 获取完整的 CLI 参考。
## 发布打包
维护者可以从批准的本地 Epic 可分发文件构建独立的 Windows 归档:
```
.\scripts\package-windows-release.ps1 `
-OodlePath "D:\path\to\Epic\win\redist\oo2core_9_win64.dll" `
-Version "0.1.0"
```
打包器不执行任何下载。它会验证解码器哈希,使用
`Cargo.lock` 进行构建,包含二进制 EULA 和声明,并生成每个文件和
归档的 SHA-256 校验和。有关分发逻辑
和剩余许可风险,请参阅
[OODLE_DISTRIBUTION.md](OODLE_DISTRIBUTION.md)。
## 当前局限性
- UE5 IoStore `.utoc`/`.ucas` 包是当前的最终用户路径。
- 加密的容器需要授权密钥,目前不被
支持。
- 标记关联尚未重建完整的 Kismet 控制流。
- 原生 C++ 插件、UE4SS 模组和 DLL 注入链不在范围内。
- 目前的检测重点集中在已发布的 Meccha Chameleon 行为上。
## 研究基础
- [Meccha Chameleon 中的两次点击远程代码执行](https://khaelkugler.com/blogs/meccha_chameleon.html)
- [MECCHA CHAMELEON 的 Workshop 地图是一个恶意软件 dropper](https://medium.com/@FeintBE/workshop-map-for-meccha-chameleon-is-a-malware-dropper-full-breakdown-d1ac29565265)
- [Meccha Chameleon 恶意软件事件](https://www.youtube.com/watch?v=RB9MrJ2fNqE)
- [retoc](https://github.com/trumank/retoc)
本代码库中不包含任何恶意样本、私有 Workshop 包或专有的 Unreal 资产。
## 贡献与安全
在更改规则或解析器行为之前,请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
请通过 [GitHub Security Advisories](../../security/advisories/new) 私下报告扫描器漏洞;
请勿将活跃的恶意软件附加到公开的 issue 中。
## 许可与商标
UEWorkshopScanner 源代码在 [MIT License](LICENSE) 下提供。
包含 Epic Games 授权技术的编译分发版本同样受
[BINARY-EULA.txt](BINARY-EULA.txt) 和
[THIRD_PARTY_NOTICES.txt](THIRD_PARTY_NOTICES.txt) 约束。
UEWorkshopScanner 是独立的,不隶属于、不受赞助于、也不受
Epic Games、Valve 或 MECCHA CHAMELEON 开发者的认可。
标签:AMSI绕过, DNS 反向解析, OpenCanary, Rust, 可视化界面, 威胁检测, 游戏安全, 知识库安全, 网络信息收集, 网络流量审计, 虚幻引擎, 通知系统, 静态恶意软件扫描