TreRB/stealerlogs
GitHub: TreRB/stealerlogs
一款为合法安全分析设计的统一信息窃取器日志解析与检索工具。
Stars: 0 | Forks: 0
# valtik-stealerlogs
**支持家族:** Redline, Vidar, Raccoon, LummaC2, StealC, ACRStealer, Rhadamanthys, MetaStealer。
由 [Valtik Studios](https://valtikstudios.com) 维护。
## 免责声明
**仅限合法的安全分析使用。** 本库解析的是信息窃取器转储的 *结构*。
它不会获取、下载、重新分发或以任何方式武器化任何数据。用户必须遵守关于持有、处理和共享被盗凭证数据的适用法律。典型的授权用例包括:
- 针对您有权限处理的订阅源进行威胁情报工作
- 对您自身资产中恢复出的日志进行事件响应 / DFIR
- 在伦理审查下的学术研究
- 您有合法依据分析数据时的客户漏洞披露
**您需对输入给此工具的数据负责。** 如果您没有权限持有这些数据,请不要输入。本库捆绑的测试用例不包含任何真实的受害者数据。
## 安装
```
pip install valtik-stealerlogs
```
或从源码安装:
```
git clone https://github.com/valtikstudios/valtik-stealerlogs
cd valtik-stealerlogs
pip install -e '.[dev]'
pytest -v
```
需要 Python 3.10+。运行时依赖:`click`, `rich`。仅此而已。
## 为什么
每个接触窃取器日志语料库的研究人员最终都会编写相同的 600 行解析代码:八个家族,略有不同的文件夹结构,微妙的编码差异,一个 `CC.txt` 而不是 `Cards.txt`,一种布局用制表符而另一种用冒号。此库将所有这些封装在一个函数调用后,并提供一个稳定的模式。
```
from stealerlogs import parse, to_sqlite
entry = parse("./suspect-log-folder")
to_sqlite([entry], "corpus.db")
```
## CLI
```
$ stealerlogs --help
Usage: stealerlogs [OPTIONS] COMMAND [ARGS]...
valtik-stealerlogs: unified parser for infostealer log dumps. For
legitimate security analysis only.
Commands:
detect Identify the stealer family from folder structure.
export Dump every entry in the DB to jsonl or credentials-csv.
ingest Parse every log at PATH and store them into SQLite DB.
parse Parse a single log folder and emit JSON to stdout.
search Query a previously ingested SQLite DB.
stats Print corpus stats: families, counts, freshness.
```
### 示例
```
# 检测未知文件夹的家族
stealerlogs detect ./suspect-folder
# 解析单个日志,输出 JSON
stealerlogs parse ./log --family redline --pretty > entry.json
# 将整个转储目录(或 .zip)导入 SQLite
stealerlogs ingest ./logs-2026-04/ logs.db
# 按电子邮件 / 域名 / 受害者搜索
stealerlogs search logs.db --email admin@company.com
stealerlogs search logs.db --domain example.com
stealerlogs search logs.db --victim DESKTOP-ABC123
# 导出所有内容
stealerlogs export logs.db --format jsonl -o corpus.jsonl
stealerlogs export logs.db --format csv -o creds.csv
# 快速语料库健康检查
stealerlogs stats logs.db
```
## Python API
### 解析
```
from stealerlogs import parse, parse_batch, detect_family
# 自动检测
entry = parse("/path/to/log/folder")
# 强制指定家族
entry = parse("/path/to/log/folder", family="redline")
# 批量解析目录树或 ZIP
for entry in parse_batch("/path/to/dump.zip"):
process(entry)
# 仅进行家族检测
family = detect_family("/path/to/log/folder")
```
### 存储
```
from stealerlogs import to_sqlite, to_jsonl
to_sqlite(entries, "logs.db")
to_jsonl(entries, "logs.jsonl")
```
### 搜索
```
from stealerlogs.search import Searcher
with Searcher("logs.db") as s:
hits = s.by_email("admin@example.com")
hits = s.by_domain("example.com")
entries = s.by_victim_id("DESKTOP-ABC123")
hits = s.by_url("https://login.example.com/")
stats = s.stats()
```
## 模式
`StealerLogEntry` 是一个所有解析器返回的标准化数据类:
| 字段 | 类型 | 描述 |
|---------------------|---------------------|---------------------------------------------------|
| `family` | `str` | `redline`, `vidar`, `raccoon`, `lummac2`, `stealc`, `acrstealer`, `rhadamanthys`, `metastealer` 之一 |
| `log_id` | `str` | 文件夹路径的前 16 字符 SHA256 稳定前缀 |
| `captured_at` | `datetime \| None` | 从日志横幅解析的时间戳 |
| `victim_id` | `str \| None` | 主机名 / 用户名 / 机器 GUID |
| `os` | `str \| None` | 如 `Windows 10 Pro` |
| `country` | `str \| None` | 日志中报告的 ISO 国家名称 |
| `ip` | `str \| None` | 日志中报告的受害者公网 IP |
| `credentials` | `list[Credential]` | URL / 用户名 / 密码 / 浏览器 / 来源文件 |
| `cookies` | `list[Cookie]` | 域名 / 名称 / 值 / 过期时间 / 标志 / 浏览器 |
| `autofills` | `list[Autofill]` | 名称 / 值 |
| `wallets` | `list[Wallet]` | 钱包类型 / 文件路径 / 助记词 |
| `files` | `list[File]` | 路径 / 大小 / 类型(ssh_key / password_doc / ...) |
| `telegram_sessions` | `list[str]` | `.session` / `tdata` 文件夹的路径 |
| `discord_tokens` | `list[str]` | 在 Discord 目录下发现的原始令牌 |
| `system_info` | `dict[str, str]` | 来自系统横幅的扁平化键值对 |
| `source_path` | `str` | 原始文件夹路径 |
| `parse_errors` | `list[str]` | 每个文件收集的非致命错误 |
### SQLite 表
- `entries` 以 `family`、`victim_id`、`country` 索引
- `credentials` 以 `url`、`email`、`domain` 索引(用于快速查找)
- `cookies` 以 `domain` 索引
- `autofills`, `wallets`, `files`, `telegram_sessions`, `discord_tokens`
所有时间戳均以 ISO-8601 UTC 格式存储。
## 家族说明
| 家族 | 系统文件 | 密码文件 | 显著信号 |
|----------------|--------------------------|----------------------------|-----------------------------------|
| redline | `System.txt` / `UserInformation.txt` | `Browsers//Passwords.txt` | `Browsers/` 下的层级结构 |
| vidar | `information.txt` | `passwords.txt`(小写文件名) | 小写文件名 |
| lummac2 | 带 `Lumma Stealer Report` 横幅的 `System.txt` | `Passwords/_Passwords.txt` | 独立的 `Passwords/` 目录 |
| stealc | `system_info.txt` | `passwords.txt` | 根目录下的扁平布局 |
| raccoon | `machineinfo.txt` | `pws.txt` | `--- BrowserCookies ---` 块 |
| acrstealer | `System.txt` / `Readme.txt` | 任意 `*Password*.txt` | 横幅中包含 `ACRStealer` |
| rhadamanthys | `machine.txt` | `Logins/.txt` | `Logins/` 目录名 |
| metastealer | `System.txt` | `Passwords.txt` + `CC.txt` | 带 `CC.txt` 的扁平布局 |
解析器设计为宽容:未知字段保留在 `system_info` 中,错误字节通过多种编码传递,每个文件的错误会记录在 `parse_errors` 中而不会中止整个运行。
## 许可证
MIT。版权所有 (c) 2026 Valtik Studios LLC。
标签:40个测试, ACRStealer, CLI, Click, infostealer, JSONL存储, LummaC2, MetaStealer, Python3.10+, Python解析器, Raccoon, Redline, Rhadamanthys, Rich, SQLite, StealC, Vidar, WiFi技术, 信息窃取器日志解析, 凭证数据解析, 单元测试, 取证日志, 合法安全分析, 威胁情报, 开发者工具, 搜索API, 数据反混淆, 数据泄露分析, 日志取证, 日志清洗, 日志结构归一化, 时序数据库, 暗网日志, 浏览器凭证, 统一解析器, 逆向工具