Commit Graph

445 Commits

Author SHA1 Message Date
Roger 12436217ae feat: add filemanager session and crypto version detection (#516)
* feat: add filemanager session and crypto version detection

* refactor: move copy logic into filemanager, remove fileutil dependency

* fix: apply review suggestions for filemanager

* feat: add Windows locked file tests, fix readFileContent with ReadFile+FileMapping fallback

* fix: remove self-PID skip in findFileHandle to fix Windows CI test

* fix: seek to file start before reading duplicated handle

* fix: use full path matching in findFileHandle to avoid cross-app handle collision

* test: enhance Windows copyLocked tests with write-then-read, large file, and normal copy scenarios

* fix: check all errors in Windows tests, use bytes.Equal for large file comparison

* fix: use stable path suffix matching to handle Windows short path names in CI
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 b680d43caa feat: add types.Category, data models, and browserdata.Data (#512)
* feat: add new types.Category, data models, and browserdata.Data

Phase 1 of architecture refactoring (RFC-001/RFC-002):

- types/category.go: Category enum (9 values) replacing DataType (22 values)
  with String(), IsSensitive(), AllCategories, NonSensitiveCategories()
- types/models.go: browser-agnostic data models (LoginEntry, CookieEntry,
  BookmarkEntry, HistoryEntry, DownloadEntry, CreditCardEntry, StorageEntry,
  ExtensionEntry) — no encrypted fields, no browser prefixes
- types/category_test.go: tests for Category methods
- browserdata/browser_data.go: new Data struct with typed slices,
  coexists with old BrowserData during migration

* docs: replace Coveralls badge with Codecov in README

* fix: apply review suggestions (is_http_only tag, json tags on Data)
2026-04-04 01:41:00 +08:00
chleynx c493804ede fix: correctly parse Chromium localStorage LevelDB entries (#539) 2026-04-04 01:01:55 +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
Roger 9959c0839a docs: add architecture refactoring RFCs and switch gitignore to whitelist (#510)
* docs: add architecture refactoring RFCs and switch gitignore to whitelist

- Rename rfc/ to rfcs/
- RFC-001: overall architecture redesign (data models, crypto layer,
  browser registration, CLI separation, error handling)
- RFC-002: data extraction and file acquisition refactoring
- Replace .gitignore blacklist (212 lines) with precise whitelist (43 lines)
  to prevent accidental commit of sensitive browser data files

* feat: update architecture refactoring documentation

- Refactor the architecture to improve scalability and maintainability
- Streamline browser data and file acquisition processes for efficiency

* docs(rfcs): add extract_* naming convention and queryRows[T] helper

- RFC-001: add file naming convention section explaining extract_* prefix
  grouping, add datautil/query.go for queryRows[T] generic helper
- RFC-002: update all extract examples to use datautil.QueryRows[T],
  add Section 3.2 with queryRows[T] definition

* feat: update architecture refactoring documentation

- RFC-001: rename BrowserConfig→Config, BrowsingData→Extract,
  add public/private visibility table, add isValidBrowserDir
  in PickBrowsers, remove storage from Chromium struct,
  NewChain returns KeyRetriever interface, add error wrapping
  convention, unexport PBKDF2 params, flatten log/level
- RFC-002: replace outPutter with writeFile/writeJSON/writeCSV,
  remove golang.org/x/text dependency (3-byte BOM), add Windows
  locked file handling (copyLocked), fix discoverDataFiles to
  check file vs dir type, Firefox New() takes profileDir only,
  add decryptPBE helper, add error handling section, add
  profile discovery with tests, add platform config example
2026-03-23 01:07:56 +08:00
Roger cbd4594958 chore(deps): bump dependencies compatible with Go 1.20 (#509)
- github.com/stretchr/testify 1.9.0 → 1.11.1
- github.com/godbus/dbus/v5 5.1.0 → 5.2.2
- github.com/urfave/cli/v2 2.27.4 → 2.27.7
- github.com/otiai10/copy 1.14.0 → 1.14.1
- modernc.org/sqlite stays at 1.31.1 (v1.32+ requires Go 1.21)
2026-03-23 00:39:44 +08:00
Roger 239501535a fix: cookie and password decryption for macOS (#465) (#501)
Co-authored-by: Michael L <luoshitou9@gmail.com>
2026-03-15 00:45:31 +08:00
github-actions[bot] 47ae49707c chore: update contributors [skip ci] 2026-03-05 03:38:58 +00:00
Aquilao Official 8fb2360afb fix: update bookmark title handling (#500) 2026-03-05 11:38:45 +08:00
Aquilao Official 3a89cb63ce feat: enhance firefox 144+ master key retrieval and improve padding validation (#499)
* feat: enhance firefox 144+ master key retrieval and improve padding validation

* fix: correct SQL query casing in nssPrivate test

* fix: reorder import statements in firefox.go for consistency
2026-03-03 11:56:44 +08:00
github-actions[bot] 1ae127efb1 chore: update contributors [skip ci] 2026-02-13 17:19:05 +00:00
slimwang 54f55a03ed feat: Support decryption of Firefox 144+ (AES-256-CBC) (#498)
* feat: Support decryption of Firefox 144+ (AES-256-CBC)

* docs: Add Firefox 144+ support to README
2026-02-14 01:18:53 +08:00
github-actions[bot] 2f3f4a908a chore: update contributors [skip ci] 2025-11-27 09:13:19 +00: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
github-actions[bot] 1a04abb81a chore: update contributors [skip ci] 2025-11-09 01:32:50 +00:00
github-actions[bot] f8fdb0e929 chore: update contributors [skip ci] 2025-10-26 01:32:43 +00:00
github-actions[bot] 068af3dea8 chore: update contributors [skip ci] 2025-10-05 01:32:31 +00:00
Roger 3e9abed2b3 docs: add architecture RFC and development guidelines (#486)
- Add RFC-001 for architecture refactoring proposal
- Add CLAUDE.md with development guidelines and security analysis
- Document current issues and proposed solutions for library support
- Include cross-platform considerations and encryption versioning

The RFC addresses key architectural challenges:
* Limited encryption version support (only v10)
* Scattered cross-platform MasterKey retrieval
* Windows Cookie file access permission issues
* Coupled code architecture preventing library usage
* Inconsistent error handling
* Testing and maintenance difficulties

Proposed improvements include versioned encryption strategies,
unified MasterKey abstraction, and a clean library API design.
2025-09-02 23:23:19 +08:00
Roger d101da627d fix: upgrade golangci-lint to v2 and modernize configuration (#487)
* fix: upgrade golangci-lint to v2 and modernize configuration

- Migrate from golangci-lint v1 to v2 configuration format
- Update GitHub Actions workflow to use golangci-lint-action@v8
- Set golangci-lint version to v2.2.0 for stability
- Add comprehensive linter configuration with Go 1.20 compatibility
- Temporarily disable strict linting rules to unblock development
- Configure formatters (gofmt, goimports, gci) separately per v2 requirements
- Add extensive exclusion rules for gradual rule enforcement

This change establishes a modern linting baseline that can be progressively
enhanced as code quality improves. All major linting issues have been
configured as non-blocking to allow incremental improvements.

* chore: update golangci-lint to v2.4.0 for compatibility

- Update golangci-lint version from v2.2.0 to v2.4.0 in GitHub Actions
- Aligns CI environment with local development version
- Resolves configuration validation errors

* fix: update golangci-lint config to v2.4.0 compatible format

- Remove deprecated v1 fields (skip-dirs, skip-files from run section)
- Move exclusions to linters.exclusions section
- Fix goimports.local-prefixes to be array format
- Remove gci.skip-generated and custom-order (not supported)
- Replace disable-all with default: standard
- Remove deprecated issues section, use linters.exclusions instead
- Fix output format from colored-line-number to text with colors
- Remove unsupported fields from linter settings

This ensures the config passes 'golangci-lint config verify' validation
2025-09-02 23:18:27 +08:00
github-actions[bot] 8baf620e3b chore: update contributors [skip ci] 2025-08-17 01:33:20 +00:00
github-actions[bot] ade1d9f9b4 chore: update contributors [skip ci] 2025-08-03 01:34:20 +00:00
github-actions[bot] c5c821b0c7 chore: update contributors [skip ci] 2025-06-29 01:33:33 +00:00
github-actions[bot] b6d70b7821 chore: update contributors [skip ci] 2025-04-06 01:32:12 +00:00
github-actions[bot] 8d0c37e59d chore: update contributors [skip ci] 2025-03-30 01:32:22 +00:00
github-actions[bot] d42fc23385 chore: update contributors [skip ci] 2025-03-23 01:32:09 +00:00
github-actions[bot] 4e382f3457 chore: update contributors [skip ci] 2025-02-23 01:31:48 +00:00
github-actions[bot] 9121178ba7 chore: update contributors [skip ci] 2024-11-15 03:40:41 +00:00
Aquilao Official b66ca7b3d8 fix: Resolve decryption failures of password value in some browser (#452)
* fix: skip chromium-based browser 'def' dir
* fix: fixed the issue that 360speed, QQ Browser and other Chinese browsers had errors in decrypting passwords and cookies
* misc: modify some log level
* fix: fix the wrong function

---------

Co-authored-by: Aquilao <Aquilao@outlook>
2024-11-15 11:40:25 +08:00
Aquilao Official 0761fc39f2 fix: skip chromium-based browser 'def' dir (#448)
Co-authored-by: Aquilao <Aquilao@outlook>
2024-11-15 11:40:25 +08:00
Santiago Ramirez d0967a362e chore: updated source reference (#441) 2024-11-15 11:40:25 +08:00
ᴍᴏᴏɴD4ʀᴋ ad020cf135 chore: downgrade golang version to 1.20, support Windows 7. (#435)
* chore: downgrade golang version to 1.20, support windows 7

* chore: Update dependencies for Go project.

- Update dependencies in go.sum
- Improvements and optimizations in various files
- Bug fixes and error handling enhancements

* chore: Update modernc.org/sqlite library versions in go.mod and go.sum files

- Update version of `modernc.org/sqlite` to `v1.31.1` in `go.mod` and `go.sum` files
- Update module hash in `go.sum` file for `modernc.org/sqlite`
- Ensure consistency between `go.mod` and `go.sum` files in relation to `modernc.org/sqlite` version

* chore: replace log/slog with standard logger (#436)

* chore: replace log/slog with standard logger

* chore: Update Go dependencies and versions

- Update Go version from `1.22.5` to `1.20` and other dependencies
- Update critical dependencies to latest versions
- Ensure compatibility with new versions of dependencies

* chore: Optimize dependency management in workflows

- Update build and lint workflows to use `go mod tidy` for getting dependencies
- Change modules download mode to `'mod'` in linters configuration
- Add step to get dependencies in lint workflow

* refactor: Update dependencies and refactor Chromium key deletion logic

- Update `modernc.org/sqlite` to `v1.31.1` in `go.mod` and `go.sum`
- Increase version number to `0.5.0` in `cmd/hack-browser-data/main.go`
- Refactor and update logic for filtering and copying items in `browser/chromium/chromium.go`

* Improve logging functionality and data type conversion

- Add `String()` method to `DataType` enum in types.go
- Update log level to Debug in logger_test.go
- Set log level to Debug in `TestLoggerDebug` and `TestLoggerDebugf` functions
2024-10-22 13:01:13 +08:00
moonD4rk 31591411e4 chore: Update third-party library versions 2024-10-22 13:01:13 +08:00
ᴍᴏᴏɴD4ʀᴋ f3d9540016 chore: Update dependencies to latest versions (#426)
* chore: Update dependencies to latest versions

- Update dependencies versions in `go.mod` file
- Address security vulnerabilities by updating third-party libraries
- Improve performance and stability with updated dependencies

* ci: Implement stronger crypto algorithms enforcement.

- Exclude weak crypto algorithms using `G405` in the `.golangci.yml` file.
2024-09-30 19:18:40 +08:00
ᴍᴏᴏɴD4ʀᴋ 6a495a1449 chore(deps): bump golang dependencies (#380)
* chore(deps): bump github.com/tidwall/gjson from 1.17.1 to 1.17.3

Bumps [github.com/tidwall/gjson](https://github.com/tidwall/gjson) from 1.17.1 to 1.17.3.
- [Commits](https://github.com/tidwall/gjson/compare/v1.17.1...v1.17.3)

---
updated-dependencies:
- dependency-name: github.com/tidwall/gjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump modernc.org/sqlite from 1.30.1 to 1.31.1

Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.30.1 to 1.31.1.
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.30.1...v1.31.1)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-11 08:26:22 +08:00
moonD4rk 6286739744 docs: Remove Chinese README file 2024-07-19 20:30: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
ᴍᴏᴏɴD4ʀᴋ c9beee2662 docs: Update the document version to 0.4.6 (#363)
* docs: Update README with version `0.4.6` and improvements
v0.4.6
2024-07-16 12:01:21 +08:00
moonD4rk f1f0907a1c chore: Optimize GitHub actions and dependencies updates 2024-07-16 11:37:57 +08:00
moonD4rk 5ead3ba3c3 ci: Refactor project workflows, build with goreleaser
- Add configuration files for `goreleaser.yml` and GitHub workflows
- Update Go version to `1.22.x`
- Adjust workflow names and triggers in `.github/workflows` folder
2024-07-15 22:47:11 +08:00
moonD4rk 5dcf1e163b fix: Improve error handling if walk browser profile dir
- Implement error handling for path permission errors in `chromiumWalkFunc`
- Refactor `firefoxWalkFunc` to handle permission errors and log warnings
- Add import statement for `log/slog` in `firefox/firefox.go`
2024-07-15 22:47:11 +08:00
dependabot[bot] 940e960932 chore(deps): bump golangci/golangci-lint-action from 4 to 6
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 4 to 6.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](https://github.com/golangci/golangci-lint-action/compare/v4...v6)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 22:47:11 +08:00
dependabot[bot] 654dec8876 chore(deps): bump modernc.org/sqlite from 1.29.6 to 1.30.1
Bumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.29.6 to 1.30.1.
- [Commits](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.30.1)

---
updated-dependencies:
- dependency-name: modernc.org/sqlite
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 22:47:11 +08:00
moonD4rk a6c6f2dd92 fix: skip chromium snapshot dir to find right database
- Refactored variable names for clarity and consistency in multiple files
- Updated logic to filter sensitive items based on a flag
- Implemented a function to skip processing specific paths to improve performance
2024-07-15 22:47:11 +08:00
moonD4rk fc8a3515d8 refactor: Refactor encryption modules for Chromium browsers. 2024-07-15 22:47:11 +08:00
github-actions[bot] 6237658fe7 chore: update contributors [skip ci] 2024-07-07 01:30:40 +00:00
dependabot[bot] fa09f73221 chore(deps): bump crazy-max/ghaction-xgo from 2 to 3
Bumps [crazy-max/ghaction-xgo](https://github.com/crazy-max/ghaction-xgo) from 2 to 3.
- [Release notes](https://github.com/crazy-max/ghaction-xgo/releases)
- [Commits](https://github.com/crazy-max/ghaction-xgo/compare/v2...v3)

---
updated-dependencies:
- dependency-name: crazy-max/ghaction-xgo
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-12 20:06:04 +08:00
dependabot[bot] 242f00cd53 chore(deps): bump release-drafter/release-drafter from 5 to 6
Bumps [release-drafter/release-drafter](https://github.com/release-drafter/release-drafter) from 5 to 6.
- [Release notes](https://github.com/release-drafter/release-drafter/releases)
- [Commits](https://github.com/release-drafter/release-drafter/compare/v5...v6)

---
updated-dependencies:
- dependency-name: release-drafter/release-drafter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-12 20:05:55 +08:00
dependabot[bot] 3fd08019f9 chore(deps): bump actions/upload-release-asset from 1.0.1 to 1.0.2
Bumps [actions/upload-release-asset](https://github.com/actions/upload-release-asset) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/actions/upload-release-asset/releases)
- [Commits](https://github.com/actions/upload-release-asset/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: actions/upload-release-asset
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-12 20:05:45 +08:00
dependabot[bot] c296da4de2 chore(deps): bump golangci/golangci-lint-action from 3 to 4
Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 3 to 4.
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](https://github.com/golangci/golangci-lint-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: golangci/golangci-lint-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-12 20:05:34 +08:00