一款为CTF选手设计的浏览器扩展,快速生成标准化的WriteUp模板并一键保存至Obsidian知识库。
- 多平台支持 - 支持NSSCTF、CTF Show、BUUOJ等主流CTF平台
- 智能信息提取 - 自动提取题目名称、难度、分类、分值等信息
- 多模板系统 - 提供标准、详细、简洁三种模板,支持自定义
- 深度Obsidian集成 - 一键创建Markdown文件并跳转至Obsidian编辑
- 快捷键支持 - Ctrl+Shift+W 生成WriteUp,Ctrl+Shift+S 打开设置,Ctrl+Shift+R 重置位置
- 可视化设置 - 右键点击按钮打开设置面板,无需手动编辑配置文件
- 自定义模板 - 支持创建和编辑自定义WriteUp模板
- 拖拽移动 - 按钮支持鼠标和触摸拖拽,位置自动保存
- 实时反馈 - 处理状态提示和成功/错误通知
- 响应式设计 - 适配桌面和移动端界面
- SPA兼容 - 适配单页应用动态加载场景
- 模块化架构 - 清晰的代码结构,易于维护和扩展
- 配置持久化 - 用户设置自动保存到本地存储
- 错误处理 - 完善的异常处理和用户提示
- 性能优化 - 智能DOM监听,减少资源消耗
- 克隆本仓库到本地
- 访问
chrome://extensions/
- 开启右上角 开发者模式
- 点击 加载已解压的扩展程序,选择仓库目录
npm install -g web-ext
web-ext build
# 生成的ZIP文件可在about:debugging加载
- 访问支持的CTF平台题目页面(NSSCTF、CTF Show、BUUOJ等)
- 点击页面悬浮按钮或使用快捷键
Ctrl+Shift+W
- 自动生成包含以下内容的Obsidian笔记:
- 可视化配置:右键点击按钮或使用
Ctrl+Shift+S
打开设置面板 - 基本设置:修改Vault名称、文件路径、按钮文本等
- 模板管理:选择预设模板或创建自定义模板
- 模板编辑器:内置代码编辑器,支持语法高亮和变量提示
- 设置导入导出:支持配置文件的备份和恢复
- 一键重置:快速恢复到默认设置
- 智能识别:轻点生成WriteUp,按住拖拽移动位置(移动距离>8px才触发拖拽)
- 移动按钮:鼠标悬停显示抓手光标,按住拖拽可移动按钮位置
- 触摸支持:移动设备支持触摸拖拽操作
- 位置记忆:拖拽后的位置自动保存,页面刷新后恢复
- 边界限制:按钮不会被拖拽到屏幕外,窗口大小变化时自动调整
- 重置位置:使用快捷键
Ctrl+Shift+R
重置到默认位置 - 视觉反馈:拖拽时半透明效果,释放时弹跳动画
## 基本信息
- **题目名称**:Web-SQLi-示例题目
- **题目链接**:https://www.nssctf.cn/problem/1234
- **创建时间**:2024-01-15 14:30:25
- **考点清单**:
## 解题思路
## 过程和结果记录
## 总结
## 相关知识点
---
*Generated by Obsidian WriteUp Helper*
- NSSCTF (www.nssctf.cn) - 完整支持
- CTF Show (ctf.show) - 完整支持
- BUUOJ (buuoj.cn) - 完整支持
- 更多平台持续添加中...
插件提供四种模板选项:
- 标准模板 (
standard
) - 平衡的信息结构 - 详细模板 (
detailed
) - 包含表格和更多字段 - 简洁模板 (
simple
) - 最小化信息 - 自定义模板 (
custom
) - 用户自定义内容
右键点击按钮或使用 Ctrl+Shift+S
打开设置面板:
- 基本设置:修改Vault名称、文件路径、按钮文本
- 模板选择:选择预设模板或自定义模板
- 模板编辑:在内置编辑器中编辑自定义模板
- 导入导出:备份和恢复所有设置
- 重置功能:一键恢复默认配置
// 修改默认模板
writeUpHelper.saveConfig({ template: 'custom', customTemplate: '自定义内容' });
// 修改vault名称
writeUpHelper.saveConfig({ vault: 'my-notes' });
// 修改文件路径
writeUpHelper.saveConfig({ basePath: 'CTF/WriteUps' });
支持的模板变量:
{{title}}
- 格式化后的标题{{url}}
- 当前页面URL{{date}}
- 创建日期 (YYYY-MM-DD){{time}}
- 创建时间 (HH:MM:SS)
编辑 styles.css
可自定义界面:
/* 修改按钮样式 */
.writeup-helper-btn {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
top: 60px; /* 调整位置 */
}
/* 修改通知样式 */
.writeup-notification-success {
background-color: #8b5cf6;
}
.
├── content.js # 核心功能脚本
├── config.js # 平台配置和模板定义
├── manifest.json # 扩展配置文件
├── styles.css # 样式表
├── icon*.png # 扩展图标
└── README.md # 项目文档
- 克隆项目
git clone https://github.com/tabtac/Obsidian-WriteUp-Helper.git
cd Obsidian-WriteUp-Helper
-
加载扩展
- Chrome: 访问
chrome://extensions/
,开启开发者模式,加载已解压的扩展程序 - Firefox: 访问
about:debugging
,加载临时附加组件
- Chrome: 访问
-
实时开发
- Chrome: 使用 Extension Reloader
- Firefox:
web-ext run --start-url https://www.nssctf.cn
- 在
config.js
中添加平台配置 - 定义选择器和标题处理器
- 测试信息提取功能
- 使用 JSDoc 注释
- 遵循 ES6+ 语法
- 保持代码模块化
- 确保Obsidian已安装并配置vault(默认名称"note")
- 支持自定义vault名称和文件路径
- 文件名会自动处理特殊字符以确保跨平台兼容性
- 建议在使用前测试Obsidian URI协议是否正常工作
- 检查是否在支持的网站上(NSSCTF、CTF Show、BUUOJ)
- 等待几秒钟,按钮会自动恢复(定期检查机制)
- 切换到其他标签页再回来,触发焦点恢复
- 刷新页面重试
- 检查浏览器控制台是否有错误信息
- 确保不是在处理状态下拖拽
- 检查是否有其他扩展冲突
- 尝试重置按钮位置(Ctrl+Shift+R)
- 检查浏览器缩放比例是否正常
- 尝试使用快捷键打开(Ctrl+Shift+S)
- 清除浏览器缓存重试
- 确保Obsidian已安装并运行
- 检查vault名称是否正确
- 测试Obsidian URI协议:
obsidian://open
插件内置了调试工具,可以帮助诊断问题:
// 在浏览器控制台中运行
writeUpDebugger.enable(); // 启用调试模式
writeUpDebugger.runDiagnostics(); // 运行诊断
writeUpDebugger.exportLogs(); // 导出调试日志
如果遇到严重问题,可以完全重置插件:
// 在浏览器控制台中运行
localStorage.removeItem('writeup-helper-config');
localStorage.removeItem('writeup-helper-button-position');
location.reload();
- ✨ 新增多平台支持(NSSCTF、CTF Show、BUUOJ)
- ✨ 新增多模板系统(标准、详细、简洁、自定义)
- ✨ 新增可视化设置面板和模板编辑器
- ✨ 新增按钮拖拽移动功能和位置记忆
- ✨ 新增设置导入导出和一键重置功能
- ✨ 新增快捷键支持 (Ctrl+Shift+W/S/R)
- ✨ 新增触摸设备拖拽支持
- ✨ 新增实时通知系统和状态反馈
- ✨ 新增调试工具和错误诊断功能
- 🎨 全新现代化UI设计和动画效果
- 🎨 响应式布局,完美适配移动端
- 🔧 完全重构代码架构,模块化设计
- 🔧 优化事件处理和性能,防止内存泄漏
- 🔧 增强错误处理和配置验证
- 🔧 添加资源清理和生命周期管理
- 🐛 修复SPA路由变化检测问题
- 🐛 修复拖拽时误触发点击的问题
- 🐛 修复设置面板显示和布局问题
- 🐛 修复事件监听器内存泄漏问题
- 🐛 修复生成WriteUp后按钮消失的问题
- 🐛 修复模板变量中$符号被误处理的问题
- 🐛 修复URI过长导致Obsidian打开失败的问题
- 🐛 修复高频DOM变更导致的性能问题
- 🐛 修复事件监听器键冲突问题
- 🐛 修复点击一次按钮创建多个文件的问题
- 🐛 修复标题解析问题
- 🎨 优化按钮样式
GPL-3.0 License © 2025 tabtac
感谢所有为项目贡献代码和建议的开发者!