Blum Panel 后门
完全去混淆、C2 渗透与威胁分析
针对Blum Panel / Warden Panel FiveM后门的首次公开完整逆向工程。
3,856台受感染服务器被曝光。1,859名玩家处于风险中。已识别28名付费客户。
C2已被渗透 —— 提取了完整的服务器数据库、玩家PII(个人身份信息)以及攻击Payload库。
研究由 Justice Gaming Network (JGN) 完成
FiveM 服务器:JusticeRP — discord.gg/JRP
## 快速入门 —— 我的服务器是否被感染?
从你的FiveM服务器根目录**运行扫描器**:
```
chmod +x scan.sh && ./scan.sh
```
在你的FiveM服务器控制台中**检查是否有活跃感染**:
```
if GlobalState.miauss then print("DROPPER ACTIVE: "..GlobalState.miauss) end
if GlobalState.ggWP then print("REPLICATOR ACTIVE: "..GlobalState.ggWP) end
```
**搜索受感染服务器数据库** —— 检查你的服务器名称是否出现在 `evidence/infected_servers_sanitized.json` 中。
**立即封锁 C2**:
```
chmod +x block_c2.sh && ./block_c2.sh
```
## 目录
- [执行摘要](#executive-summary)
- [关键数据](#key-numbers)
- [研究归属](#research-attribution)
- [与 Cipher Panel 的关联](#the-cipher-panel-connection)
- [完整攻击链](#the-complete-kill-chain)
- [C2 渗透结果](#c2-infiltration-results)
- [受感染服务器数据库](#infected-server-database)
- [攻击 Payload 库](#attack-payload-library)
- [玩家数据泄露](#player-data-exposure)
- [分析的文件](#files-analyzed)
- [混淆架构](#obfuscation-architecture)
- [C2 基础设施](#c2-infrastructure)
- [恶意软件组件](#malware-components)
- [GFX Panel —— 第二个产品](#gfx-panel--second-product)
- [面板架构](#panel-architecture)
- [攻击者身份与金融情报](#attacker-identity-and-financial-intelligence)
- [检测与修复](#detection-and-remediation)
- [仓库结构](#repository-structure)
- [举报联系方式](#reporting-contacts)
## 执行摘要
Blum Panel 是一款商业FiveM后门,售价为每月59.99欧元或终身139.99欧元。它赋予付费客户对受感染FiveM服务器的完全远程控制权 —— 代码执行、实时屏幕捕获、玩家操控、经济系统利用、完整文件系统访问以及完全的服务器锁定。
通过在C2上注册一个虚假服务器,JGN提取了**完整的受感染服务器数据库**(3,856台服务器)、**玩家PII**(289名玩家,包含真实IP地址、Discord ID 和 Steam标识符)以及**完整的攻击Payload库**(7个预构建的RCE脚本)—— 所有这些都不需要任何身份验证。
调查还揭示,Blum Panel 是基于**被盗的 Cipher Panel 代码**构建的,这一点已得到Cipher创建者的证实。攻击者在未受保护的基础设施上运营着第二个名为 **GFX Panel** 的产品。在16小时的调查中,确认了五个面板域名、三个直接IP服务器和28名付费客户。
## 关键数据
| 指标 | 数值 |
|--------|-------|
| **数据库中的受感染服务器** | **3,856** |
| **捕获时处于风险中的玩家** | **1,859** |
| **总服务器容量** | **350,933 个玩家槽位** |
| **有活跃玩家的服务器** | **584** |
| **被入侵的个人PC** | **392** |
| **已识别的付费客户** | **28 个唯一 API 密钥** |
| **持续时间最长的活跃感染** | **2,582 小时(107 天)** |
| **受影响的国家/地区** | **15+** (FR, US, SA, BR, TR, DE, RO, PL, CN, IT, ES, NL, IL...) |
| **预构建的攻击 Payload** | **7** (txAdmin 绕过, kickall, 服务器接管, 管理员后门) |
| **每次会话暴露的玩家 PII** | **约 1,500-2,000** (含真实 IP, Discord ID, Steam ID) |
| **加密货币收入** | **已确认 $10,000-$12,000+** |
| **面板域名** | **5** (blum-panel.me, warden-panel.me, 9ns1.com, fivems.lt, jking.lt) |
| **访问数据所需的身份验证** | **无** |
## 研究归属
本研究由 **Justice Gaming Network (JGN)** 团队进行,该团队运营着 **JusticeRP** FiveM 服务器。
**Discord:** [discord.gg/JRP](https://discord.gg/JRP)
**JGN 完成的首次成果:**
- 首次公开去混淆任何 Blum Panel 或 Cipher Panel 文件
- 首次 C2 渗透 —— 提取了包含3,856台受感染服务器的完整服务器数据库
- 首次提取攻击 Payload 库(7个预构建的RCE脚本)
- 首次记录玩家 PII 泄露情况(真实 IP, Discord ID, Steam ID)
- 首次识别 Lua 感染途径(Luraph Payload)
- 首次发现第二个 C2 域名 (9ns1.com)
- 首次发现 GFX Panel —— 同一攻击者的第二个产品
- 首次证明 Blum Panel 盗用了 Cipher Panel 代码
- 首次完整的 Socket.IO 协议文档(75个命令)
- 首次识别 txAdmin 凭据窃取和 WebRTC 屏幕捕获
- 首次提取攻击者 Discord ID、加密钱包和 OAuth 应用
## 与 Cipher Panel 的关联
在 **2026年2月4日**,Cipher Panel 的创建者 **Authentic** (`authentic777`, Discord ID `1072311313080004648`) 公开发布:
Authentic 在 Cipher Discord 中拥有 **CIPHER CREATOR** 角色,并在其个人资料中展示了 `cipher-panel.me`。
**Blum Panel 窃取了 Cipher Panel 的代码库。** Blum 前端包中包含对 `cipher-panel.me` 和 `discord.gg/ciphercorp` 的硬编码引用 —— 这些是被盗代码留下的残留物。后端有所不同(Cipher 使用 nginx,Blum 使用 Express.js),证实了不同的运营者在运行相同的代码库。两者都是活跃的犯罪活动。
## 完整攻击链
```
INITIAL INFECTION (Two paths)
PATH A: JavaScript (yarn_builder.js, webpack_builder.js, etc.)
XOR-encrypted eval -> fetches C2 loader (main.js, 425KB)
main.js -> setImmediate dropper -> fetches replicator from C2
PATH B: Lua (Luraph-obfuscated, 65KB)
Drops XOR-encrypted JS file + modifies fxmanifest.lua
Sends Discord webhook to attacker (infection notification)
On restart -> JS dropper -> fetches replicator from C2
STAGE 2: REPLICATOR (c2_payload.txt, 1.6MB, memory only)
T+2s Collect server info (framework, anticheats, license)
T+3s Infect server (4 components):
XOR dropper injection into 40+ resource files
server.cfg injection at random position
txAdmin sv_main.lua tampering (hide from dashboard)
txAdmin credential theft (X-TxAdmin-Token capture)
T+32s Connect to C2 via Socket.IO (wss://fivems.lt)
STAGE 3: PERSISTENT BACKDOOR (Socket.IO, 39 event handlers)
Arbitrary JS/Lua code execution
WebRTC live screen capture of any player
Player manipulation (kill, ban, godmode, spawn vehicles)
Economy manipulation (add/remove items, set jobs)
Full filesystem access (read, write, delete, browse)
Resource theft (ZIP + upload to attacker server)
Console capture (last 500 lines)
Server lockdown (kick all + block connections)
txAdmin admin creation ("JohnsUrUncle", all_permissions)
Discord bot control (24 commands)
```
## C2 渗透结果
JGN 在 Blum Panel C2 上注册了一个虚假服务器,并在未经身份验证的情况下提取了整个数据库。
C2 服务器接受任何发出带有有效 API 密钥格式的 `registerServer` 的 Socket.IO 连接。一旦注册,发出服务器列表事件就会返回每个受感染服务器的完整数据库。无需管理员凭据。
### 我们提取的内容
| 数据 | 方法 | 身份验证 |
|------|--------|---------------|
| 3,856 台受感染服务器 | `registerServer` + 列表事件 | **无** |
| 289 条包含真实 IP 的玩家记录 | 对每个服务器调用 `getServerPlayers` | **无** |
| 7 个包含完整源代码的攻击 Payload | 带有 serverId 的 `getPayloads` | **无** |
| 按需获取的单服务器信息 | 带有 serverId 的 `getServerInfo` | **无** |
| Discord 成员查询 | 带有 serverId 的 `discord:members` | **无** |
### 受到保护的内容
| 数据 | 状态 |
|------|--------|
| 管理面板(用户管理) | 需要 Discord OAuth |
| 来自服务器的控制台输出 | 无响应 |
| 文件浏览器 | 无响应 |
| 资源列表 | 无响应 |
| 命令执行 | 需要客户会话 |
## 受感染服务器数据库
**文件:** `evidence/infected_servers_sanitized.json`
于2026年3月14日 08:19 UTC 捕获。包含曾连接到 Blum Panel C2 的每个服务器的服务器名称和元数据。受害者 IP 地址、许可证和标识符已从公开发布中编辑处理。
### 按客户(API 密钥)
| API 密钥 | 服务器数量 | 描述 |
|---------|---------|-------------|
| zXeAHJJ | 2,765 | 最大客户或默认密钥 |
| nullJJ | 442 | 第二大 |
| bekJJ | 178 | |
| bertJJ | 117 | 原始攻击者句柄 |
| xxx | 103 | |
| qwertyJJ | 103 | |
| dovJJ | 55 | |
| + 其他 21 个 | 93 | 较小的客户 |
### 按框架
| 框架 | 数量 |
|-----------|-------|
| ESX | 1,836 (48%) |
| QBCore | 1,373 (36%) |
| vRP | 355 (9%) |
| 未知 | 291 (7%) |
### 按操作系统
| 操作系统 | 数量 |
|----|-------|
| Windows | 2,502 (65%) |
| Linux | 1,353 (35%) |
### 主要国家/地区(按区域设置)
| 区域设置 | 服务器数量 |
|--------|---------|
| 未识别 (root-AQ) | 692 |
| 法国 (fr-FR) | 389 |
| 美国 (en-US) | 389 |
| 沙特阿拉伯 (ar-SA) | 312 |
| 巴西 (pt-BR) | 232 |
| 土耳其 (tr-TR) | 159 |
| 德国 | 130 |
| 罗马尼亚 | 87 |
| 波兰 | 83 |
| 中国 | 80 |
### 按玩家数量排名的顶级服务器(捕获时)
| 玩家数 | 服务器名称 | 客户 |
|---------|------------|----------|
| 83/250 | ZONASUR-RP | dovJJ |
| 73/200 | Traplanta V3 | zXeAHJJ |
| 64/128 | Respect CFW | zXeAHJJ |
| 48/180 | Lost In Thought 2.0 | zXeAHJJ |
| 46/965 | MOSCOW RP S4 | zXeAHJJ |
| 39/128 | NOVA CITY | zXeAHJJ |
| 33/180 | BANEADOS RP | zXeAHJJ |
| 31/128 | Capital Legacy | zXeAHJJ |
| 29/500 | VIPURI ROMANIA ROLEPLAY | zXeAHJJ |
| 25/64 | Sinaloa 701 RP | zXeAHJJ |
### 持续时间最长的感染
| 运行时间 | 服务器名称 | 客户 |
|--------|------------|----------|
| 2,582 小时(107 天) | District 18 Roleplay [Israel] | zXeAHjj |
| 2,559 小时(106 天) | TRILL LIFE RP | zXeAHjj |
| 2,238 小时(93 天) | Young and Rich Development | zXeAHjj |
| 2,227 小时(92 天) | Solaria FA | zXeAHjj |
| 2,193 小时(91 天) | UnderworldTest dev server | xxx |
## 攻击 Payload 库
**文件:** `evidence/BLUM_PAYLOADS.json` (23 KB)
七个预构建的攻击脚本,所有客户均可通过一键部署使用。已捕获完整源代码。
| ID | 名称 | 语言 | 创建时间 | 用途 |
|----|------|----------|---------|---------|
| 2 | ENABLE TXADMIN BYPASS | Lua | 2024年11月24日 | 禁用 txAdmin 玩家加入验证 |
| 5 | DISABLE TXADMIN BYPASS | Lua | 2024年11月24日 | 重新启用(隐蔽切换) |
| 30 | /kickall | Lua | 2024年12月7日 | 以 "[warden-panel.me/discord]" 消息踢出所有玩家 |
| 38 | Spektaklis NEW | Lua | 2024年12月14日 | 彩虹刷屏 + 音乐 + 带品牌标识的视觉接管 |
| 56 | /miaumiau admin | Lua | 2024年12月22日 | 获取 ESX 管理员权限的后门命令 |
| 62 | russian heck | Lua | 2024年12月22日 | 基于 DUI 的视觉攻击 |
| 79 | txAdmin crash | JS | 2025年1月17日 | 通过绑定到 txAdmin 端口使其崩溃,阻止管理员访问 |
所有 Payload 均使用 `api: "every"`,意味着它们对每个客户都可用,不受 API 密钥。最早的 Payload 可追溯到 **2024年11月**,证明该活动已积极维护超过一年。
## 玩家数据泄露
Blum Panel C2 为每个连接的玩家暴露以下数据,无需任何身份验证即可访问:
- **真实 IP 地址**(家庭 IP,而非代理)
- **玩家名称**
- **Discord ID**
- **Steam 或许可证标识符**
- **他们连接的服务器**
捕获时:来自 **35台服务器** 的 **289名唯一玩家** 的 **289个真实 IP** 和 **286个 Discord ID** 被泄露。鉴于584台活跃服务器上有1,859名玩家在线,任何给定时间的总泄露人数约为 **1,500-2,000名玩家**。
玩家 PII 已从公开发布中完全编辑处理。统计数据位于 `evidence/player_pii_stats.json`。
## 分析的文件
| 文件 | 大小 | 混淆器 | 用途 |
|------|------|------------|---------|
| main.js | 425 KB | JScrambler | C2 加载器 |
| script.js | 183 KB | JScrambler | WebRTC 屏幕捕获 |
| c2_payload.txt | 1.64 MB | JScrambler | 实时复制器(核心后门) |
| ext/bert | 425 KB | JScrambler | 来自 C2 的释放器 |
| yarn_builder.js | 43 KB | XOR (密钥 169) | yarn 资源中的释放器 |
| webpack_builder.js | 632 KB | XOR (密钥 189) | webpack 资源中的释放器 |
| babel_config.js | 20 KB | XOR (密钥 204) | babel 资源中的释放器 |
| sv_main.lua | 18 KB | 被篡改 | txAdmin 隐身 |
| sv_resources.lua | 2 KB | 被篡改 | txAdmin RCE 后门 |
| /test | 65 KB | Luraph v14.6 | 指向 9ns1.com 的 Lua 释放器 |
| /dev | 64 KB | Luraph v14.6 | 指向 fivems.lt 的 Lua 释放器 |
| /null | 64 KB | Luraph v14.6 | 指向 fivems.lt 的 Lua 释放器 |
| Panel bundle | 1.97 MB | Minified React | 客户仪表板 |
| GFX bundle | 749 KB | Minified React | 第二个产品仪表板 |
## 混淆架构
### JavaScript — JScrambler (5 层)
商业混淆器(约$100/月)。Function() 包装器、LZString 压缩、Base-91 编码(122个字母表,40,000+字符串)、间接数组(最多3,014个元素)、生成器状态机(总共215个)。膨胀率约 200:1。
### Lua — Luraph v14.6
商业混淆器(约$20/月)。具有140+操作码的自定义字节码 VM、pcall 包装执行、嵌入式压缩字节码。三个唯一构建版本。
### XOR 释放器
`String.fromCharCode(a[i] ^ k)`,密钥为 169, 189, 204。解密为 eval() 并从 C2 获取数据。
## C2 基础设施
### 基础设施图
```
ATTACKER INFRASTRUCTURE
================================================================
BLUM PANEL — Primary Operation (stolen Cipher Panel code)
─────────────────────────────────────────────────────────
Cloudflare Account #1 (nameservers: bailey/ezra)
┌─────────────────────────────────────────────────────┐
│ 9ns1.com ──┐ │
│ fivems.lt ──┼── ONE Express.js backend │
│ warden-panel.me ──┘ heartbeat: {"count":4} │
│ │
│ jking.lt ──── SEPARATE Express.js backend │
│ heartbeat: {"count":2} │
└─────────────────────────────────────────────────────┘
Cloudflare Account #2 (nameservers: keenan/paityn)
┌─────────────────────────────────────────────────────┐
│ blum-panel.me ──── SAME backend as above │
│ heartbeat: {"count":4} │
└─────────────────────────────────────────────────────┘
Evidence: All four domains (blum, warden, 9ns1, fivems) return
identical heartbeat count = single Express.js origin server.
blum-panel.me is on a separate Cloudflare account from the others.
BACKUP C2 DOMAINS (payload delivery only, no panel)
┌─────────────────────────────────────────────────────┐
│ 2ns3.net ── AWS 13.248.213.45 (active) │
│ giithub.net ── Cloudflare (522 error) │
│ + 20 more fallback domains hardcoded in replicator │
└─────────────────────────────────────────────────────┘
GFX PANEL — Second Product (built with GPT Engineer)
─────────────────────────────────────────────────────
┌─────────────────────────────────────────────────────┐
│ gfxpanel.org ──┐ │
│ kutingplays.com ──┴── 185.80.130.168 (DIRECT) │
│ NO CLOUDFLARE │
│ Port 3000 open (raw API) │
│ Port 22 open (SSH) │
│ Apache/2.4.52 + Express.js │
│ Ubuntu, Let's Encrypt SSL │
└─────────────────────────────────────────────────────┘
DIRECT IP SERVERS — UAB Esnet, Vilnius, Lithuania
─────────────────────────────────────────────────
┌─────────────────────────────────────────────────────┐
│ 185.80.128.35 ── Apache/2.4.29, Ubuntu 18.04 │
│ Stolen FiveM resource hosting │
│ Paths: /download-resource/ │
│ │
│ 185.80.128.36 ── Apache/2.4.65, Debian │
│ Default page (staging/spare) │
│ │
│ 185.80.130.168 ── GFX Panel (see above) │
│ Also responds to Socket.IO │
│ for ALL Host headers │
│ │
│ Abuse: abuse@vpsnet.lt │
│ Network: VPSNET-COM, Zuvedru g. 36, Vilnius │
└─────────────────────────────────────────────────────┘
CIPHER PANEL — Original Operation (code stolen by Blum)
────────────────────────────────────────────────────────
┌─────────────────────────────────────────────────────┐
│ cipher-panel.me ── nginx/1.18.0 via Cloudflare │
│ DIFFERENT backend from Blum │
│ NO payload endpoints (all 404)│
│ Separate operation entirely │
└─────────────────────────────────────────────────────┘
```
### 单后端发现
所有面板域名返回相同的心跳计数,证实多个 Cloudflare 域名背后是同一个 Express.js 服务器:
```
blum-panel.me/heartbeat -> {"count":4}
warden-panel.me/heartbeat -> {"count":4}
9ns1.com/heartbeat -> {"count":4} (same backend)
fivems.lt/heartbeat -> (same backend)
jking.lt/heartbeat -> {"count":2} (separate instance)
```
### Cloudflare 账户分析
两个独立的 Cloudflare 账户管理这些域名:
| 名称服务器 | 域名 | 含义 |
|-------------|---------|-------------|
| bailey.ns.cloudflare.com / ezra.ns.cloudflare.com | 9ns1.com, fivems.lt, warden-panel.me, jking.lt | 主要 Cloudflare 账户 |
| keenan.ns.cloudflare.com / paityn.ns.cloudflare.com | blum-panel.me | 独立的 Cloudflare 账户 |
这可能表明 blum-panel.me 是在不同时间或由不同团队成员建立的。
### SSL 证书历史(源站暴露)
证书透明度日志揭示了在添加 Cloudflare 之前颁发的 **Let's Encrypt 证书**,这意味着源站 IP 曾短暂暴露:
| 域名 | Let's Encrypt 证书 | 日期 | 含义 |
|--------|-------------------|------|-------------|
| blum-panel.me | Let's Encrypt E8 | 2026年1月31日 | 源站 IP 可见 |
| blum-panel.me | Let's Encrypt E8 | 2025年12月3日 | 源站 IP 可见 |
| fivems.lt | Let's Encrypt E7 | 2025年12月10日 | 源站 IP 可见 |
| fivems.lt | Let's Encrypt E7 | 2025年10月12日 | 源站 IP 可见 |
| fivems.lt | Let's Encrypt E7 | 2025年8月7日 | 源站 IP 可见 |
在这些时间窗口内查询的历史 DNS 数据库可能会揭示 Cloudflare 背后的真实源站 IP。
### 完整域名映射
| 域名 | 类型 | 后端 | IP/代理 | 注册商 | 创建时间 |
|--------|------|---------|----------|-----------|---------|
| blum-panel.me | Panel + C2 | Express.js | Cloudflare | Namecheap | ~2025年12月 |
| warden-panel.me | Panel + C2 | Express.js | Cloudflare | Namecheap | ~2026年1月 |
| 9ns1.com | Panel + C2 | Express.js | Cloudflare | Namecheap | 2025年6月29日 |
| fivems.lt | Panel + C2 | Express.js | Cloudflare | DOMREG.lt | ~2025年8月 |
| jking.lt | Panel + C2 (独立) | Express.js | Cloudflare | DOMREG.lt | 未知 |
| gfxpanel.org | GFX Panel | Express.js | 185.80.130.168 直连 | Namecheap | 2026年2月7日 |
| kutingplays.com | GFX Panel 别名 | Express.js | 185.80.130.168 直连 | 未知 | 未知 |
| cipher-panel.me | 原始面板 | nginx | Cloudflare | 未知 | ~2021年 |
| 2ns3.net | 备用 C2 | 未知 | 13.248.213.45 (AWS) | 未知 | 未知 |
| giithub.net | 备用 C2 (已失效) | 未知 | Cloudflare (522) | 未知 | 未知 |
所有 Blum 面板域名提供相同的 React 包:`index-BmknYBUo.js` (1,972,893 字节)。
GFX Panel 提供不同的包:`index-B62S1OtC.js` (749,436 字节)。
### 直连 IP 服务器
位于立陶宛维尔纽斯的 UAB Esnet (VPSNET-COM) 有三台服务器:
| IP | 服务器 | 服务 | 用途 |
|----|--------|---------|---------|
| 185.80.128.35 | Apache/2.4.29 (Ubuntu 18.04) | 仅 HTTP | 被盗 FiveM 资源文件托管 |
| 185.80.128.36 | Apache/2.4.65 (Debian) | 仅 HTTP | 默认页面(暂存或备用) |
| 185.80.130.168 | Apache/2.4.52 + Express.js (Ubuntu) | HTTP, HTTPS, SSH, 端口 3000 | GFX Panel, Socket.IO C2, 原始 API |
这三台服务器共享相同的主机提供商、滥用联系方式 (abuse@vpsnet.lt),且位于同一维尔纽斯数据中心。185.80.130.168 服务器还响应带有任何 Host 标头的 Socket.IO 连接,表明它可能代理或先前托管了其他服务。
### Payload 交付基础设施
每个 C2 域名都提供所有四种 Payload 变体。每个 Payload 都是相同的 JScrambler 混淆代码(约 1.64 MB),仅更改了两个明文头变量:
```
ende = "devJJ"; // endpoint identifier
back = "https://fivems.lt"; // C2 callback URL
Function("bHl1Cq",... // JScrambler blob (identical)
```
| 端点 | API 密钥 | Payload 大小 | 服务来源 |
|----------|---------|-------------|-------------|
| /bertJJ | bert | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me |
| /bertJJgg | bert | 1,643,855 字节 | fivems.lt (后备) |
| /bertJJcfxre | bert | 1,643,855 字节 | fivems.lt (后备) |
| /devJJ | dev | 1,643,854 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me |
| /nullJJ | null | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me |
| /zXeAHJJ | zXeAH | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me |
| /ext/bert | bert (释放器) | 425,385 字节 | fivems.lt, 9ns1.com |
| /test | Lua 释放器 | 65,564 字节 | fivems.lt, 9ns1.com |
| /dev | Lua 释放器 | 64,115 字节 | fivems.lt, 9ns1.com |
| /null | Lua 释放器 | 64,289 字节 | fivems.lt, 9ns1.com |
Lua 端点(/test, /dev, /null)提供 Luraph v14.6 混淆的 Payload,这些 Payload 会释放 XOR 加密的 JS 文件 —— Lua 途径的初始感染载体。
复制器中硬编码了 23+ 个额外的后备域名以确保持久性。完整列表见 `iocs/domains.txt`。
### Socket.IO 协议 —— 75 个命令
完整规范:`iocs/socket_io_protocol.md`
1 个任意代码执行,5 个屏幕捕获,10 个玩家操控,5 个经济系统,11 个文件系统,3 个服务器管理,1 个 txAdmin 窃取,24 个 Discord 机器人,13 个遥测,1 个心跳。
## 恶意软件组件
有关完整的去混淆源代码,请参阅 `deobfuscated/` 目录:
- **c2_payload.js** — 核心复制器(1.64 MB 至 37 KB,15 个部分)
- **deobfuscated_main.js** — C2 加载器(425 KB 至 14 KB)
- **deobfuscated_script.js** — 屏幕捕获(183 KB 至 26 KB)
- **luraph_payloads_deobfuscated.js** — 所有 3 个 Lua Payload 已解码
- **deobfuscated_yarn_builder.js** — XOR 释放器
- **deobfuscated_sv_main.lua** — 被篡改的 txAdmin (RESOURCE_EXCLUDE)
- **deobfuscated_sv_resources.lua** — txAdmin RCE 后门
## GFX Panel —— 第二个产品
攻击者在未受保护的基础设施上运营着第二个名为 GFX Panel 的面板:
| 项目 | 数值 |
|------|-------|
| 域名 | gfxpanel.org, kutingplays.com |
| 后端 | Ubuntu 上的 Express.js + Apache/2.4.52,直连 IP,无 Cloudflare |
| 包 | index-B62S1OtC.js (749 KB, 为 Blum 的 38%) |
| 构建工具 | GPT Engineer (项目: eSi92A9tMBTQWYu6OPvMFhyFiy72) |
| Discord | discord.gg/cwd5kHwq6v (已失效) |
| 端口 3000 | 开放 —— 暴露的原始 Express.js |
| Socket.IO | 活跃 |
| 创建时间 | 2026年2月7日 |
GFX Panel 从非标准端点提供 Luraph 混淆的 Lua Payload。托管于立陶宛维尔纽斯的 UAB Esnet 数据中心 —— 与文件托管服务器相同的提供商。
## 面板架构
**身份验证:** Discord OAuth2,带有硬编码的管理员白名单。
**管理员 Discord ID:** `393666265253937152`, `1368690772123062292`
**OAuth App:** `1444110004402655403` (名称: "blum")
**定价:** 基础版 59.99 欧元/月,Ultima 版 139.99 欧元终身。
**支付方式:** Bitcoin, Litecoin, Solana, 亚马逊礼品卡 (GBP), MoonPay。
**Discord 机器人:** 24 个命令,包括封禁、踢出、禁言、创建频道/角色、通过 Webhook 发送消息。可以接管受害者的 Discord 服务器。
## 攻击者身份与金融情报
### Blum Panel 运营者
| 项目 | 数值 |
|------|-------| 主要管理员 | Discord ID 393666265253937152 (~2018年账户) |
| 次要管理员 | Discord ID 1368690772123062292 (~2025年5月) |
| OAuth App | 1444110004402655403 (名称: "blum") |
| 支付 Webhook | 1221885230680375427 |
| 句柄 | bertjj, bertjjgg, miauss, miausas |
| Discord | discord.com/invite/VB8mdVjrzd |
### Cipher Panel 创建者
| 项目 | 数值 |
|------|-------|
| 创建者 | Authentic / authentic777 |
| Discord ID | 1072311313080004648 (~2022年5月) |
| 域名 | cipher-panel.me |
| Discord | discord.gg/ciphercorp |
| 确认代码被盗 | 2026年2月4日 |
### 加密货币
**Bitcoin:** `bc1q2wd7y6cp5dukcj3krs8rgpysa9ere0rdre7hhj` — 9 笔交易, ~$2,000
**Litecoin:** `LSxKJm6SpdExCACUcFTUADcvZgea65AaWo` — 89 笔交易, 76.53 LTC (~$8,000-$10,000)
**Solana:** `vDWomGGtBctKqtTkRm6maXc7KJrvtmc2x8WXEzbuzkz`
**已确认的最低收入:** $10,000-$12,000(仅限加密货币)
### 地理指标
.lt 域名后缀,立陶宛维尔纽斯的 UAB Esnet 主机,欧元定价,GBP 礼品卡表明客户群在英国。
## 检测与修复
### 自动扫描器
```
chmod +x detection/scan.sh
cd /path/to/fivem/server
/path/to/detection/scan.sh
```
### 手动检测
```
grep -rn "String.fromCharCode(a\[i\]\^k)" --include="*.js"
grep -rn "bertjj\|miauss\|fivems\.lt\|ggWP\|helpEmptyCode\|JohnsUrUncle" --include="*.js" --include="*.lua"
grep -rn "Luraph Obfuscator\|installed_notices" --include="*.lua"
grep -rn "9ns1\.com\|devJJ\|nullJJ\|zXeAHJJ" --include="*.js" --include="*.lua"
```
### 修复清单
1. 从服务器根目录运行 `detection/scan.sh`
2. 删除所有释放器 .js 文件
3. 清理 fxmanifest.lua 文件 —— 移除注入的 server_scripts 条目
4. 从 [官方 GitHub](https://github.com/tabarra/txAdmin) 恢复 txAdmin 文件
5. 运行 `detection/block_c2.sh` 以封锁所有 C2 域名
6. 部署 `dropper_trap/` 资源以进行运行时保护
7. 检查 txAdmin 中是否存在 "JohnsUrUncle" 管理员账户
8. 验证 GlobalState.miauss 和 GlobalState.ggWP 是否为空
9. 更改所有 txAdmin 密码和 API 令牌
### 包含的工具
| 工具 | 描述 |
|------|-------------|
| `detection/scan.sh` | 13 项检查扫描器 (v4, 包含 Luraph) |
| `detection/block_c2.sh` | 网络封锁器 (REJECT 规则, 对 CDN 安全) |
| `detection/c2_probe.js` | Socket.IO 被动 C2 探测 |
| `dropper_trap/` | FiveM 运行时保护钩子 |
| `evidence/panel_viewer.html` | 实时调查仪表板 |
## 仓库结构
```
blum-panel-analysis/
|
+-- README.md This file
+-- BLUM_INVESTIGATION_REPORT.md Investigation timeline
|
+-- evidence/
| +-- infected_servers_sanitized.json 3,856 servers (IPs redacted)
| +-- BLUM_PAYLOADS.json 7 attack payloads, full source
| +-- server_statistics.json Statistical breakdown
| +-- player_pii_stats.json Player exposure stats (PII redacted)
| +-- panel_viewer.html Live investigation dashboard
| +-- gfx_panel.html GFX Panel HTML capture
|
+-- detection/
| +-- scan.sh 13-check malware scanner (v4)
| +-- block_c2.sh C2 blocker (includes 9ns1.com)
| +-- c2_probe.js Socket.IO C2 probe
|
+-- dropper_trap/
| +-- fxmanifest.lua FiveM manifest
| +-- trap.lua Lua runtime hooks (v3)
| +-- trap.js JS runtime hooks (v3)
|
+-- deobfuscated/
| +-- c2_payload.js Replicator (1.6MB -> 37KB)
| +-- deobfuscated_main.js C2 loader (425KB -> 14KB)
| +-- deobfuscated_script.js Screen capture (183KB -> 26KB)
| +-- deobfuscated_yarn_builder.js XOR dropper
| +-- deobfuscated_sv_main.lua Tampered txAdmin
| +-- deobfuscated_sv_resources.lua RCE backdoor
| +-- luraph_payloads_deobfuscated.js All 3 Lua payloads
|
+-- iocs/
+-- domains.txt 30+ C2 domains
+-- hosts_block.txt /etc/hosts blocklist
+-- pihole_block.txt Pi-hole blocklist
+-- pastebin_urls.txt Pastebin fallbacks
+-- strings.txt 55+ detection signatures
+-- socket_io_protocol.md Complete C2 protocol
+-- attacker_intel.md Identity and wallets
```
## 举报联系方式
| 目标 | 联系方式 | 报告内容 |
|--------|---------|--------|
| Cfx.re | FiveM 团队 | 完整分析包 |
| Cloudflare | abuse@cloudflare.com | fivems.lt, blum-panel.me, warden-panel.me, 9ns1.com |
| UAB Esnet | abuse@vpsnet.lt | 托管恶意软件的直连 IP 服务器 |
| Namecheap | abuse@namecheap.com | 9ns1.com, gfxpanel.org |
| Discord | 信任与安全团队 | App 1444110004402655403, 管理员 Discord ID |
| DOMREG.lt | .lt 注册局 | fivems.lt, jking.lt |
| 执法部门 | IC3.gov / 当地网络犯罪部门 | 加密钱包, 服务器数据库 |
## 调查统计
| 指标 | 数值 |
|--------|-------|
| 调查时间 | ~16 小时 |
| 分析的恶意软件文件 | 11 + 2 个面板包 |
| 处理的混淆代码 | ~3.7 MB |
| 去混淆输出 | ~140 KB |
| 映射的 C2 域名 | 30+ |
| 记录的 Socket.IO 命令 | 75 |
| 提取的受感染服务器 | 3,856 |
| 提取的攻击 Payload | 7 |
| 已识别的付费客户 | 28 |
| 分析的加密货币交易 | 98 |
| 确认的攻击者收入 | $10,000-$12,000+ |
| 观察到的活跃面板用户 | 4-10 |
| 运营时长 | ~5 年 (Cipher 起源: 2021) |
研究由 Justice Gaming Network (JGN) 完成
discord.gg/JRP
分析于 2026年3月13-14日进行。
C2 基础设施仍然活跃。3,856 台服务器仍处于被入侵状态。