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, 数据反混淆, 数据泄露分析, 日志取证, 日志清洗, 日志结构归一化, 时序数据库, 暗网日志, 浏览器凭证, 统一解析器, 逆向工具