MWE-HaTN/MalFrame

GitHub: MWE-HaTN/MalFrame

一款专为恶意软件事件分析和逆向工程设计的分析师工作台,提供结构化工作流、行为映射和专业报告生成。

Stars: 0 | Forks: 0

# MalFrame — 恶意软件分析师仪表盘 一款专为**恶意软件事件分析 (MIA)** 与**恶意软件逆向工程 (MRE)** 工作流设计的专业 Web 应用程序。采用暗色赛博/终端美学风格构建,专为恶意软件分析师与 DFIR 从业者优化。 ![React](https://img.shields.io/badge/React-19.x-61DAFB?logo=react) ![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript) ![Vite](https://img.shields.io/badge/Vite-7.x-646CFF?logo=vite) ![Tailwind](https://img.shields.io/badge/Tailwind-3.x-06B6D4?logo=tailwindcss) ![License](https://img.shields.io/badge/License-MIT-green) ## 目录 - [快速开始](#-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, 专业报告, 云资产清单, 仪表盘, 分析框架, 哈希生成, 多案管理, 威胁情报, 安全插件, 安全运营, 库, 应急响应, 开发者工具, 恶意软件分析, 扫描框架, 数字取证与事件响应, 离线应用, 结构化工作流, 网络安全, 网络靶场, 自动化攻击, 行为映射, 逆向工程, 隐私保护