资讯详情

HackBrowserData 仓库开发指南:Go 1.20 构建、Chrome ABE 载荷与代码规范全解析

📅 2026/10/4 1:26:03 | 华诺云谱 👁 阅读
HackBrowserData 仓库开发指南:Go 1.20 构建、Chrome ABE 载荷与代码规范全解析
网络安全应用安全密码学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 仓库根目录的 CLAUDE.md 为骨架系统梳理这个跨平台浏览器数据提取与解密 CLI 工具基于 Chromium 系浏览器与 FirefoxmacOS 额外支持 Safari的开发环境、构建命令、Windows 端 Chrome App-Bound EncryptionABE载荷集成方案以及贯穿全仓的代码约定与依赖约束。读完本文你将掌握如何在本仓库中用 Go 1.20 完成单平台与交叉编译、运行测试与 lint、构建带 ABE 载荷的 Windows 二进制并理解make payload/make build-windows/-tags abe_embed的底层机制以及为何仓库在依赖选择上有诸多刻意为之的钉版。安全声明本项目仅用于安全研究与防御性用途禁止生成可用于未授权访问的代码。所有安全研究必须在法律边界内以合乎道德的方式进行见 CLAUDE.md。一、项目概览CLI 工具与纯 Go 按平台裁剪的总体设计HackBrowserData 是一个命令行安全研究工具用于在 Windows、macOS、Linux 上提取并解密浏览器数据。从 README.md 可知它支持导出密码、历史记录、Cookie、书签、信用卡、下载记录、localStorage、sessionStorage 与扩展数据且支持 Chromium 系浏览器、Firefox三平台与 SafarimacOS同时支持跨主机解密在原始主机导出主密钥在任意分析师主机上离线解密数据副本。从源码结构看browser/browser.go 定义了核心抽象Browser接口BrowserName/UserDataDir/Profiles/Extract/CountEntries并按引擎拆分为browser/chromium、browser/firefox、browser/safari三个子包CLI 入口位于 cmd/hack-browser-data/main.go基于 cobra 实现未指定子命令时默认执行dump。CLAUDE.md 对仓库的关键约束做了三条顶层说明安全边界仅供安全研究与防御用途禁止生成用于未授权访问的代码。Go 版本钉版必须使用 Go 1.20 构建以保留 Windows 7 支持不得使用 Go 1.21 的新特性如log/slog、slices、maps、cmp包。架构定位CLI 直接调用browser.DiscoverBrowsersWithKeys()不提供根级库 API详见下文关键约束。二、Go 1.20 钉版为什么必须守住这条底线CLAUDE.md 在 Project Overview 中强调必须用 Go 1.20 构建以支持 Windows 7Go 1.21 的特性log/slog、slices、maps、cmp一律不得使用。这一约束在仓库中有多处可验证的佐证go.mod 首行即声明go 1.20。.golangci.yml 明确注释copyloopvar、intrange、modernize、perfsprint等 lint 检查依赖 Go 1.22需在 Go 版本约束解除后再启用。依赖钉版见 CLAUDE.md 的 Key Constraintsmodernc.org/sqlite被钉在v1.31.1因为 v1.32 要求 Go 1.21golang.org/x/text计划在后续重构中移除改用 3 字节 UTF-8 BOM目前仍以 indirect 依赖形式存在于 go.mod。因此任何涉及模块操作go mod tidy、go mod verify或新增依赖的改动都必须确保不把go指令顶到 1.21。CLAUDE.md 给出的做法是在 macOS 上显式切换到 go1.20 环境export GOROOT$(brew --prefix go1.20)/libexec export PATH$GOROOT/bin:$PATH go mod tidy go mod verify三、开发命令全解析构建、交叉编译、测试、lint、格式化与拼写CLAUDE.md 将日常开发命令集中列为 Development Commands以下逐条展开并结合 Makefile 与源码说明其行为。3.1 构建与交叉编译# 构建当前平台二进制模块操作请使用 go1.20 go build ./cmd/hack-browser-data/ # 交叉编译 GOOSwindows GOARCHamd64 go build ./cmd/hack-browser-data/ GOOSlinux GOARCHamd64 go build ./cmd/hack-browser-data/与 README 的 Building from source 一致普通构建无需特殊工具链。cmd/hack-browser-data包内按平台拆分入口main_windows.go 与 main_others.go通过构建标签选择负责configureDoubleClickMode()等平台差异化逻辑。仓库同时提供 Makefile 封装build: $(GO) build -o $(GOEXE) ./cmd/hack-browser-data build-windows: GOOSwindows GOARCHamd64 CGO_ENABLED0 -tags abe_embed ... clean: payload-clean 删除 $(GOEXE) $(GOEXE).exe其中make build-windows是唯一会内嵌 ABE 载荷的 Windows 构建路径详见第五节。3.2 测试go test ./... go test -v ./... -covermodecount -coverprofilecoverage.out仓库的测试覆盖三个引擎chromium / firefox / safari的每个数据类别提取器例如 browser/chromium/extract_cookie_test.go、browser/firefox/extract_password_test.go、browser/safari/profile_test.go以及解密管线专项测试 browser/chromium/decrypt_v20_test.goABE v20。测试规范见 .golangci.yml测试文件豁免dupl、funlen、gosec、errcheck、lll、goconst等过严检查。CLAUDE.md 的 Code Conventions 对测试写法有两条硬性约定文件系统相关测试一律使用t.TempDir()避免手工建目录/清理数据库相关测试使用go-sqlmock避免依赖真实 SQLite 文件。3.3 Lint、格式化与拼写# Lint要求 golangci-lint v2 golangci-lint run # 格式化gofumpt 比 gofmt 更严格 gofumpt -l -w . goimports -w -local github.com/moond4rk/hackbrowserdata . # 拼写检查 typos.golangci.yml 声明version: 2并指定run.go: 1.20。启用 linter 覆盖五个层次默认必备errcheck、govet、staticcheck、ineffassign、unusedBug 检测errorlint、gosec、sqlclosecheck、nilerr、bodyclose、durationcheck、errchkjson、exhaustive、forcetypeassert代码质量revive、gocritic、goconst、misspell、testifylint、whitespace等复杂度gocognitmin-complexity 30、nestifmin-complexity 5格式器formattersgofumpt开启 extra-rulesgoimportslocal-prefixes 指向github.com/moond4rk/hackbrowserdata。其中gosec的排除项.golangci.yml本身就是解密原理的侧写G401SHA1用于 Chromium PBKDF2 密钥派生、G405/G502DES/3DES用于 Firefox 解密、G501md5保持禁用而 G204 是 macOS 调用security命令所需。格式规范同时约束注释宽度注释按 140 列换行与.golangci.yml中lll.line-length: 140.golangci.yml保持一致。拼写检查由 .typos.toml 配置其中extend-exclude排除了go.mod、go.sum并允许Readed、Sie、Encrypter等工具误报词。四、Chrome ABE Payload仅 Windows背景、架构与构建这是 CLAUDE.md 篇幅最重、也最能体现仓库技术深度的部分。以下结合 RFC-010 与其源码展开。4.1 背景Chrome 127 的 App-Bound EncryptionChrome 127 在 Windows 上引入了 App-Bound EncryptionABE用于解密 v10 时代 Cookie/密码的Local State密钥不再是用户绑定的 DPAPI blob而是应用绑定的 blob——只有合法的chrome.exe/msedge.exe/brave.exe进程才能通过elevation_service的 COM RPCIElevator::DecryptData解开见 RFC-010。关键约束是elevation_service会校验调用方——调用进程的主可执行文件必须是位于Program Files且由浏览器厂商签名的合法浏览器二进制。因此发起 COM 调用的代码必须运行在chrome.exe/msedge.exe/brave.exe进程内部普通的 Go 进程即使提权也会被拒绝RFC-010。4.2 架构反射式注入 自研 C 载荷RFC-010 给出了端到端流程RFC-010Go 侧在browser/chromium.Extract()中通过masterkey.Retrievers选择密钥检索器V10用DPAPIRetrieverV20用ABERetriever后者读取Local State提取APPB前缀 blob并经注册表 App Paths 解析浏览器 exe 路径。读取内嵌载荷abe_extractor_amd64.bin约 75 KB通过//go:embed打入准备远程 Bootstrap 参数块与 5 个函数指针并经debug/pe查找Bootstrap的原始文件偏移非 RVA。CreateProcessW(browser.exe, CREATE_SUSPENDED)以挂起方式拉起浏览器进程依次执行VirtualAllocExRW 写载荷、WriteProcessMemory、VirtualProtectEx改为 RX、FlushInstructionCache、再分配 Scratch 与参数内存最后CreateRemoteThread在载荷的 Bootstrap 偏移处启动远程线程。浏览器主线程永不恢复因此不会创建任何 Chromium UI也无需--user-data-dir隔离来绕过ProcessSingleton。远程线程在浏览器进程内运行自研的反射式 DLL 加载器C 编写的Bootstrap调用载荷DllMain最终拿到 32 字节主密钥交还 Go 侧其余 v20 AES-GCM 解密、SQLite 遍历、JSON 输出全部由 Go 完成。CLAUDE.md 特别强调crypto/windows/abe_native/下的 C 源码全部为第一方代码无 vendored CRFC-010 第 9.2 节解释了为何否决了 Stephen Fewer 的反射加载器RFC 中对比为自研 C 约 280 行 vs Fewer 2012 版 vendored C 约 500 行见 RFC-010。4.3 构建命令与-tags abe_embed机制make payload # 构建 DLL需要 zigbrew install zig make build-windows # 交叉编译 hack-browser-data.exe 并内嵌载荷 make gen-layout # 依据 bootstrap_layout.h 重新生成 Go 布局常量 make payload-clean # 清理 crypto/*.bin其实现细节可分别追溯到 crypto/windows/abe_native/Makefile.frag构建产物、flag 与gen-layout两步式 cgo -godefs 流程与 Makefilebuild-windows导出GOOSwindows GOARCHamd64 CGO_ENABLED0并以-tags abe_embed -trimpath -ldflags-s -w构建。构建标签双文件机制CLAUDE.md 明确提到的//go:embed切换点位于crypto/windows/payload/embed_windows.go构建标签为windows abe_embed通过//go:embed abe_extractor_amd64.bin内嵌真实载荷Get(arch)目前仅支持amd64stub_windows.go构建标签为windows !abe_embedGet直接返回错误abe: payload not embedded in this build (rebuild with -tags abe_embed; arch...)。这意味着默认go build链接的是桩实现当真正需要 ABE 时会在运行时快速失败并给出明确提示——不涉及 Windows ABE 的贡献者完全不需要安装 zig见 CLAUDE.md。只有make build-windows或手动加-tags abe_embed才会产出具备 Chromium 127 ABE Cookie 完整解密能力的hack-browser-data.exe与 README.md 的 Windows ABE 构建说明一致。make gen-layout的目的在于保持 C 头文件 bootstrap_layout.h 与 Go 布局常量crypto/windows/abe_native/bootstrap/下的layout.go、layout_gen.go的单一事实来源同步它用CCzig cc go tool cgo -godefs生成临时文件、gofmt 后发布先写临时文件再格式化避免 cgo 失败时通过空 stdin 静默产出空文件见 Makefile.fragmake gen-layout-verify则用git diff --exit-code校验布局未过期。4.4 兼容性契约RFC-010 第 1.1 节给出契约表RFC-010可概括为组件契约Go 工具链1.20钉版Go 1.21 放弃 Windows 7Windows 宿主Win10 1909PE 加载器 UCRTChrome 系浏览器v127ABE 引入版本zig 工具链0.13make payload使用实际调用zig cc目标架构仅 x86_64x86 / ARM64 为未来工作五、代码规范Code ConventionsCLAUDE.md 用一节列出全仓统一的编码约定逐条落地如下平台代码用构建标签隔离_darwin.go、_windows.go、_linux.go后缀。可验证于 browser/browser_darwin.go、crypto/crypto_windows.go//go:build windowsDPAPI 解密委托给utils/winapi以复用同一处 Crypt32.dll syscall 声明等文件。C 载荷为第一方代码crypto/windows/abe_native/全部自研不引入 vendored C。错误处理一律fmt.Errorf(context: %w, err)包裹绝不使用_ 吞掉错误.golangci.yml的errorlint与errcheck含check-type-assertions: true就是这套约定的强制执行器。日志分级log.Debugf用于记录级诊断log.Infof用于面向用户的状态输出log.Warnf用于意外但可预期的情况提取方法应返回错误而不是在方法内打日志。日志实现见 log/logger.goDebug 级附带文件:行号其余级别输出[DBG]/[INF]/[WRN]/[ERR]/[FTL]标签级别定义见 log/level.go。CLI 侧--verbose通过log.SetVerbose()打开 Debug 输出cmd/hack-browser-data/main.go。命名遵循 Go 惯例如Config而非BrowserConfig、Extract而非BrowsingData。注释宽度140 列换行与lll.line-length一致。测试文件系统测试用t.TempDir()数据库测试用go-sqlmock。架构文档设计决策集中存放于rfcs/仓库现有 13 份 RFC覆盖项目架构、Chromium/Firefox/Safari 数据存储与加解密、密钥检索机制、CLI 与输出设计、Windows 锁定文件绕过、ABE 集成、跨主机 CLI 重设计等主题。一个值得注意的实践macOS 的 keychain 密码处理遵循惰性解析 优雅降级——browser/browser_darwin.go 中resolveKeychainPassword优先用--keychain-pw旗标否则仅在 stdin 为 TTY 时提示输入并先经keychainbreaker.TryUnlock验证任何失败都回退为仅导出元数据并打Warnf绝不携带已知错误的凭据继续解密。六、关键约束Key Constraints汇总CLAUDE.md 结尾的 Key Constraints 是对仓库边界的高度浓缩也是贡献者最容易踩坑之处modernc.org/sqlite钉在 v1.31.1v1.32 要求 Go 1.21升级会破坏 Go 1.20 契约go.mod 可验证当前版本。golang.org/x/text将在重构中移除改用 3 字节 UTF-8 BOM当前仍以 indirect 依赖存在见 go.mod。不采用pkg/internal/目录结构保持扁平简单browser/、crypto/、cmd/、log/、masterkey/、output/、types/、utils/平铺在根下。不提供根级库 APICLI 直接调用browser.DiscoverBrowsersWithKeys()browser/browser.go该函数在DiscoverBrowsers之上注入各平台凭据macOS keychain 密码、Chromium 密钥检索器使返回的 Browser 实例可直接执行Extract元数据类命令如list则用不注入凭据的DiscoverBrowsers以避免 macOS 弹密码提示。七、如何在仓库中进行一次合规的改动端到端工作流综合以上各节一个遵循仓库纪律的改动流程是确认环境 Go 版本为 1.20必要时按第二节的方式切换 GOROOT不引入 Go 1.21 特性不动go.mod的go指令与modernc.org/sqlite版本。按平台拆分代码平台相关实现放_windows.go/_darwin.go/_linux.go使用构建标签仅 Windows ABE 相关改动需关注crypto/windows/abe_native/与make gen-layout。编码时遵循第五节约定错误必须%w包裹、日志按 DBG/INF/WRN/ERR 分级、注释 140 列、命名用Config/Extract风格。提交前依次执行gofumpt -l -w .、goimports -w -local github.com/moond4rk/hackbrowserdata .、golangci-lint run、typos、go test ./...涉及模块变更时补go mod tidy go mod verify全程 go1.20。涉及 Windows 交付时用make payload make build-windows产出带 ABE 能力的hack-browser-data.exe并可用make payload-verify校验载荷导出符号Bootstrap存在Makefile.frag。八、延伸阅读CLAUDE.md 将架构细节全部指向rfcs/目录本文的深化内容与之互为印证推荐按序阅读RFC-001 项目架构RFC-003 Chromium 加密v10/v11/v20 密文版本 —— 配合 crypto/version.go 的DetectVersion前缀判定v10/v11/v12/v20/无前缀 DPAPI阅读效果更佳RFC-006 密钥检索机制Retriever / ChainRetrieverRFC-009 Windows 锁定文件绕过RFC-010 Chrome ABE 集成本文第四节的主要依据RFC-013 CLI 重设计与跨主机解密 —— 对应dumpkeys/archive/restore三个跨主机子命令其用法与参数表见 README.md本文所有命令均需在仓库根目录执行仓库为只读请勿以修改仓库内容作为验证方式。涉及构建 ABE 载荷时请自行安装 zig 0.13并以make payload为入口。赞分享网络安全应用安全密码学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点击查看免费下载相关推荐Spinnaker 单仓库Monorepo开发指南架构、构建、测试与代码规范全解析Spinnaker 单仓库Monorepo开发指南架构、构建、测试与代码规范全解析 Spinnaker 是一个开源的多云持续交付平台用于以高速度和高置信后端DevOps云原生微服务Zotero 源码仓库开发指南构建、测试、架构分层与代码规范全解析Zotero 源码仓库开发指南构建、测试、架构分层与代码规范全解析 导读 本文以 Zotero 桌面端源码仓库根目录的 CLAUDE.md https://l桌面应用科研AudioKit 仓库开发指南基于 CLAUDE.md 的构建、架构、测试与代码规范全解析AudioKit 仓库开发指南基于 CLAUDE.md 的构建、架构、测试与代码规范全解析 导读 本文以 AudioKit 仓库根目录的 CLAUDE.md音频处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑