Commit Graph

52 Commits

Author SHA1 Message Date
Roger 410bffe643 refactor: naming cleanup and crypto package improvements (#551)
* refactor: naming cleanup across all packages
2026-04-05 16:51:56 +08:00
Roger 92053b85b0 chore: update golangci-lint config and fix lint issues (#542)
* chore: update golangci-lint config and fix lint issues
2026-04-04 16:26:07 +08:00
Roger e35907de6f refactor: remove dead code and rename V2 files (#541)
* refactor: remove V1 dead code and rename V2 files

- Delete extractor/ package (V1 Extractor interface and registry)
- Delete browserdata/ package (V1 orchestrator, outputter, 9 sub-packages)
- Delete V1 browser implementations (chromium.go, chromium_{platform}.go, firefox.go)
- Delete types/types.go (V1 DataType enum) and utils/byteutil/
- Remove gocsv and go-sqlmock dependencies, demote x/text to indirect
- Upgrade keychainbreaker v0.1.0 → v0.2.5
- Rename chromium_new.go → chromium.go, firefox_new.go → firefox.go

* refactor: remove unused V1 utility functions

Remove functions no longer called by V2 code:
- fileutil: IsDirExists, CopyDir, BrowserName, ReadFile, CopyFile,
  Filename, ParentDir, ParentBaseDir, BaseDir
- typeutil: Keys, IntToBool
2026-04-04 15:51:54 +08:00
Roger 9fb5165fcb feat: add crypto/keyretriever with keychainbreaker integration (#518)
* feat: add crypto/keyretriever package for Chromium master key retrieval

* feat: complete keyretriever with gcoredump, chainbreaker, and tests

* refactor: replace internal chainbreaker with keychainbreaker v0.1.0

Replace the incomplete internal chainbreaker implementation (~1400 lines
of duplicated code) with the external keychainbreaker package, which
provides a complete, well-tested keychain parsing library.

Changes:
- Add github.com/moond4rk/keychainbreaker v0.1.0 dependency
- Update gcoredump_darwin.go to use keychainbreaker API (Open/Unlock/GenericPasswords)
- Add KeychainPasswordRetriever for password-based keychain unlocking
  with sync.Once caching across multiple browser queries
- Unify DefaultRetriever(keychainPassword string) signature across all platforms
- Delete utils/chainbreaker/ (696 lines + test + testdata)
- Delete crypto/keyretriever/chainbreaker_darwin.go (696 lines duplicate)
- Delete browser/exploit/gcoredump/ (duplicate of keyretriever version)
- Update chromium_darwin.go to use keyretriever.DecryptKeychain
- Clean up .golangci.yml lint exceptions and .gitignore entries
- Use errors.Is() instead of == for context.DeadlineExceeded check

* refactor: improve gcoredump exploit code quality and add comments
* fix: address Copilot review feedback on keyretriever
2026-04-04 01:41:01 +08:00
Roger e86e3e62d6 feat: add browserdata/datautil helpers (#513)
* feat: add browserdata/datautil helpers (QuerySQLite, QueryRows, DecryptChromiumValue)

Phase 2 of architecture refactoring (RFC-002 Section 3):

- datautil/sqlite.go: QuerySQLite() — shared SQLite open/query/scan helper
  with optional journal_mode=off for Firefox databases
- datautil/query.go: QueryRows[T]() — generic helper (Go 1.20) that wraps
  QuerySQLite and collects results into a typed slice
- datautil/decrypt.go: DecryptChromiumValue() — unified Chromium decryption
  (DPAPI first, then AES-GCM/CBC fallback)
- datautil/sqlite_test.go: tests for all helpers

* refactor: move DecryptChromiumValue from datautil to browser/chromium

- Remove browserdata/datautil/decrypt.go (Chromium-specific, not a generic util)
- Will be added as browser/chromium/decrypt.go (unexported decryptValue)
  in the chromium extract methods PR
- Update RFCs to reflect the change
- Remove decrypt test from datautil tests

* refactor: move datautil to utils/sqliteutil for consistency

- Rename browserdata/datautil/ → utils/sqliteutil/
- Aligns with existing utils/ convention (fileutil, typeutil, byteutil)
- QuerySQLite/QueryRows are generic SQLite helpers, not browserdata-specific
- Update package name from datautil to sqliteutil
- Update both RFCs to reflect new location

* fix: apply review suggestions for sqliteutil

- QuerySQLite: validate dbPath exists before sql.Open to prevent
  silently creating empty databases
- Tests: check db.Close() errors with require.NoError
2026-04-04 01:41:01 +08:00
Roger d0971ca098 chore: update CI, golangci-lint, and CLAUDE.md (#511)
* chore: update CI, golangci-lint, and CLAUDE.md
* fix: resolve CI failures on Windows test and lint
* fix: resolve Windows test path and main.go line length lint issues
* fix: auto-format log/ with gofumpt, exclude pre-refactoring lint issues
* fix: resolve remaining lint issues, remove unnecessary exclusions
* fix: remove invalid G117 gosec rule, use text exclusion for secret pattern
* fix: align CI golangci-lint version with local (v2.4 -> v2.10)
2026-03-23 01:40:59 +08:00
zznQ f2b0e4bf47 feat: Decrypt the browser master key on macOS via CVE-2025-24204 (#494)
* feat: Decrypt the browser master key on macOS via CVE-2025-24204

* fix: resolve lint warnings and stabilize tests

* feat: default to gcoredump key extraction on macOS
2025-11-27 17:13:07 +08:00
ᴍᴏᴏɴD4ʀᴋ 271e052481 fix: Improve error handling and fix wrong compress dir for windows (#367) (#368)
* fix: Improve error handling and fix wrong compress dir for windows
* refactor: Refactor fileutil package for pass linter
2024-07-17 22:32:29 +08:00
moonD4rk fc8a3515d8 refactor: Refactor encryption modules for Chromium browsers. 2024-07-15 22:47:11 +08:00
ᴍᴏᴏɴD4ʀᴋ 06fc064418 refactor/dependence: Upgrade Golang version and dependencies. (#322)
* chore: Set up automated package updates with dependabot.
2024-04-12 20:01:29 +08:00
ᴍᴏᴏɴD4ʀᴋ 536f2082f9 refactor: Optimize traversal browser data logic (#311)
* refactor: Refactor package names and imports for better code organization.
* refactor: Package imports and variable types for consistency
* chore: Disable unused-parameter rule in revive.
* refactor: Refactor and organize data extraction and browserdata parse.
* fix: rename wrong error message info
2024-04-12 20:01:29 +08:00
ᴍᴏᴏɴD4ʀᴋ e48f35cfd3 feat: refactor logger to standard library (#280)
* refactor: Refactor logging to use structured slog package.

- Remove `gookit` dependencies from `go.sum`
- Improve error logging in multiple packages by replacing `log` with `log/slog`
- Update dependencies in `go.mod`
- Add new `logger` package with test cases
- Refactor logging statements in multiple packages to use `slog` instead of `log`
- Change logging format and level in multiple packages for better structured logging

* refactor: Refactor logger package and add handler interface

- Refactor logger package
- Rename `defaultHandler` to `DefaultLogger`
- Move `ReplaceAttr` function to `Logger` struct
- Implement `LogHandler` struct with `slog.Handler` interface
- Add new `Logger` methods for configuration
- Add `SetMaxLevel`, `SetJSONHandler`, `SetTextHandler`, `SetOutput`, `SetVerbose`, `SetReplaceAttrFunc`
- Add verbose flag to `cmd/hack-browser-data/main.go` to increase logging

* refactor: Refactor logger package to use simplified handler initialization.

- Refactor logger package to use Default instead of DefaultLogger
- Update `NewHandler` method to correctly reference `Default` logger and simplify handler initialization
- Update tests for logger to reflect changes in Default usage
- Rename `DefaultLogger` to `Default` and update comments to better reflect its purpose
- Update function calls in hack-browser-data main.go to reflect logger package updates

* refactor: Refactor logging in Chromium implementation

Refactor logging and simplify decryption in chromium files
- Replace logger package import with shared slog package
- Change logging messages to use slog instead of logger
- Simplify decryption process by removing first 5 characters of encrypted key
- Refactor error logging in linux file to use shared slog package
- Replace string concatenation with formatted string in linux error message
2024-01-16 14:06:13 +08:00
stevenlele 07561f56fa feat: improve extension parsing (#235)
* feat: improve extension parsing

* refactor: Refactor extension parsing and update file names.

- Refactor extension parsing function for clarity and DRYness
- Update name of a file to "Secure Preferences"
- Add TODO comment for future work on extension files and folders
- Remove unnecessary file write operation and import statement

---------

Co-authored-by: moonD4rk <moond4rk13@gmail.com>
2024-01-09 18:10:14 +08:00
moonD4rk 6c1f653b4f refactor: Refactor storage queries and filters.
- Update local storage query constant and function calls
- Remove null and control characters from UTF-8 split function
2023-05-08 19:24:15 +08:00
moonD4rk b824f74fae fix: missing key and value in localstorage 2023-05-08 19:22:55 +08:00
moonD4rk 89cd0de693 refactor: rename funciton name 2023-03-11 18:41:05 +08:00
moonD4rk b65d3186c4 chore: update project layout 2023-03-10 14:52:26 +08:00
ᴍᴏᴏɴD4ʀᴋ f8b1de4666 refactor: format project layout 2022-04-17 16:42:36 +08:00
ᴍᴏᴏɴD4ʀᴋ 4d444891ab feat-dev: support firefox for windows and macos 2022-04-17 16:42:36 +08:00
ᴍᴏᴏɴD4ʀᴋ 9ba87962a6 refactor-dev: rename imported log path name 2022-04-17 16:42:36 +08:00
Carlo Mandelli 3e77b57a72 fix: year outside of range error 2021-01-28 16:04:42 +01:00
moond4rk 24f2ceb6b4 docs: add key function documents 2020-11-10 14:11:16 +08:00
ᴍᴏᴏɴD4ʀᴋ 221c059642 feat: add compress result to zip file Close #24 2020-08-07 11:45:37 +08:00
ᴍᴏᴏɴD4ʀᴋ 2b2cc13cff refactor: format code with interface, Close #22 2020-08-01 02:36:44 +08:00
ᴍᴏᴏɴD4ʀᴋ dabeaabc15 refactor: format code 2020-07-24 15:51:59 +08:00
ᴍᴏᴏɴD4ʀᴋ 95c886c04f refactor: remove redundant code 2020-07-22 16:00:40 +08:00
ᴍᴏᴏɴD4ʀᴋ 07149e20b4 refactor: format code with interface Closes #13 2020-07-22 15:49:31 +08:00
ᴍᴏᴏɴD4ʀᴋ 0b8cee62cd style: format project 2020-07-10 16:37:27 +08:00
ᴍᴏᴏɴD4ʀᴋ 8a3f4b8fee fix: compile error for linux 2020-07-10 16:33:06 +08:00
ᴍᴏᴏɴD4ʀᴋ 500ac34ab3 chore: support firefox for linux github action 2020-07-10 16:27:35 +08:00
ᴍᴏᴏɴD4ʀᴋ f4294839f6 feat: add chrome decrypt for linux 2020-07-10 16:09:23 +08:00
ᴍᴏᴏɴD4ʀᴋ 4f80bd0ca7 fix: firefox for windows decrypt failure 2020-07-10 10:46:33 +08:00
ᴍᴏᴏɴD4ʀᴋ 1b7edcbe6c feat: add firefox for windows decrypt Closes #11 2020-07-09 19:34:26 +08:00
ᴍᴏᴏɴD4ʀᴋ 8e56250880 style: format code and update readme 2020-07-09 16:49:35 +08:00
ᴍᴏᴏɴD4ʀᴋ 22eccce30d fix: windows compile failure 2020-07-07 20:37:04 +08:00
ᴍᴏᴏɴD4ʀᴋ a6fca7c6b3 feat: parse cookies, bookmarks and history Closes #9 2020-07-07 20:27:14 +08:00
ᴍᴏᴏɴD4ʀᴋ fc8f965fdd feat: add firefox parse and output 2020-07-06 16:13:25 +08:00
ᴍᴏᴏɴD4ʀᴋ a258c3e65a docs: update readme 2020-07-06 15:20:29 +08:00
ᴍᴏᴏɴD4ʀᴋ 0a904b93de feat: add firefox password decrypt 2020-07-06 15:19:11 +08:00
ᴍᴏᴏɴD4ʀᴋ 064dcff19f style: format const name 2020-07-02 13:08:38 +08:00
ᴍᴏᴏɴD4ʀᴋ 74f6d0ad4a refactor: remove makefile 2020-06-29 16:44:33 +08:00
ᴍᴏᴏɴD4ʀᴋ eb1a7f89ec style: format browser name 2020-06-29 15:18:41 +08:00
ᴍᴏᴏɴD4ʀᴋ dc8c14c538 feat: add qq browser 2020-06-28 21:17:28 +08:00
ᴍᴏᴏɴD4ʀᴋ 169cf9ae65 refactor: format filename 2020-06-28 17:25:38 +08:00
ᴍᴏᴏɴD4ʀᴋ 206a13cfd6 docs: update readme to 0.1.0 2020-06-28 17:18:02 +08:00
ᴍᴏᴏɴD4ʀᴋ ebeef65f81 feat: sort output by timestamp 2020-06-26 04:33:23 +08:00
ᴍᴏᴏɴD4ʀᴋ 31419dc003 feat: add error warp 2020-06-25 17:37:18 +08:00
ᴍᴏᴏɴD4ʀᴋ 55bfd89fa9 feat: add csv and json output 2020-06-23 18:30:00 +08:00
ᴍᴏᴏɴD4ʀᴋ 5bfa781466 feat: add macOS Chrome parse 2020-06-23 10:42:10 +08:00
ᴍᴏᴏɴD4ʀᴋ 7e472c5cee feat: add history parse 2020-06-22 17:23:18 +08:00