尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

HackBrowserData 贡献指南:基于 Go 1.20 与 Windows 7 兼容约束的完整协作开发手册

HackBrowserData 贡献指南:基于 Go 1.20 与 Windows 7 兼容约束的完整协作开发手册 网络安全应用安全密码学CLI【免费下载链接】HackBrowserDataExtract and decrypt browser data, supporting multiple data types, runnable on various operating systems (macOS, Windows, Linux).项目地址https://gitcode.com/gh_mirrors/ha/HackBrowserData点击查看免费下载本文是 HackBrowserData 开源仓库的官方贡献指南解读与实践手册核心围绕CONTRIBUTING.md展开并结合仓库中的 CI 流水线、构建脚本与源码实现系统讲解如何安全地参与 HackBrowserData 的贡献。读完本文你将掌握该项目的分支与 Issue 协作规范、Go 版本兼容红线Go 1.20 Windows 7、完整的本地开发验证命令链构建/测试/静态检查/格式化/拼写检查、Pull Request 与提交信息规范以及平台相关代码的 build tag 组织方式可以直接上手提交第一个高质量 PR。一、贡献流程总览从main分支到 Issue-First 协作HackBrowserData 是一个用 Go 编写的浏览器数据解密导出工具支持 Chromium 系浏览器与 Firefox并可在 macOS、Windows、Linux 上运行。参与贡献前请先阅读仓库根目录的README.md了解项目全貌而CONTRIBUTING.md则是贡献者必须遵守的行为准则。贡献流程有两条硬性要求始终基于main分支开展开发。所有功能分支、修复分支都应从main检出保证你的工作基于最新的主干代码避免合并冲突与历史分叉。Pull Request 必须对应 Issue。在创建 PR 之前请先确认你的改动是否已有关联 Issue如果没有请先创建一个 Issue 说明问题或需求再围绕它开展编码。这一先讨论、后编码的流程能避免重复劳动也让维护者与社区能够提前对齐方向。从仓库的 CI 配置看main分支同时承载着测试与发布两条流水线详见.github/workflows/test.yml与.github/workflows/release.yml因此任何未经讨论就向main提交的改动都会直接触发全平台验证与潜在发布流程Issue-First 的必要性由此体现。二、Go 版本约束Go 1.20 红线与 Windows 7 兼容这是本项目贡献规范中最重要的一条技术红线项目必须使用 Go 1.20 构建以维持对 Windows 7 的支持。该约束由 CI 强制执行。具体而言贡献者需要注意以下三点禁用 Go 1.21 的新特性例如log/slog、slices、maps、cmp等标准库包一律不得使用。不得提升go.mod中的go指令版本即go.mod中的go指令必须保持go 1.20不得升级。依赖版本锁定modernc.org/sqlite被固定锁定在v1.31.1因为v1.32版本开始要求 Go 1.21。这是一个纯 Go 的 SQLite 实现被项目用于读取浏览器数据库文件如历史记录、Cookie 存储它的升级必须与 Go 版本约束同步评估。这些约束在仓库中都有明确证据。查看go.mod可确认go 1.20指令与modernc.org/sqlite v1.31.1的锁定版本。更关键的是CI 流水线对该约束进行了硬性校验在.github/workflows/lint.yml中CI 会直接解析go.mod中的go指令并与1.20比对不一致即报错并退出GO_VERSION$(grep ^go go.mod | awk {print $2}) if [ $GO_VERSION ! 1.20 ]; then echo ::error::go.mod directive must remain go 1.20 (Windows 7 support requirement) exit 1 fi同样.golangci.yml 中run.go: 1.20的设置也明确标注Compatible with Go 1.20并附带了原因说明copyloopvar、intrange、modernize、perfsprint等检查器依赖 Go 1.22需在版本约束解除后才能启用。这意味着你的代码不应使用任何需要 Go 1.21 才能编译或通过检查的语法与 API本地开发时建议直接使用 Go 1.20 工具链进行验证避免本地能过、CI 必挂的尴尬若确有引入新依赖的需求务必检查该依赖及其传递依赖对 Go 版本的最低要求modernc.org/sqlite正是这样一个先例。这一约束背后的业务动机是 Windows 7 兼容性HackBrowserData 作为跨平台工具Windows 构建路径见Makefile中的build-windows目标必须覆盖仍在使用 Windows 7 的用户场景而 Go 1.21 起官方不再支持 Windows 7 作为目标系统。理解了这一层因果你在审查依赖与语法时就会更有判断力。三、本地开发命令链构建、测试、静态检查、格式化与拼写检查CONTRIBUTING.md 给出了完整的本地开发命令集下面逐条结合仓库实现进行解读保证你可以直接复制运行。3.1 构建go build ./cmd/hack-browser-data/入口位于 cmd/hack-browser-data/main.go基于 cobra 命令框架组织。构建产物为hack-browser-data可执行文件默认无子命令即执行dump行为。除了这条命令仓库还提供了更便捷的构建入口在仓库根目录执行make build即可等价构建见Makefile。针对 Windows还提供了一键交叉构建脚本make build-windows该目标会设置GOOSwindows、GOARCHamd64、CGO_ENABLED0并以-tags abe_embed、-trimpath、-ldflags-s -w参数产出.exe文件见Makefile。其中abe_embed标签与 Windows 平台的数据解密能力AES 相关系统调用注入有关对应 crypto/windows/payload/embed_windows.go 等文件。如果你修改了 Windows 相关代码请务必用此命令验证构建通过。3.2 测试go test ./...该命令运行全仓库测试。从 CI 配置.github/workflows/test.yml看测试会在ubuntu-latest、macos-latest、windows-latest三个平台矩阵上分别执行且非 Windows 平台会额外生成覆盖率报告并上传go test -v -coverprofilecoverage.out ./...因此本地至少应保证go test ./...全绿。仓库的测试非常完整例如 browser/chromium/decrypt_test.go 覆盖 Chromium 数据解密browser/firefox/extract_cookie_test.go 覆盖 Firefox Cookie 提取browser/archive_test.go 覆盖归档导出。新增功能时参考这些测试文件编写对应的单元测试即可。3.3 静态检查Lintgolangci-lint run注意该命令要求 golangci-lint v2。仓库在 .golangci.yml 中声明了version: 2并启用了多达数十个检查器大致可分为几类默认必备errcheck、govet、staticcheck、ineffassign、unusedBug 检测errorlint、gosec、sqlclosecheck、nilerr、bodyclose、durationcheck、errchkjson、exhaustive、forcetypeassert代码质量depguard、dupl、goconst、gocritic、misspell、revive、unparam、whitespace等复杂度控制gocognit最小复杂度 30、nestif最小复杂度 5。其中depguard明确禁用了github.com/pkg/errors、io/ioutil等包gosec针对本项目的特殊性做了大量豁免如 SHA1/DES 弱加密用于浏览器数据解密、exec.Command用于 macOSsecurity命令等详见配置文件中的excludes段。CI 使用 golangci-lint v2.10见.github/workflows/lint.yml建议本地安装同版本以保证结果一致。3.4 格式化gofumpt -l -w . goimports -w -local github.com/moond4rk/hackbrowserdata .两条命令分工明确gofumpt是比go fmt更严格的格式化工具仓库在.golangci.yml中将其作为 formatter 启用并开启了extra-rulesgoimports负责整理 import 分组-local参数把项目自身的包github.com/moond4rk/hackbrowserdata与第三方包分区排列。.golangci.yml的formatters.settings.goimports.local-prefixes与之对应。3.5 拼写检查typos项目使用typos工具做拼写检查配置在.typos.toml中对部分技术性词汇如Readed、Sie、Encrypter等做了白名单豁免并排除了go.mod、go.sum。CI 中该检查仅在 ubuntu 平台执行见.github/workflows/lint.yml。四、CI 流水线三平台矩阵与版本约束如何落地理解了本地命令后再看 CI 如何把这些命令串成自动化防线这能帮你预判 PR 会经历哪些检查。.github/workflows/test.yml 定义了测试流水线触发时机对main分支的 push、所有 PR、手动触发workflow_dispatch三平台矩阵ubuntu-latest、macos-latest、windows-latest覆盖项目宣称支持的全部操作系统使用go-version-file: go.mod自动读取 Go 版本——这再次印证了go.mod中go 1.20指令的地位它直接决定 CI 使用的工具链版本Windows 平台只跑测试非 Windows 平台额外产出覆盖率并上传 codecov。.github/workflows/lint.yml 定义了静态检查流水线同样三平台跑 golangci-lint v2.10在 ubuntu 平台额外执行go.mod版本硬校验第二节所述与typos拼写检查。也就是说一个 PR 至少会经过Go 版本约束校验 → 拼写检查 → 三平台 lint → 三平台单元测试。任何一环不过都无法合并。本地尽量把第三节的命令全部跑一遍能大幅缩短 CI 反馈周期。五、Pull Request 规范如何写出可被高效评审的 PR当代码完成、本地验证通过后创建 PR 时请遵循以下指南来自CONTRIBUTING.md关联 Issue在 PR 描述中链接对应的 Issue让评审者快速了解背景与动机提供上下文PR 描述中说明改动的背景与原因帮助评审者理解为什么这么改附上前后对比示例如果改动涉及输出、行为或界面变化尽量给出before/after示例说明功能测试步骤或复现步骤让评审者可以按步骤验证功能正确性新功能必须包含单元测试这是硬性要求也是项目代码质量的重要保障。从仓库测试布局如 browser/chromium/extract_password_test.go、browser/chromium/extract_cookie_test.go 等可以看出几乎每个提取模块都有配套测试新增功能遵循同样的实现 测试结对模式是默认期望。六、Commit Message 规范Conventional Commits 格式项目要求提交信息遵循Conventional Commits约定式提交格式CONTRIBUTING.md 给出的示例feat: add support for new browser fix: resolve cookie decryption on Windows chore: update dependencies docs: improve RFC documentation refactor: simplify profile discovery logic test: add extraction tests for Firefox对应的类型语义如下类型含义在仓库中的典型场景feat新功能新增浏览器支持如browser/safari、browser/firefox等模块fix缺陷修复修复某平台上的解密问题如 Windows 下 Cookie 解密chore杂项维护依赖升级、CI 调整等docs文档改进 RFC 设计文档仓库rfcs/目录refactor重构调整配置发现逻辑等非行为性改动test测试为 Firefox 等添加提取测试这种统一格式让git log清晰可读也为自动生成 changelog、触发 CI 类型化检查提供了基础。注意示例中 docs: improve RFC documentation 对应的是仓库中真实的 rfcs/ 目录——HackBrowserData 用 RFC 文档沉淀架构决策详见第八节涉及架构性改动时应同步更新对应 RFC。七、代码风格build tag 平台隔离与命名规范CONTRIBUTING.md 的代码风格要求中平台代码必须使用 build tag如_darwin.go、_windows.go、_linux.go后缀文件这在源码中得到了充分体现浏览器列表按平台隔离browser/browser_darwin.go//go:build darwin、browser/browser_linux.go、browser/browser_windows.go解密逻辑按平台隔离crypto/crypto_darwin.go、crypto/crypto_linux.go、crypto/crypto_windows.go主程序入口按平台隔离cmd/hack-browser-data/main_others.go 与 cmd/hack-browser-data/main_windows.go后者承载 Windows 特有的双击模式配置configureDoubleClickMode文件复制逻辑按平台隔离filemanager/copy_other.go 与 filemanager/copy_windows.go。因此当你贡献涉及平台差异的功能例如新增某平台专用的密钥提取机制时应当遵循同样的模式新建带_darwin.go/_windows.go/_linux.go后缀的文件并在文件头部写//go:build指令而不是在单个文件里堆叠runtime.GOOS分支。其余风格要求还包括命名遵循 Go 官方约定驼峰、导出标识符首字母大写、包名小写等架构性改动参考rfcs/设计文档见下节。八、错误处理与测试规范8.1 错误处理必须使用%w包装错误处理规范的核心是使用fmt.Errorf(context: %w, err)包装错误除非是刻意的尽力而为式清理如Close/Remove否则不得忽略错误。这与 .golangci.yml 中启用的errorlint、errcheck检查器相互呼应errcheck会拦截被忽略的错误返回值.golangci.yml中已对os.Remove、(*database/sql.DB).Close等清理类调用做了豁免errorlint则检查错误包装是否符合%w规范。此外depguard禁止了github.com/pkg/errors要求统一使用标准库fmt.Errorf或errors。8.2 测试规范使用t.TempDir()文件系统相关测试必须使用t.TempDir()它由 Go 标准库自动创建临时目录并在测试结束时清理。仓库测试中随处可见这一实践browser/archive_test.go用t.TempDir()构造归档源目录、目标 zip 路径与解压目录browser/browser_test.go用t.TempDir()构造浏览器配置目录树。此外测试文件命名遵循_test.go约定.golangci.yml对测试文件做了专项豁免如dupl、funlen、gosec、errcheck等说明测试代码可以适当放宽部分严格检查但功能正确性依然是第一位的。九、架构设计文档RFC 体系CONTRIBUTING.md 指出架构设计参见rfcs/。仓库的 rfcs/ 目录是项目的设计中枢共包含 13 篇 RFC 文档与贡献工作直接相关001-project-architecture.md项目整体架构002-chromium-data-storage.md、003-chromium-encryption.mdChromium 系浏览器的数据存储与加密方案004-firefox-data-storage.md、005-firefox-encryption.mdFirefox 的数据存储与加密方案006-key-retrieval-mechanisms.md密钥提取机制007-cli-and-output-design.mdCLI 与输出设计008-file-acquisition-and-platform-quirks.md文件获取与平台差异009-windows-locked-file-bypass.mdWindows 锁定文件绕过010-chrome-abe-integration.mdWindows 下 Chrome 数据解密集成011-safari-data-storage.mdSafari 数据存储012-yandex-decryption.mdYandex 解密013-cli-redesign-cross-host.md跨主机 CLI 重设计。在提交涉及架构、新浏览器支持或平台机制的 PR 之前阅读相关 RFC 能让你快速理解设计约束如果改动改变了既有设计应同步更新或补充 RFC 文档对应提交类型docs。十、遇到问题怎么办提问渠道与最终建议如果对贡献流程、代码约束有任何疑问可以在 Issue 或 PR 中直接提问也可以联系维护者CONTRIBUTING.md 中提供的维护者邮箱memoond4rk.com。最后把整个贡献流程压缩成一份自检清单供你提交 PR 前逐项核对功能分支是否基于最新的main检出是否已有对应 IssuePR 是否已链接它是否使用了 Go 1.21 特性go.mod的go指令是否仍是1.20新增依赖是否兼容 Go 1.20特别注意 SQLite 等底层库的版本go build ./cmd/hack-browser-data/、go test ./...、golangci-lint run、gofumpt -l -w .、goimports -w -local github.com/moond4rk/hackbrowserdata .、typos是否全部通过平台相关代码是否使用了正确的 build tag 后缀文件错误是否用fmt.Errorf(context: %w, err)包装清理类错误是否按规范豁免处理文件系统测试是否使用了t.TempDir()新功能是否附带单元测试Commit message 是否符合 Conventional Commits 格式逐项通过这份清单你的贡献将同时满足社区协作规范与 CI 的技术约束为 HackBrowserData 的跨平台能力持续添砖加瓦。赞分享网络安全应用安全密码学CLI【免费下载链接】HackBrowserDataExtract and decrypt browser data, supporting multiple data types, runnable on various operating systems (macOS, Windows, Linux).项目地址https://gitcode.com/gh_mirrors/ha/HackBrowserData点击查看免费下载相关推荐Floci 仓库 AI 编码 Agent 开发指南架构约束、AWS 协议兼容与贡献规范Floci 仓库 AI 编码 Agent 开发指南架构约束、AWS 协议兼容与贡献规范 本篇技术指南以 Floci 仓库根目录的 AGENTS.md httpRadium 贡献指南从开发测试到架构解析的完整协作手册Radium 贡献指南从开发测试到架构解析的完整协作手册 本文以 RadiumReact 组件内联样式工具链仓库的 CONTRIBUTING.md httUI组件前端tablecn 贡献指南Data Table 与 Data Grid 双架构协作开发的完整实战手册tablecn 贡献指南Data Table 与 Data Grid 双架构协作开发的完整实战手册 tablecn 是一个基于 shadcn/ui 构建的 R前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表