CdtDelta/dfnotes-go
GitHub: CdtDelta/dfnotes-go
一款面向数字取证和安全调查的防篡改案例笔记应用,解决证据记录中的完整性和保密性问题。
Stars: 1 | Forks: 0
# dfnotes-go
**版本 0.6.0**
一款跨平台桌面应用程序,用于在数字取证调查过程中记录和管理案例笔记。基于 Go (Wails v2) 和 React 构建,dfnotes-go 提供了一个结构化、防篡改的笔记系统,所有条目都具有可验证的监管链。
## 功能概述
除了确保完整性,它还处理取证案例工作的实际方面:
- 按案例加密存储,使用独立的案例密码
- 证据项跟踪与监管链日志记录
- 自动 IOC 检测(12 种类型)及确认/误报工作流
- 关键事件的案例时间线
- 带有模板和笔记链接的任务列表,用于调查工作流跟踪
- 加密导出与自动备份
- 内置用户指南(帮助 > 用户指南)
## 功能特性
### 案例管理
- 创建案例,支持设置密级(从非机密到绝密)、案例编号、检查员信息
- 使用 Argon2id 算法从案例密码派生每个案例的加密密钥
- 案例锁定/解锁 -- 离开工作站时无需暴露案例数据
- 每个安装可支持多个案例,各自独立加密
### 证据管理
- 证据项登记,包含类型、获取哈希、状态
- 状态生命周期:已收集、分析中、已处理、已归档、已撤回
- 状态更改时自动生成监管链条目,也支持手动添加
- 通过“已撤回”状态实现软删除 -- 没有硬删除
- 动态证据标签页(E001、E002 等),每个都有独立的笔记编辑器
- 在 Markdown 中使用 `[[E001]]` 语法链接证据,并支持自动完成
### IOC 检测
- 提交区块时自动检测 12 种 IOC 类型:IPv4、IPv6、域名、URL、电子邮件、MD5、SHA1、SHA256、Windows 文件路径、Unix 文件路径、注册表项、CVE
- 检测到的 IOC 黄色高亮,已确认的红色高亮,误报的灰色删除线
- 右键上下文菜单可确认、忽略或恢复状态
- IOC 摘要标签页,支持混淆显示、按类型和证据项过滤、来源导航
- 所有 IOC 值原始存储,仅在显示时进行混淆处理
### 时间线
- 手动添加时间线条目,要求 ISO 8601 UTC 时间戳,可选显示第二时区(IANA)
- 可搜索的时区下拉列表,支持城市名称和 UTC 偏移查询
- 按时间戳排序
- 来源导航链接至原始证据标签页
### 任务列表
- 按案例跟踪任务,五种状态:待办、进行中、受阻、已完成、不适用
- 任务标记为“已完成”时记录完成时间戳
- 任务可指派给特定证据项或整个案例
- 任务模板:在设置中配置命名任务集,可在调查过程中随时应用并关联证据项。适用于硬盘镜像制作或恶意软件分析等标准工作流
- 多对多笔记区块链接:将已提交的笔记区块链接到任务,作为工作记录的文档。一个任务可关联多个笔记;一个笔记也可关联多个任务。在报告撰写时非常有用,可追溯工作内容及详细记录位置
- 按状态和证据项过滤,可组合使用
- 任务包含在案例导出中
### 标签
- 28 个预定义标准标签,涵盖分析、状态、优先级和证据类型类别
- 可按案例创建自定义标签
- 标签可应用于笔记区块和证据项
- 在笔记和证据列表上支持标签过滤
### 主题
- 11 种主题可选,通过视图 > 主题设置:取证暗色(默认)、经典暗色、高对比度、亮色、Solarized 暗色、Monokai、Dracula、Nord、Gruvbox、Matrix、取证蓝
- 立即应用,并在重启后保持
### 备份
- 自动加密备份:SQLite 数据库的原始副本(内容已在应用层进行 AES-256-GCM 加密)
- 可配置目标路径、间隔(默认 6 小时)和保留数量
- 备份文件名包含 ISO 8601 UTC 时间戳:`dfnotes-go_backup_YYYYMMDDTHHMMSSZ.db`
- 失败通知横幅持续显示,提供推迟和忽略选项
- 设置中有手动“立即备份”触发按钮
- 上次备份时间戳和状态在应用重启后仍保留
### 导出
- 将整个案例导出为 AES-256 加密的 7z 压缩包
- 用户在导出时设置独立的压缩包密码(与案例密码无关)
- 通过原生文件对话框选择保存位置
- 压缩包内容:
- `README.txt` -- 说明和验证指南
- `case_metadata.json` -- 明文案例元数据
- `[案例编号].db` -- 加密的 SQLite 数据库
- `master_notes/` -- 每个已提交区块一个 Markdown 文件,包含哈希/签名头部
- `evidence/[项名]/` -- 每个证据项的 metadata.json 和区块 Markdown 文件
- `ioc_summary.json` -- 所有 IOC 及其原始值和混淆值
- `timeline.json` -- 所有时间线条目
- `tasks.json` -- 所有任务及其状态、证据项和链接的区块引用
- `chain_verification.json` -- 完整哈希链,包含每个区块的验证结果和 `chain_intact` 标志
- 一旦解压,压缩包内容不再加密 -- 请根据您组织的数据处理政策进行处理
- 导出操作记录在审计跟踪中
### PDF 导出
- 通过文件 > 导出 PDF (Cmd+P) 进行完整案例 PDF 导出
- 每页顶部和底部显示密级标识,并按等级颜色编码
- 包含章节:封面页、目录、主笔记、证据项、IOC 摘要、时间线、任务列表、链验证、图片附录
- 笔记区块渲染时包含完整验证哈希(SHA-256,标注为“验证哈希:”)、提交时间戳和区块 ID
- 链验证章节包含说明性语句、链完整性摘要,以及每个区块的签名和哈希验证表
- IOC 值在整个文档中均以混淆形式显示
- 随 PDF 同时写入 SHA-256 校验文件用于完整性验证
- 导出操作记录在审计跟踪中
### 文档提醒
- 倒计时提醒器,在文档记录中断过长时间时警告检查员,防止在长时间分析中视野狭窄
- 提醒间隔可在设置中配置(文档提醒部分);默认为 30 分钟
- 当提交笔记区块或添加/编辑时间线条目时,完全重置(从完整间隔重新开始)
- 当证据项状态更改或添加手动监管日志条目时,部分重置(从一半间隔重新开始)
- 提醒触发时,应用窗口将置于前台
- 模态框提供四个操作:立即记录(焦点导航至活动笔记编辑器)、推迟 15 分钟、推迟 30 分钟、暂停提醒
- 提醒暂停期间,在案例标签栏下方显示暂停指示条,并带有“恢复”按钮
- 当配置的间隔低于 30 分钟时,设置中显示内联警告
- 计时器仅在案例解锁时运行;在仪表盘、登录界面或设置向导时不运行,且不会被打开设置打断
### 数据库位置
- 数据库位置可在首次启动时配置,并可随时在设置中更改
- 移动:关闭连接,复制文件,通过 SHA-256 验证完整性,删除原文件,在新路径重新打开
- 指向:验证现有数据库文件的架构,切换到该文件而不修改原始文件
- 配置文件存储在 `~/.config/dfnotes-go/config.json`(Linux),与数据库文件分离
### 安全性
- 首次启动时生成 Ed25519 密钥对用于用户身份验证
- 可选 TOTP 多因素认证,支持二维码注册和一次性恢复码
- 应用密码通过 Argon2id 派生主密钥
- 每个案例的加密密钥由主密钥包装
- 所有笔记区块内容使用 AES-256-GCM 加密
### 用户指南
- 内置帮助,可通过帮助 > 用户指南访问
- 11 个章节涵盖所有功能:快速入门、笔记记录、证据管理、IOC 检测、时间线、任务列表、标签、备份、导出、设置、技巧与快捷键
- 完全适配主题
## 系统要求
### 运行时
- Linux (amd64)、Windows (amd64) 或 macOS (arm64)
- 对于导出功能:必须安装 `7z` 命令行工具
- Linux: `sudo apt install p7zip-full`
- Windows: [7-Zip](https://www.7-zip.org/)
- macOS: `brew install p7zip`
### 构建依赖(如果从源代码构建)
- Go 1.21+
- Node.js 18+
- Wails v2: `go install github.com/wailsapp/wails/v2/cmd/wails@latest`
- Linux: `webkit2gtk-4.1` 开发库
## 从源代码构建
```
# 克隆仓库
git clone https://github.com/CdtDelta/dfnotes-go.git
cd dfnotes-go
# Build (Linux)
wails build -tags webkit2_41
# Build (Windows/macOS)
wails build
# 二进制文件位置
build/bin/dfnotes-go
```
## 已知限制
- **图片剪贴板粘贴** 在 Linux 上由于 WebKit2GTK Bug 218519 而无法工作。请使用编辑器工具栏中的“附加图片”按钮通过原生文件对话框附加图片。
- **代码段中的 IOC 检测:** IOC 模式会匹配行内代码段(反引号包裹的文本)内的内容。代码段中的哈希或 CVE 将被检测并高亮。
- **Unix 文件路径** 由后端检测,并出现在 IOC 摘要标签页中,但在已提交区块视图中不高亮显示(渲染的 Markdown 中误报过多)。
- **导出需要 7z:** 导出功能调用系统 `7z` 二进制文件。如果未安装,导出将失败并显示明确的错误消息。请参阅上面的系统要求。
- **压缩包管理器兼容性:** AES-256 加密的 7z 压缩包必须使用 7z CLI 或 7-Zip 打开。大多数图形界面压缩包管理器(包括 Ubuntu 的 file-roller)不支持它们。
## 更新日志
### v0.6.0 (2026-05-23) 发布
**文档提醒计时器**
- 倒计时提醒器,在文档记录中断过长时间时警告检查员
- 当提交笔记区块或添加/编辑时间线条目时,完全重置;当证据状态更改或手动添加监管日志条目时,部分重置(半间隔)
- 提醒触发时,应用窗口置于前台
- 操作:立即记录(焦点导航至活动笔记编辑器)、推迟 15 分钟、推迟 30 分钟、暂停提醒
- 提醒暂停期间,在标签栏下方显示暂停指示条并带有“恢复”按钮
- 间隔可在设置中配置,低于 30 分钟时显示内联警告
- 计时器仅在案例解锁会话期间运行;打开设置时不被中断
**设置模态框**
- 设置现在作为覆盖面板打开,而非导航到单独的路由
- 访问设置期间,活动案例保持解锁状态,文档提醒计时器持续运行
- 可通过 X 按钮、Escape 键或点击背景关闭(存在未保存更改时,点击背景被阻止)
### v0.5.0 (2026-05-21) 发布
**PDF 导出**
- 通过文件 > 导出 PDF (Cmd+P) 进行完整案例 PDF 导出
- 密级以颜色编码的页眉和页脚条显示在每页(颜色随等级从绿到深红变化)
- 封面页包含案例元数据、检查员信息、导出时间戳和 dfnotes-go 版本
- 带页码的目录
- 主笔记章节:按链顺序排列的所有已提交区块,每个包含验证哈希(完整 SHA-256,带标签)、提交时间戳、区块 ID 和验证状态;被篡改的区块以红色显示
- 证据项章节:每个项目的元数据、监管日志和已提交笔记区块
- IOC 摘要章节:已确认和检测到的 IOC 以等宽表格显示,包含混淆值;被忽略的 IOC 在单独的子表中以灰色显示
- 时间线章节:记录块格式,包含时间戳、可选第二时区、事件描述和调查员备注
- 任务列表章节:按证据项分组,然后按状态分组(待办优先,不适用最后);每个任务显示标题、状态、描述、完成时间戳(如适用)以及链接的区块引用(带提交时间戳和区块 ID)
- 链验证章节:说明性语句、链完整性摘要行、每个区块的验证表(等宽字体),任何失败的行以红色文本显示
- 附录 A:来自已提交笔记区块的所有图片附件,标注源区块 ID 和时间戳;笔记正文中的图片占位符引用此附录
- 随 PDF 同时写入 SHA-256 校验文件(格式与 sha256sum 输出相同)
- 导出操作记录在审计跟踪中
### v0.4.5 (2026-05-19) 发布
**任务列表**
- 每个案例新增任务标签页(位于时间线之后,证据跟踪之前)
- 五种任务状态:待办、进行中、受阻、已完成、不适用
- 任务标记为“已完成”时记录完成时间戳
- 任务可指派给特定证据项或整个案例
- 任务模板:命名任务集存储在 `~/.config/dfnotes-go/templates.json`,在设置中管理,从任务列表标签页应用并关联证据项
- 通过关联表实现多对多笔记区块链接 -- 可从任一侧将笔记链接到任务或将任务链接到笔记
- 从链接的笔记和链接的任务进行来源导航,带脉冲动画
- 按状态和证据项过滤,可组合使用
- 任务包含在案例导出中,格式为 `tasks.json`
**用户指南**
- 内置帮助对话框,可通过帮助 > 用户指南访问
- 11 个章节涵盖所有应用功能
- 完全适配主题,无硬编码颜色
- 支持 Escape 键和点击背景关闭
### v0.4.0 (2026-05-18) 发布
**配置与设置**
- 应用程序配置现在存储在操作系统约定路径下的专用配置文件中
- 新增设置面板(文件 > 设置),用于备份配置、数据库位置、模板管理和关于信息
- 设置面板中有未保存更改指示器
- 数据库路径现在可在设置向导中选择
**主题**
- 11 种主题可通过视图 > 主题选择
- 活动主题立即应用并持久化到配置
- 所有颜色定义为 CSS 自定义属性 -- 完全适配主题,包括 IOC 高亮
- 带边框的胶囊式标签页,活动标签页带强调色
**数据库位置**
- 数据库位置可在设置时配置,并可随时从设置中更改
- 移动:使用 SHA-256 完整性验证和健壮的错误恢复安全地重定位数据库
- 指向:切换到不同的现有 dfnotes-go 数据库而不修改原始文件
**备份**
- 在可配置间隔上自动加密备份(默认 6 小时)
- 可配置目标路径、间隔和保留数量
- 上次备份时间戳和状态持久化在配置中
- 设置中有手动“立即备份”触发按钮
- 失败通知横幅持续显示,提供推迟和忽略选项
**导出**
- 将完整案例导出为 AES-256 加密的 7z 压缩包
- 独立的压缩包密码和原生保存位置对话框
- 压缩包包含案例元数据、加密数据库、Markdown 区块文件、IOC 摘要、时间线、链验证报告
- 导出操作记录在审计跟踪中
- Linux 上需要 `p7zip-full`
### v0.3.0 (2026-05-15) 发布
- 提交区块时自动检测 IOC(12 种类型)
- IOC 高亮显示及右键确认/误报工作流
- IOC 摘要标签页,支持混淆显示、过滤、排序、来源导航
- 时间线标签页,支持 ISO 8601 UTC 时间戳和可选第二时区显示
- 可搜索的时区下拉列表
### v0.2.0 发布
- 证据项注册和跟踪
- 证据状态生命周期和监管链日志记录
- 动态证据项标签页(E001、E002 等)
- 在 Markdown 中使用 [[E001]] 语法链接证据
- 标准和自定义标签系统
- 在笔记和证据上支持标签过滤
- 通过原生文件对话框附加图片
### v0.1.0 发布
- 使用 Ed25519 密钥对生成进行用户身份验证
- 可选 TOTP 多因素认证
- 案例创建,支持按案例密码和加密密钥派生
- Markdown 编辑器,带实时预览
- 区块提交工作流,带 SHA-256 哈希和 Ed25519 签名
- 按案例的全局哈希链
- 带已验证/未验证标识的篡改检测
- 审计日志
## 相关项目
- **4n6time-go** -- 取证时间线分析应用(相同技术栈)。计划未来集成,将 Plaso 分析的时间线事件推送到 dfnotes-go 案例笔记中。
- **ezt-go** -- Eric Zimmerman's EZ Tools 的图形界面封装。
标签:Go语言, IOC检测, React框架, Wails框架, Zenmap, 任务管理, 加密存储, 加密导出, 取证调查, 哈希链完整性, 指标检测, 数字取证, 数据完整性, 日志审计, 案例笔记, 用户指南, 程序破解, 网络安全, 自动化攻击, 自动化脚本, 自动备份, 证据管理, 调查工具, 跨平台桌面应用, 链式保管, 防御加固, 防篡改, 隐私保护