MWE-HaTN/MalFrame
GitHub: MWE-HaTN/MalFrame
一款专为恶意软件事件分析和逆向工程设计的分析师工作台,提供结构化工作流、行为映射和专业报告生成。
Stars: 0 | Forks: 0
# MalFrame — 恶意软件分析师仪表盘
一款专为**恶意软件事件分析 (MIA)** 与**恶意软件逆向工程 (MRE)** 工作流设计的专业 Web 应用程序。采用暗色赛博/终端美学风格构建,专为恶意软件分析师与 DFIR 从业者优化。





## 目录
- [快速开始](#-quick-start)
- [功能概述](#-features-overview)
- [仪表盘使用](#-dashboard-usage)
- [新功能](#-new-features)
- [多案例管理](#-multi-case-management)
- [数据管理](#-data-management)
- [导出选项](#-export-options)
- [键盘快捷键](#-keyboard-shortcuts)
- [开发脚本](#-development-scripts)
- [技术栈](#-tech-stack)
- [项目结构](#-project-structure)
- [故障排除](#-troubleshooting)
- [贡献指南](#-contributing)
## 快速开始
### 前置条件
| 工具 | 版本 | 下载 |
|------|---------|----------|
| Node.js | v18+ | [nodejs.org](https://nodejs.org/) |
| npm | v9+ | 包含在 Node.js 中 |
| Git | 最新版 | [git-scm.com](https://git-scm.com/) |
### 安装
```
# 1. Clone 仓库
git clone https://github.com/MWE-HaTN/MalFrame.git
cd MalFrame
# 2. 安装依赖
npm install
# 3. 启动开发服务器
npm run dev
# 4. 打开浏览器 → https://localhost:8088
```
### 生产构建
```
npm run build
npm run preview
```
## 功能概述
| 功能 | MIA | MRE | 描述 |
|---------|:---:|:---:|-------------|
| 多案例管理 | ✅ | ✅ | 多个独立案例,内联重命名,标签页切换 |
| 文件哈希生成器 | ✅ | ✅ | 拖放 → SHA256 + MD5 |
| 图片粘贴 | ✅ | ✅ | Ctrl+V 将屏幕截图粘贴到任意文本区域 |
| MITRE ATT&CK 映射 | ✅ | ✅ | 14 种战术,来自 GitHub 的实时数据 |
| MBC 映射 | ❌ | ✅ | 恶意软件行为目录 v3.2 |
| 微观行为 | ❌ | ✅ | 细粒度的行为指标 |
| IOC 表格 | ✅ | ✅ | 虚拟滚动,1000+ 行 |
| 攻击时间轴 | ✅ | ❌ | 拖拽重排时间顺序事件 |
| 证据工件 | ✅ | ❌ | 带有 SHA256 的文件管理 |
| 代码分析 | ❌ | ✅ | 静态、动态、密码学分析 |
| 运行时行为 | ❌ | ✅ | 反分析、执行、网络 |
| 脱壳层 | ❌ | ✅ | 多阶段脱壳文档 |
| 执行阶段 | ❌ | ✅ | 恶意软件执行流跟踪 |
| PE 节 | ❌ | ✅ | 节区熵值可视化 |
| 安全态势 | ❌ | ✅ | ASLR, DEP, CFG, SEH 检查 |
| 导出 (JSON/PDF/Word) | ✅ | ✅ | 综合报告生成 |
| 暗色/亮色主题 | ✅ | ✅ | 在主题间切换 |
| 英文/越南语 | ✅ | ✅ | 双语支持 |
| 活动追踪器 | ✅ | ✅ | GitHub 风格的分析热力图 |
| PWA | ✅ | ✅ | 可安装,带有更新提示的 service worker |
| 键盘快捷键 | ✅ | ✅ | `?` 查看所有快捷键 |
| 命令面板 | ✅ | ✅ | `Ctrl+K` — 导航、操作、设置、导出 |
| 跨案例搜索 | ✅ | ✅ | `Ctrl+Shift+X` — 跨所有案例搜索 |
| 剪贴板 IOC 解析器 | ✅ | ✅ | 粘贴原始文本 → 自动检测 IOC(哈希、IP、URL、域名) |
| 时间轴可视化 | ✅ | ❌ | 切换攻击事件的表格/时间轴视图 |
| YARA 规则编辑器 | ❌ | ✅ | 带有 YARA 语法高亮的 CodeMirror 6 |
| 案例模板 | ✅ | ✅ | 预填充案例:勒索软件、钓鱼、APT、信息窃取器 |
| IOC 交叉引用 | ✅ | ✅ | `Ctrl+Shift+I` — 查找跨案例的共享 IOC |
| 图谱可视化 | ✅ | ❌ | 交互式 MITRE ATT&CK 映射图谱 (ReactFlow) |
| 自动 MITRE 建议 | ✅ | ❌ | 基于行为的技术建议及置信度 |
| 自动 MBC 建议 | ❌ | ✅ | 基于运行时行为的 MBC 行为建议 |
| 导出提醒 | ✅ | ✅ | 数据超过 7 天未导出时弹出 Toast 警告 |
| 快捷键提示栏 | ✅ | ✅ | 固定在左下角的图标按钮 |
| 撤销 / 重做 | ✅ | ✅ | `Ctrl+Z` / `Ctrl+Shift+Z` — 滚动历史记录(20 个快照) |
| 节区导航 | ✅ | ✅ | `Ctrl+Shift+↓/↑` 在节区之间跳转,`Ctrl+Shift+A` 展开/折叠全部 |
| 保存状态指示器 | ✅ | ✅ | 仪表盘头部显示自动保存状态 (saving/saved/failed) |
## 仪表盘使用
### MIA 仪表盘 (`/mia`)
**用途**: 用于 DFIR 调查的恶意软件事件分析。
| 节区 | 描述 |
|---------|-------------|
| 背景 | 案例元数据与事件背景 |
| 样本信息 | 文件详情、哈希值、签名状态 |
| 静态分析 | 字符串、导入表、带有熵值的 PE 节 |
| 行为分析 | 进程树、文件系统、注册表、网络 |
| MITRE ATT&CK | 交互式技术映射 |
| 影响评估 | 范围、受影响账户、风险评级 |
| IOC 表格 | 带有类型分类的指标 |
| 建议 | 短期和长期的补救措施 |
| 攻击时间轴 | 按时间顺序记录事件 |
| 证据工件 | 拖放文件以生成 SHA256 哈希 |
| 笔记日志 | 支持图像的自由格式笔记 |
### MRE 仪表盘 (`/mre`)
**用途**: 用于深度技术分析的恶意软件逆向工程。
| 节区 | 描述 |
|---------|-------------|
| 背景 | 文件元数据与分析师背景 |
| 静态分析 | 哈希值、PE 结构、加壳检测、OSINT |
| 运行时行为 | 反分析、执行模式、网络 |
| 代码分析 | 静态/动态代码审查、密码学 |
| 深入分析 | 脱壳层、执行阶段、MBC 映射 |
| 检测 | YARA 规则、IOC、结论 |
### 工具 (`/tools`)
FLARE-VM 分析工具参考:**33 个类别,240+ 款工具**,支持搜索,附带 GitHub/项目链接。
### 设置 (`/settings`)
| 设置 | 描述 |
|---------|-------------|
| 用户资料 | 分析师姓名(用于导出和自动填充) |
| 语言 | English / Tiếng Việt |
| 主题 | Dark (cyber) / Light |
| 显示比例 | 75% – 200% 界面缩放 |
| 活动 | 年度视图分析热力图 |
## 新功能
### 剪贴板 IOC 解析器
**位置**: IOC 表格节区(MIA 和 MRE 仪表盘均有)
1. 在任意仪表盘中打开 IOC 表格节区
2. 点击 "Copy All" 旁边的 **Paste & Extract** 按钮(剪贴板图标)
3. 将来自日志、沙箱报告或威胁情报源的原始文本粘贴到文本区域
4. 点击 **Parse** — 系统将自动检测并分类 IOC(SHA256/SHA1/MD5, IPv4/IPv6, URLs, 域名, 邮箱, 文件路径, 互斥体)
5. 在预览表格中检查解析结果,移除任何误报
6. 点击 **Add All** 将其追加到您的 IOC 表格中
### 时间轴可视化
**位置**: 攻击时间轴节区(仅限 MIA 仪表盘)
1. 打开攻击时间轴节区
2. 您会在头部看到两个切换按钮:**Table**(默认)和 **Timeline**
3. 点击 **Timeline** 切换到垂直时间轴视图
4. 事件显示为带有严重性颜色圆点(info/warning/critical)的卡片
5. 将鼠标悬停在一个事件上会显示删除按钮
6. 添加表单在两种视图中均可使用 — 可在它们之间自由切换
### YARA 规则编辑器
**位置**: Detection > YARA 节区(仅限 MRE 仪表盘)
1. 打开 MRE 仪表盘并导航至 Detection 节区
2. YARA 编辑器取代了普通的文本区域,提供了一个完整的代码编辑器
3. 语法高亮是自动的:关键字、`$variables`、十六进制字符串 `{ }`、正则表达式 `/ /`、元键、注释
4. 直接编写您的 YARA 规则 — 该编辑器支持标准的 YARA 语法
5. 数据在保存时会随您的案例一起持久化
### 案例模板
**位置**: MIA 和 MRE 仪表盘均有
1. 点击案例标签栏中的 **+** (New Case) 按钮
2. 将出现一个包含以下选项的模板对话框:
- **Blank** — 空白案例
- **Ransomware** — 预填充影响、时间轴、建议 (MIA)
- **Phishing** — 预填充感染媒介、MITRE T1566 (MIA)
- **APT** — 预填充 MITRE 技术 T1071/T1059/T1055 (MIA)
- **Info-Stealer** — 预填充摘要和 MBC 映射 (MRE)
- **Custom** — 用于手动设置的空白案例
3. 选择一个模板 — 案例将使用预填充的数据创建
4. 根据您的调查需要编辑预填充的值
### IOC 交叉引用
**位置**: IOC 表格节区(两个仪表盘均有)、命令面板或键盘快捷键
1. **通过 IOC 表格**:在 MIA 或 MRE 仪表盘中打开 IOC 表格节区 → 点击头部的 **Cross-Reference** 按钮
2. **通过命令面板**:按 `Ctrl+K` → 输入 "ioc" → 选择 "IOC Cross-Reference"
3. **通过键盘**:按 `Ctrl+Shift+I`
4. 点击 **Scan All Cases** 分析所有 MIA 和 MRE 案例
5. 结果将显示出现在 2 个及以上案例中的 IOC — 点击任何案例名称即可导航至该案例
### 图谱可视化
**位置**: MITRE ATT&CK 节区(仅限 MIA 仪表盘)
1. 在 MIA 仪表盘中打开 MITRE ATT&CK 映射节区
2. 通过在战术列中点击来选择技术
3. 选择技术后,**Visualize** 按钮(git-branch 图标)将变为可用状态
4. 点击 **Visualize** 打开交互式图谱对话框
5. 图谱将显示战术节点及其选定的技术作为子节点
6. 使用鼠标平移/缩放,MiniMap 用于概览,以及 fit-view 控件
### 自动 MITRE 建议
**位置**: MITRE ATT&CK 映射节区(MIA 仪表盘)
1. 在行为分析节区输入行为数据(进程树、文件系统、注册表、网络、内存、系统更改)
2. 打开 MITRE ATT&CK 映射节区 — 建议的技术会自动出现在战术网格上方
3. 每条建议显示技术 ID、名称、来源字段和置信度(绿/琥珀/灰圆点)
4. 将鼠标悬停在某条建议上,会显示 **Accept**(添加到映射)和 **Dismiss**(从列表隐藏)按钮
5. 已存在于您映射中的建议会被自动过滤掉
6. **Force Refresh** 按钮会绕过所有缓存,从 GitHub 获取最新的 MITRE 数据
自动 MBC 建议
**位置**: MBC 映射节区(MRE 仪表盘)
1. 添加运行时行为条目(反调试、反虚拟机、持久化、网络、内存、注入、痕迹)
2. 打开 MBC 映射节区 — 建议的行为会自动出现在目标网格上方
3. 每条建议显示行为 ID、名称、目标、来源和置信度
4. 根据需要接受或忽略建议
5. **Update** 按钮会检查 GitHub 上是否有更新版本的 MBC,如果有则显示链接
### 撤销 / 重做
**位置**: MIA 和 MRE 仪表盘均有
- `Ctrl+Z` 撤销,`Ctrl+Shift+Z` 重做
- 存储多达 20 个数据状态快照
- 也可通过 `?` 快捷键对话框访问
- 适用于所有节区编辑、导入和模板填充
### 节区键盘导航
**位置**: MIA 和 MRE 仪表盘均有
- `Ctrl+Shift+↓` — 跳转到下一个节区
- `Ctrl+Shift+↑` — 跳转到上一个节区
- `Ctrl+Shift+A` — 一次性展开或折叠所有节区
- 节区会平滑滚动到视图中,并将焦点移至头部以实现无障碍访问
### 保存状态指示器
**位置**: 仪表盘头部(MIA 和 MRE 均有)
- 在副标题旁边显示实时自动保存状态
- 状态:**Saving...**(黄色旋转框)、**Saved**(绿色对勾)、**Save failed**(红色警告)
- 数据在更改后每 500ms 自动保存到 IndexedDB
## 多案例管理
两个仪表盘均支持同时存储多个独立案例。每个仪表盘顶部的标签栏允许您切换、重命名、创建和删除案例。
- 每个案例单独存储在 IndexedDB 中(`mia-case-{id}`, `mre-case-{id}`)
- 切换案例时会自动保存当前案例并加载所选案例
- 案例名称支持内联编辑
## 数据管理
### 自动保存
所有数据会在短暂的防抖后自动保存到 **IndexedDB**。无需手动保存。
### 存储布局
| 内容 | 存储位置 | 键名 |
|------|---------|-----|
| MIA 案例注册表 | IndexedDB | `mia-cases` |
| MIA 案例数据 | IndexedDB | `mia-case-{id}` |
| MRE 案例注册表 | IndexedDB | `mre-cases` |
| MRE 案例数据 | IndexedDB | `mre-case-{id}` |
| 主题偏好 | localStorage | `cyber-analyst-theme` |
| 语言设置 | localStorage | `cyber-analyst-language` |
| 用户资料 | localStorage | `cyber-analyst-user-profile` |
| MITRE ATT&CK 缓存 | localStorage | `mitre-attack-cache` (24小时 TTL) |
| 活跃 MIA 案例 | localStorage | `mia-active-case` |
| 活跃 MRE 案例 | localStorage | `mre-active-case` |
### 离线功能
该应用注册了一个 service worker(通过 vite-plugin-pwa + Workbox),可以缓存所有静态资源。应用一旦加载,即可在没有互联网连接的情况下运行 — 仪表盘、导出、导入、搜索、工具参考均可离线使用。唯一的例外是首次获取 MITRE ATT&CK 数据,这需要一次在线加载,随后会在 localStorage 中缓存 24 小时。
### 隐私
- **100% 本地化** — 所有数据均保存在您的浏览器中
- **无服务器** — 无云服务,无遥测,无跟踪
- **无分析** — 除 MITRE ATT&CK 实时数据外零外部请求
## 导出选项
| 格式 | 最适合 |
|--------|----------|
| **JSON** | 备份、重新导入、分析师之间共享 |
| **PDF** | 正式报告、打印 |
| **Word (.docx)** | 可编辑报告 |
### 文件名格式
```
{AnalystName}_{Date}_{FileName}_{SHA256-8chars}.{ReportType}.{ext}
Examples:
HaTN_20260329_malware.exe_a1b2c3d4.MRE.pdf
HaTN_20260329_sample.dll_5e6f7g8h.MIA.docx
```
### 导入
点击仪表盘头部的 **Import JSON**。导入的数据将根据当前 schema 进行验证,并向后兼容较旧的导出版本。
## 键盘快捷键
在任何地方按 `?` 可查看所有快捷键。按键绑定:
| 快捷键 | 操作 |
|----------|--------|
| `Ctrl+K` | 打开命令面板 |
| `Ctrl+Z` | 撤销(仅限仪表盘) |
| `Ctrl+Shift+Z` | 重做(仅限仪表盘) |
| `Ctrl+Shift+X` | 搜索所有案例 |
| `Ctrl+Shift+I` | IOC 交叉引用 — 查找跨案例的共享 IOC |
| `Ctrl+Shift+N` | 新建案例 |
| `Ctrl+Shift+←` / `→` | 切换到上一个 / 下一个案例 |
| `Ctrl+Shift+↓` / `↑` | 跳转到下一个 / 上一个节区 |
| `Ctrl+Shift+A` | 展开 / 折叠所有节区 |
| `Ctrl+Shift+E` | 导出数据 |
| `Ctrl+Shift+1` | 前往 MIA 仪表盘 |
| `Ctrl+Shift+2` | 前往 MRE 仪表盘 |
| `Ctrl+Shift+T` | 前往工具 |
| `Ctrl+Shift+S` | 前往设置 |
| `?` | 显示键盘快捷键对话框 |
## 开发脚本
| 脚本 | 描述 |
|--------|-------------|
| `npm run dev` | 在 `https://localhost:8088` 启动开发服务器 |
| `npm run build` | 生产构建至 `dist/` 目录 |
| `npm run preview` | 在本地预览生产构建 |
| `npm run lint` | 运行 ESLint |
| `npm run typecheck` | TypeScript 类型检查(不输出文件) |
| `npm run test` | 运行单元测试 |
| `npm run test:watch` | 在监听模式下运行测试 |
## 技术栈
### 核心
| 技术 | 版本 | 用途 |
|------------|---------|---------|
| [React](https://react.dev/) | 19.x | UI 框架 |
| [TypeScript](https://www.typescriptlang.org/) | 5.x | 类型安全 |
| [Vite](https://vitejs.dev/) | 7.x | 构建工具 + 开发服务器 |
| [React Router](https://reactrouter.com/) | 7.x | 客户端路由 |
| [Zod](https://zod.dev/) | 4.x | 导入时的 Schema 验证 |
### UI 与样式
| 技术 | 用途 |
|------------|---------|
| [Tailwind CSS](https://tailwindcss.com/) | 实用优先的样式 |
| [Radix UI](https://www.radix-ui.com/) | 无障碍基础组件 |
| [Lucide React](https://lucide.dev/) | 图标 |
| [Sonner](https://sonner.emilkowal.ski/) | Toast 通知 |
| [TanStack Virtual](https://tanstack.com/virtual) | IOC 表格的虚拟滚动 |
| [CodeMirror 6](https://codemirror.net/) | 带有语法高亮的 YARA 规则编辑器 |
| [React Flow](https://reactflow.dev/) | MITRE ATT&CK 图谱可视化 |
### 导出
| 技术 | 用途 |
|------------|---------|
| [jsPDF](https://github.com/parallax/jsPDF) | PDF 生成 |
| [docx](https://docx.js.org/) | Word 文档生成 |
### 构建与优化
| 技术 | 用途 |
|------------|---------|
| [@vitejs/plugin-basic-ssl](https://github.com/vitejs/vite-plugin-basic-ssl) | 用于开发环境的自签名 HTTPS |
| [vite-plugin-compression](https://github.com/vbenjs/vite-plugin-compression) | Gzip/Brotli 压缩(生产环境) |
| [vite-plugin-pwa](https://vite-pwa-org.netlify.app/) | PWA 支持 + service worker (Workbox) |
| [workbox-window](https://developer.chrome.com/docs/workbox/modules/workbox-window) | Service worker 注册 + 更新提示 |
| [rollup-plugin-visualizer](https://github.com/btd/rollup-plugin-visualizer) | 包分析 (`dist/stats.html`) |
### 测试
| 技术 | 用途 |
|------------|---------|
| [Vitest](https://vitest.dev/) | 单元测试框架 |
| [jsdom](https://github.com/jsdom/jsdom) | 测试用的 DOM 环境 |
## 项目结构
```
MalFrame/
├── public/
│ └── fonts/ # Roboto fonts for PDF export
│
├── scripts/
│ └── bundle-size-report.js # Bundle size analysis
│
├── src/
│ ├── components/
│ │ ├── ui/ # Radix-based design system components
│ │ │ ├── button.tsx
│ │ │ ├── button-variants.ts # CVA variants (separate from button.tsx)
│ │ │ └── ...
│ │ ├── dashboard/ # DashboardHeader
│ │ ├── header/ # ActivityBadge, EasterEgg
│ │ ├── SearchDialog.tsx # Cross-case search dialog
│ │ ├── CommandPalette.tsx # Command palette (Ctrl+K)
│ │ ├── ShortcutsDialog.tsx # Keyboard shortcuts reference (?)
│ │ ├── ShortcutsHintBar.tsx # Fixed shortcut icon buttons
│ │ ├── ReloadPrompt.tsx # PWA update prompt
│ │ ├── IOCPasteDialog.tsx # Paste & extract IOCs from text
│ │ ├── IOCCrossReferenceDialog.tsx # Cross-case IOC analysis
│ │ ├── CaseTemplateDialog.tsx # New case template picker
│ │ ├── CaseSwitcher.tsx # Tab bar: switch/rename/delete cases
│ │ ├── CollapsibleSection.tsx # Section wrapper with persistence
│ │ ├── GraphView.tsx # ReactFlow MITRE graph visualization
│ │ ├── ScrollToTop.tsx # Scroll restoration
│ │ ├── SectionErrorBoundary.tsx # Error boundary for sections
│ │ └── lazy/ # Lazy wrapper components (LazyXxx.tsx)
│ │ ├── index.ts
│ │ ├── LazyGraphView.tsx
│ │ └── LazyYaraEditor.tsx
│ │
│ ├── features/
│ │ ├── mia/ # ALL MIA domain code
│ │ │ ├── components/ # Section components (BackgroundSection, IOCTable, TimelineVisual, etc.)
│ │ │ ├── hooks/
│ │ │ │ └── useArtifactFileDrop.ts
│ │ │ ├── services/ # constants.ts, migrate.ts, transform.ts
│ │ │ └── types.ts # DFIRData and all MIA sub-types
│ │ │
│ │ └── mre/ # ALL MRE domain code
│ │ ├── components/ # Section components + StaticAnalysisCards, YaraEditor,
│ │ │ ├── runtime-behavior/ # AntiAnalysisGroup, ExecutionBehaviorGroup, etc.
│ │ │ └── code-analysis/ # StaticCodeAnalysis, DynamicCodeAnalysis, etc.
│ │ ├── hooks/
│ │ │ └── useMBCData.ts
│ │ ├── services/ # constants.ts, migrate.ts, transform.ts, codeAnalysisDefaults.ts
│ │ └── types.ts # REData and all MRE sub-types
│ │
│ ├── contexts/ # React Context providers (no hooks exported here)
│ │ ├── LanguageContext.tsx
│ │ ├── ThemeContext.tsx
│ │ └── UserContext.tsx
│ │
│ ├── hooks/ # Custom React hooks
│ │ ├── useLanguage.ts
│ │ ├── useTheme.ts
│ │ ├── useUser.ts
│ │ ├── useDashboardData.ts # IndexedDB load/save + auto-save + undo/redo
│ │ ├── useDashboardActions.ts # Shared export/import/undo actions for dashboards
│ │ ├── useDashboardExport.ts # Export dialog state machine
│ │ ├── useImportJSON.ts # JSON import with Zod validation
│ │ ├── useCaseManager.ts # Multi-case CRUD
│ │ ├── useSectionNavigation.ts # Keyboard navigation between sections
│ │ ├── useDragReorder.ts # Drag-to-reorder list items
│ │ ├── useToolsData.ts # Tools list with localStorage persistence
│ │ ├── useKeyboardShortcuts.ts # Keyboard shortcut bindings
│ │ └── useTypingAnimation.ts # Typing animation for landing page
│ │
│ ├── lib/
│ │ ├── export/ # PDF + Word export (lazy-loaded)
│ │ │ ├── pdf-mia.ts
│ │ │ ├── pdf-mre.ts
│ │ │ ├── word-mia.ts
│ │ │ ├── word-mre.ts
│ │ │ ├── json.ts
│ │ │ └── helpers.ts
│ │ ├── translations/
│ │ │ ├── en.ts
│ │ │ ├── vn.ts
│ │ │ └── index.ts
│ │ ├── db.ts # IndexedDB async wrapper
│ │ ├── storageKeys.ts # All localStorage key strings
│ │ ├── searchAcrossCases.ts # Cross-case search logic
│ │ ├── mitreUtils.ts # MITRE ATT&CK fetch + cache
│ │ ├── mitreSuggestion.ts # MITRE keyword→technique suggestion engine
│ │ ├── mbcSuggestion.ts # MBC tag→behavior suggestion engine + version check
│ │ ├── mbcData.ts # MBC v3.2 static dataset
│ │ ├── parseIOCs.ts # Regex-based IOC extraction from text
│ │ ├── crossReferenceIOCs.ts # Find shared IOCs across cases
│ │ ├── caseTemplates.ts # Pre-built case templates
│ │ ├── graphBuilders.ts # ReactFlow node/edge builders
│ │ ├── yaraLanguage.ts # CodeMirror YARA syntax support
│ │ ├── toolsData.ts # FLARE-VM tools reference data
│ │ ├── validationSchemas.ts # Zod schemas for import
│ │ ├── lazyExport.ts # Dynamic import wrappers for export
│ │ ├── lazyPrefetch.ts # Prefetch heavy component chunks on hover
│ │ ├── dashboardExportUtils.ts # Export helpers (hasData, formatExportError)
│ │ ├── fileNameUtils.ts # Export filename generation
│ │ ├── imageUtils.ts # Base64 image helpers
│ │ ├── imageStorage.ts # Image registry clear utilities
│ │ ├── sectionState.ts # Section open/close state helpers
│ │ ├── preloadRoutes.ts # Lazy page components + preload
│ │ ├── semanticColors.ts # Risk level → color mapping
│ │ ├── activityUtils.ts # Activity tracking helpers
│ │ ├── debugLogger.ts # debugLog/debugWarn/debugError (dev only)
│ │ └── utils.ts # cn(), generateId(), formatFileSize()
│ │
│ │ └── __tests__/ # Unit tests (vitest)
│ │ ├── parseIOCs.test.ts
│ │ ├── helpers.test.ts
│ │ └── mitreSuggestion.test.ts
│ │
│ ├── pages/
│ │ ├── Index.tsx # Landing page
│ │ ├── MIADashboard.tsx
│ │ ├── MREDashboard.tsx
│ │ ├── Tools.tsx
│ │ ├── Settings.tsx
│ │ └── NotFound.tsx
│ │
│ ├── types/
│ │ ├── cases.ts # CaseMeta (multi-case management)
│ │ └── dashboard.ts # Shared types (Artifact, IOC, LogEntry, etc.)
│ │
│ ├── App.tsx # Root: providers + router
│ ├── main.tsx
│ └── index.css # Design tokens & global styles
│
├── .github/
│ ├── workflows/
│ ├── ISSUE_TEMPLATE/
│ └── PULL_REQUEST_TEMPLATE.md
│
├── index.html
├── tailwind.config.ts
├── vite.config.ts
├── vitest.config.ts
├── tsconfig.json
├── tsconfig.app.json
├── eslint.config.js
└── package.json
```
## 故障排除
### 端口已被占用
```
npx kill-port 8088
# 或在 vite.config.ts 中修改端口
```
### HTTPS 证书警告
开发服务器使用自签名证书。在浏览器中点击 **Advanced → Proceed to localhost**(或 IP 地址)。这是每个浏览器的一次性操作。
### 依赖安装失败
```
rm -rf node_modules package-lock.json
npm install
```
### 数据未保存
1. 检查浏览器是否处于隐身/无痕模式(IndexedDB 被禁用)
2. DevTools → Application → IndexedDB → 检查 `dashboard` 存储
3. 通过仪表盘上的 **Clear Data** 按钮清除所有数据
### MITRE ATT&CK 未加载
1. 检查网络连接(首次加载时从 GitHub 实时获取)
2. DevTools → Application → localStorage → 删除 `mitre-attack-cache`
3. 刷新页面
### 导出不工作
1. 确保浏览器允许来自此源的下载
2. 如果使用网络 IP,请确保您使用的是 `https://` 而不是 `http://`
3. 首先尝试 JSON 导出(最轻量的格式),然后再尝试 PDF/Word
### 图片无法粘贴
1. 首先点击文本区域内部以使其获得焦点
2. 使用 `Ctrl+V` — 仅支持剪贴板图片(不支持文件粘贴)
3. 检查 DevTools 控制台是否有错误
## 设计系统
### 颜色标记
| 标记 | 亮色模式 | 暗色模式 | 用途 |
|-------|------------|-----------|-------|
| `--background` | White | 深海军蓝 | 页面背景 |
| `--foreground` | 深灰色 | 浅灰色 | 文本 |
| `--primary` | 绿色 | 霓虹绿 `#00ff41` | 主要操作 |
| `--accent` | 青色 | 青色 | 次要高亮 |
| `--destructive` | 红色 | 红色 | 错误 / 删除 |
| `--muted` | 浅灰色 | 深灰色 | 禁用状态 |
### 排版
| 字体 | 用途 |
|------|-------|
| JetBrains Mono | 代码、终端文本、表单值 |
| Share Tech Mono | 显示标题、大号文本 |
| Roboto | 导出的 PDF/Word 文档中的正文文本 |
## 贡献指南
完整指南请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
```
git clone https://github.com/MWE-HaTN/MalFrame.git
cd MalFrame
npm install
git checkout -b feat/my-feature
npm run dev
```
在提交 PR 之前:
```
npm run lint # No ESLint errors
npm run typecheck # No TypeScript errors
npm run build # Production build succeeds
```
## 许可证
MIT 许可证 — 详情请参见 [LICENSE](LICENSE)。
## 作者
**MWE HaTN**
恶意软件分析 · DFIR · 逆向工程
GitHub: [@MWE-HaTN](https://github.com/MWE-HaTN).
## 致谢
- [MITRE ATT&CK](https://attack.mitre.org/) — 威胁框架
- [MBC (Malware Behavior Catalog)](https://github.com/MBCProject/mbc-markdown) — 行为映射
- [FLARE-VM](https://github.com/mandiant/flare-vm) — 分析工具参考
*为网络安全社区而建*
**[报告 Bug](https://github.com/MWE-HaTN/MalFrame/issues)** · **[请求功能](https://github.com/MWE-HaTN/MalFrame/issues)**
标签:DAST, MIT开源许可, React, Syscalls, Tailwind CSS, TypeScript, Vite, 专业报告, 云资产清单, 仪表盘, 分析框架, 哈希生成, 多案管理, 威胁情报, 安全插件, 安全运营, 库, 应急响应, 开发者工具, 恶意软件分析, 扫描框架, 数字取证与事件响应, 离线应用, 结构化工作流, 网络安全, 网络靶场, 自动化攻击, 行为映射, 逆向工程, 隐私保护