WENGKING219/AutoMem
GitHub: WENGKING219/AutoMem
一个基于 LangChain 智能体和本地 Ollama 模型的 Windows 内存取证助手,通过对话式界面封装 Volatility3 插件,实现离线环境下引导式的内存转储分析。
Stars: 0 | Forks: 0
# AutoMem
AutoMem 是一个用于毕业设计演示的本地 Windows 内存取证助手。它结合了 Streamlit 聊天界面、本地 Ollama 模型以及 FastMCP 服务(该服务暴露了 Volatility3 工具,用于基于证据的内存转储分析)。
该项目旨在将取证工作保留在本地:内存转储保留在当前机器上,Volatility 在 Docker 内运行,而语言模型则通过 Ollama 运行。
## 架构
```
Streamlit UI -> DeepAgents / LangChain -> HTTP MCP Server -> Volatility3
|
+-> Ollama local LLM
```
Volatility MCP 服务器作为 HTTP 服务在 `http://localhost:8000/mcp` 运行。Streamlit 应用直接连接到该端点。
## 功能
- 用于引导式内存取证工作流的 Streamlit 聊天 UI。
- 支持本地 Ollama 模型及可配置的上下文预设。
- 对常见 Volatility3 Windows 插件的 FastMCP 封装。
- 带有持久化缓存卷的 Docker 化 Volatility 后端。
- 通过 `query_plugin_rows` 实现结果缓存和行过滤,适用于大型插件输出。
- 面向演示的快捷操作,用于分类、隐藏进程检查、网络审查、凭据哈希检查以及报告生成。
- Markdown 报告生成,包含用于精确指标的证据哈希。
- 针对 MCP 契约、辅助行为、缓存处理、提示词安全和响应质量的 Pytest 测试覆盖。
## 仓库布局
```
agent/ LangChain/DeepAgents setup, routing, memory, and report helpers
agent/skills/ Local forensic instruction files used by the agent
config/ Central application settings
frontend/ Streamlit UI, upload helpers, chat history utilities, and assets
volatility_mcp_server/ FastMCP Volatility3 service and runner
tests/ Unit and contract tests
docker-compose.yml Local Volatility MCP service definition
pyproject.toml Python project metadata and dependencies
uv.lock Locked dependency versions
```
生成的文件不会被提交。请将内存转储存放在 `memory_dumps/`,报告存放在 `reports/`,运行时日志存放在 `logs/`。
## 前置条件
- Python 3.11 或更新版本。
- 用于依赖管理的 `uv`。
- 带有 Docker Compose 的 Docker Desktop 或 Docker Engine。
- 至少下载了一个本地聊天模型的 Ollama。
- 格式为以下之一的 Windows 内存转储:`.raw`、`.mem`、`.dmp`、`.vmem`、`.lime` 或 `.img`。
默认模型:`gemma4:e4b`。
## 设置
安装 Python 依赖:
```
uv sync --python 3.12
```
启动 Volatility MCP 后端:
```
docker compose up -d --build
```
检查服务:
```
docker compose ps
docker inspect -f "{{.State.Health.Status}}" volatility-mcp
```
启动 Ollama 并拉取默认模型:
```
ollama serve
ollama pull gemma4:e4b
```
如果您希望使用其他模型,可以在 Streamlit 侧边栏中设置,或者覆盖 `OLLAMA_MODEL`。
通过 Streamlit 侧边栏上传器添加内存转储,或者将文件直接放置在:
```
memory_dumps/
```
启动应用:
```
uv run streamlit run frontend/app.py
```
打开:
```
http://localhost:8501
```
## 配置
主要设置位于 `config/settings.py`。
| 设置 | 默认值 | 用途 |
| --- | --- | --- |
| `OLLAMA_BASE_URL` | `http://localhost:11434` | Ollama 端点 |
| `OLLAMA_MODEL` | `gemma4:e4b` | 默认本地模型 |
| `OLLAMA_NUM_CTX` | `32768` | 默认上下文窗口 |
| `OLLAMA_FAST_NUM_PREDICT` | `4096` | 普通响应 token 预算 |
| `OLLAMA_DEEP_NUM_PREDICT` | `6144` | 更深入的分类/报告 token 预算 |
| `MCP_SERVER_URL` | `http://localhost:8000/mcp` | FastMCP HTTP 端点 |
Docker 服务设置位于 `docker-compose.yml`。
| 变量 | 默认值 | 用途 |
| --- | --- | --- |
| `DUMPS_DIR` | `/data/memory_dumps` | 容器内挂载的转储目录 |
| `CACHE_DIR` | `/data/cache/results` | AutoMem 解析结果缓存 |
| `VOL_FRAMEWORK_CACHE_DIR` | `/data/cache/volatility3-2.27-symbolpack-v1` | Volatility 框架缓存 |
| `VOL_SYMBOL_DIRS` | `/app/symbols` | Windows 符号包目录 |
| `VOL_TIMEOUT` | `300` | 默认插件超时时间(秒) |
| `MAX_ROWS_FULL` | `80` | 在紧凑摘要化之前返回的行数 |
## Volatility 缓存设计
AutoMem 使用一个名为 `volatility_cache` 的 Docker 命名卷。
| 缓存 | 容器路径 | 用途 |
| --- | --- | --- |
| Volatility 框架缓存 | `/data/cache/volatility3-2.27-symbolpack-v1` | Volatility 符号和框架缓存 |
| AutoMem 结果缓存 | `/data/cache/results` | 已解析的插件行,用于快速深入分析 |
大型插件输出会被规范化并缓存一次。随后,Agent 可以调用 `query_plugin_rows` 按 PID、进程名、IP、端口、路径或状态检索重点证据,而无需将庞大的表格传回本地 LLM。
示例工作流:
```
run_psxview(memory_dump="sample.raw")
query_plugin_rows(
plugin="psxview",
memory_dump="sample.raw",
filter_field="PID",
filter_value="740",
)
```
清除 Docker 缓存数据:
```
docker compose down -v
docker compose up -d --build
```
## 常用 MCP 工具
| 工具 | 用途 |
| --- | --- |
| `server_diagnostics` | MCP 服务器、转储目录和缓存诊断 |
| `list_memory_dumps` | 后端可用的受支持转储 |
| `get_image_info` | 操作系统/构建元数据 |
| `run_pslist` | 活动进程列表 |
| `run_psscan` | 用于隐藏或已终止进程的池扫描 |
| `run_pstree` | 父/子进程树 |
| `run_psxview` | 交叉视图隐藏进程验证 |
| `run_netscan` | 连接和监听套接字 |
| `run_cmdline` | 进程命令行 |
| `run_malfind` | 可疑或注入的内存区域 |
| `run_dlllist` | 针对目标 PID 的已加载 DLL/模块审查 |
| `run_handles` | 针对目标 PID 的文件、注册表和互斥体句柄 |
| `run_svcscan` | Windows 服务审查 |
| `run_hashdump` | 在明确请求时提取 LM/NTLM 凭据哈希 |
| `hash_evidence` | 用于精确指标字符串的 MD5/SHA1/SHA256 哈希 |
| `query_plugin_rows` | 缓存行过滤,用于针对性分析 |
## 测试
运行本地测试套件:
```
uv run pytest -q
```
运行语法检查:
```
uv run python -m compileall -q agent config frontend volatility_mcp_server tests
```
Docker 可能无法在受限的沙箱内运行。在普通的开发机器上,可以使用以下命令验证容器:
```
docker compose up -d --build
docker compose ps
```
## 故障排除
### MCP 服务器无法访问
启动或重新构建后端:
```
docker compose up -d --build
docker compose ps
```
检查端口 `8000` 是否未被其他进程占用。
### VMware `.vmem` 文件
AutoMem 会将独立的 `.vmem` 文件直接传递给 Volatility3。如果 Volatility 报告需要快照元数据,请将匹配的 `.vmss` 或 `.vmsn` 文件放在 `.vmem` 旁边,然后重新运行插件。
### Windows 符号错误
Docker 镜像将官方的 Volatility Windows 符号包安装到 `/app/symbols/windows.zip`,并在运行插件时使用已配置的符号目录。如果您在无法联网的情况下重新构建,并看到诸如 `_ETHREAD` 或 `symbol_table_name` 缺失类型的错误,请在有网络连接的情况下重新构建一次,以便下载符号包。
### 大型上下文设置不稳定
在普通的笔记本电脑演示中,请使用 32K 上下文预设。根据本地的 Ollama 模型和可用的 VRAM,更大的上下文可能会更慢或不稳定。
## 学术用途
AutoMem 是作为学术毕业设计开发的。请仅对您获得授权分析的内存映像使用它。
标签:AI智能体, AI风险缓解, DAST, DLL 劫持, Docker, Kubernetes, LangChain, LLM评估, MCP服务器, Mr. Robot, Ollama, SecList, Streamlit, Volatility3, Windows内存分析, 内存取证, 凭证提取, 哈希校验, 域渗透, 大语言模型, 安全防御评估, 库, 应急响应, 恶意软件分析, 数字取证, 本地化部署, 深度学习代理, 电子数据取证, 离线分析, 网络安全, 网络安全, 网络连接分析, 自动化报告生成, 自动化脚本, 访问控制, 请求拦截, 轻量级, 进程分析, 逆向工具, 隐私保护, 隐私保护