Commit Graph
522 Commits
Author SHA1 Message Date
freddy77andGitHub 18d841f68f feat: Add support for sameSite field (#628)
Recent browsers (and HTTP) added "sameSite" setting to limit cross site attacks.
Add support for exporting this property from Firefox and Chrome and to export to csv and cookie-editor format.
Also extract new "session" and "hostOnly" properties for cookie-editor format.
Tested on Firefox, Chrome and Chromium.

Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
2026-08-07 10:14:40 +08:00
RogerandGitHub df20f73b7a ci: auto-merge the generated contributors PR (#627)
Without it the bot PR sits until a human clicks merge, and every later push to main opens another duplicate — the action mints a fresh branch and PR each run with no dedup.
2026-08-02 20:57:51 +08:00
moond4rk-ci[bot]GitHubmoond4rk-ci[bot] <299850723+moond4rk-ci[bot]@users.noreply.github.com>
eed9d9986b chore: update contributors list (#626)
Co-authored-by: moond4rk-ci[bot] <299850723+moond4rk-ci[bot]@users.noreply.github.com>
2026-08-02 20:56:22 +08:00
RogerandGitHub 168312f15f ci: open a PR for contributor updates instead of pushing to main (#625)
The shared app is not in the main ruleset's bypass list, so its direct push is rejected; the skip-ci marker has to go too, or the generated PR's required checks never report and it can never merge.

Claude-Session: https://claude.ai/code/session_011GzPywfeNAx2BVA2M6RnuH
2026-08-02 20:39:17 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Roger
15dc56e3aa chore(deps): bump github.com/moond4rk/keychainbreaker (#621)
Bumps [github.com/moond4rk/keychainbreaker](https://github.com/moond4rk/keychainbreaker) from 0.2.5 to 0.2.6.
- [Release notes](https://github.com/moond4rk/keychainbreaker/releases)
- [Commits](https://github.com/moond4rk/keychainbreaker/compare/v0.2.5...v0.2.6)

---
updated-dependencies:
- dependency-name: github.com/moond4rk/keychainbreaker
  dependency-version: 0.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roger <moond4rk13@gmail.com>
2026-08-02 18:18:24 +08:00
a4972d32fc feat: add support for Browser from Vought (#622)
* feat: add support for Browser from Vought

* fix incorrect var name

---------

Co-authored-by: mybonesaremorepowerful92 <308560070+mybonesaremorepowerful92@users.noreply.github.com>
2026-08-02 18:12:57 +08:00
dependabot[bot]andGitHub 950161c8ba chore(deps): bump actions/setup-go from 6 to 7 (#624) 2026-08-02 01:05:23 +08:00
RogerandGitHub 6502d5ee14 ci: unify bot automation on the shared GitHub App (#619)
* ci: unify bot automation on the shared GitHub App

Point contributors.yml at the shared app via client-id (was the old hackbrowserdata-bot app), and replace the long-lived Homebrew PAT with a short-lived app token scoped to homebrew-tap for the formula push.

* ci: mint homebrew-tap token only in release mode
2026-07-06 00:16:39 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Roger
eb98596d01 chore(deps): bump codecov/codecov-action from 6 to 7 (#618)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v6...v7)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roger <moond4rk13@gmail.com>
2026-07-05 00:53:33 +08:00
dependabot[bot]andGitHub 29561b23e6 chore(deps): bump actions/checkout from 6 to 7 (#617) 2026-07-03 01:11:11 +08:00
RogerandGitHub 2860bb82f9 docs: cross-host decryption guide and comment cleanup (#614)
* docs(readme): document cross-host decryption workflow

* docs: drop RFC citations and what-comments
v1.1.0
2026-06-13 21:17:00 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Roger
dc610d3c63 chore(deps): bump github.com/moond4rk/binarycookies from 1.0.2 to 1.0.3 (#613)
Bumps [github.com/moond4rk/binarycookies](https://github.com/moond4rk/binarycookies) from 1.0.2 to 1.0.3.
- [Release notes](https://github.com/moond4rk/binarycookies/releases)
- [Commits](https://github.com/moond4rk/binarycookies/compare/v1.0.2...v1.0.3)

---
updated-dependencies:
- dependency-name: github.com/moond4rk/binarycookies
  dependency-version: 1.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Roger <moond4rk13@gmail.com>
2026-06-12 20:56:01 +08:00
RogerandGitHub bf96ba8c80 feat(restore): cross-platform restore via dump engine rebuild (#606) (#611)
* feat(restore): cross-platform restore via dump engine rebuild (#606)

Restore previously required the dump's origin OS, overlaying keys onto locally-discovered browsers. It now rebuilds Chromium engines from the dump's vaults (v2 adds engine kind), so copied data or an archive zip decrypts on any OS.

* fix(restore): polish help text, drop dead check, dedup dump kinds

pflag treats backticked words in flag usage as the value placeholder,
so --data-zip rendered as "--data-zip archive" in help output.
2026-06-12 20:53:00 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8d8bd81790 chore(deps): bump github.com/moond4rk/plist from 1.2.1 to 1.2.2 (#612)
Bumps [github.com/moond4rk/plist](https://github.com/moond4rk/plist) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/moond4rk/plist/releases)
- [Commits](https://github.com/moond4rk/plist/compare/v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: github.com/moond4rk/plist
  dependency-version: 1.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-12 10:28:23 +08:00
RogerandGitHub cd0b2daaf3 feat(cli): add archive command for cross-host data transport (#610)
* feat(cli): add archive command for cross-host data transport
* fix(archive): correct flat-layout path and entry-count wording
* refactor(archive): rename BuildArchive to WriteArchive
2026-06-07 15:58:33 +08:00
hackbrowserdata-bot[bot]andGitHub f1219e49ab chore: update contributors list [skip ci] 2026-06-06 06:34:49 +00:00
RogerandGitHub 8936c42d10 refactor(cli): flatten keys export/import into dumpkeys/restore (#608)
* refactor(cli): flatten keys export/import into dumpkeys/restore

The keys noun-group clashed with the flat dump/list verbs; unify on flat verbs and drop the keys parent. Pure rename, no behavior change.

* docs(rfc): add RFC-013 CLI redesign & cross-host restore

The accepted design doc for the flat-verb CLI redesign and cross-platform restore.
2026-06-06 14:34:40 +08:00
hackbrowserdata-bot[bot]andGitHub 9fa709a11e chore: update contributors list [skip ci] 2026-06-05 02:33:45 +00:00
dependabot[bot]andGitHub 8bd7c4ebeb chore(deps): bump github.com/moond4rk/plist from 1.2.0 to 1.2.1 (#609) 2026-06-05 10:33:35 +08:00
hackbrowserdata-bot[bot]andGitHub a31d1abecf chore: update contributors list [skip ci] 2026-06-03 11:35:53 +00:00
RogerandGitHub 2666b813cd feat: decrypt Chromium v10/v11 across host OS (#605) 2026-06-03 19:35:40 +08:00
RogerandGitHub c444314832 refactor: extract master-key code into masterkey package (#604) 2026-06-01 16:08:32 +08:00
RogerandGitHub b901f7dff0 refactor(browser): split installation and profile abstractions (#603)
* refactor(browser): split installation and profile abstractions

A Chromium installation shares one master key across its profiles, but
modeling each profile as its own Browser re-derived the key per profile.
Browser now represents one installation holding its profiles and derives
the key once; new types.Profile/ExtractResult/CountResult carry per-profile
results.

* style: gofumpt safari_test.go

* test(chromium): rename shadowed loop var to path
2026-05-31 16:37:23 +08:00
RogerandGitHub d5dc81f1c0 feat(keys): add keys import subcommand (#601) 2026-05-24 20:41:30 +08:00
RogerandGitHub b468c5d0dc feat(keys): add --keys flag to dump for cross-host decryption (#600)
* feat(keys): add --keys flag to dump for cross-host decryption

Consumer side of the cross-host key workflow (pairs with #599).
ApplyDump wires StaticProviders from a dump.json into matching
browsers, so dump --keys f.json -p /copied/data decrypts without
native retrievers.

* fix(keys): guard --keys against misuse + hint Safari

Without -p, dumped keys would be applied to local profile data and
decrypt to garbage; -b all hits the same path because pickFromConfigs
ignores -p when name == "all". Require both.

* chore(keys): address PR #600 Copilot review

- example: add -b chrome (without it, --keys + default -b all errors out)
- use %q for keysPath in error wrap, matching surrounding style
2026-05-23 21:44:57 +08:00
RogerandGitHub 0fe35542f2 feat(keys): add cross-host master key export (#599) 2026-05-16 20:24:19 +08:00
RogerandGitHub 0234f75495 refactor(chromium): isolate Yandex protocol specifics design (#598) 2026-05-16 14:46:18 +08:00
RogerandGitHub 00be145044 refactor(browser): publicize key-injection capability api (#597)
Promote keyRetrieversSetter to public KeyManager and lift
keychainPasswordSetter from browser_darwin.go into browser.go as
KeychainPasswordReceiver. Engines already implement these methods;
only type-assertion sites switch to the public interface names.
2026-05-16 12:26:57 +08:00
RogerandGitHub f8bd391923 chore(deps): pin gjson below v1.19.0 (#595)
v1.19.0 bumps go.mod to go 1.23; project pinned to go 1.20.
2026-05-15 10:36:03 +08:00
RogerandGitHub ecf8ba0585 refactor(browser): simplify credential storage config (#593) 2026-05-14 16:29:35 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
5d67d3c303 chore(deps): bump actions/upload-artifact from 4 to 7 (#592)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-02 12:35:59 +08:00
RogerandGitHub 439ff52b02 fix(windows): silent default dump on double-click (#591) v1.0.0 2026-04-27 14:47:59 +08:00
RogerandGitHub 5c0b1ad5cf ci(release): integrate Windows ABE payload into goreleaser (#590) 2026-04-26 22:53:42 +08:00
RogerandGitHub 15680c1512 refactor(keyretriever): reduce duplicate master-key WARN logs (#589) 2026-04-25 22:00:33 +08:00
RogerandGitHub 50c4ea84cb fix(time): correct export data timestamp conversions (#586) 2026-04-23 20:39:56 +08:00
RogerandGitHub 0c6c781567 feat(yandex): password and credit card decryption (#585) 2026-04-23 17:00:09 +08:00
RogerandGitHub 7e64d50891 docs(readme): reflect Safari, Windows ABE support (#584)
* docs(readme): reflect Safari, Windows ABE, and DuckDuckGo support
* docs(readme): name the ABE build output as hack-browser-data.exe
* docs(readme): address review feedback on ABE browsers and FDA wording
2026-04-22 02:47:56 +08:00
RogerandGitHub 5cad2d1538 feat(safari): extract installed extensions (#583) 2026-04-22 02:30:19 +08:00
RogerandGitHub 7a5db25b4f feat(safari): localstorage extraction (#582)
* feat(safari): localstorage extraction

Extracts Safari 17+ localStorage from WebKit's nested layout —
WebsiteDataStore/<uuid>/Origins/<top-hash>/<frame-hash>/LocalStorage/
localstorage.sqlite3 for named profiles, WebsiteData/Default for the
default profile. Parses the binary SecurityOrigin serialization
(length-prefixed scheme+host plus 0x00 default-port or 0x01 <uint16_le>
explicit-port section) and decodes UTF-16 LE ItemTable value BLOBs,
capping oversized values at 2048 bytes to match the Chromium extractor.
Reports the frame origin URL so partitioned third-party storage is
attributed to the iframe origin JavaScript actually sees.

Closes the remaining LocalStorage checkbox in #565.

* docs(safari): add RFC-011 data storage

Documents Safari's profile structure, per-category file layouts, and
storage formats including the Safari 17+ nested WebKit Origins
localStorage layout and binary SecurityOrigin serialization. Defers
Keychain credential extraction to RFC-006 §7 and notes the cross-browser
differences (plaintext cookies, plist bookmarks/downloads, Core Data
epoch timestamps, partitioned storage).

* fix(safari): latin-1 origin decoding, NULL key skip, count fast-path

- Decode originEncASCII via decodeLatin1 so high-byte records preserve
  their ISO-8859-1 meaning instead of being interpreted as UTF-8.
  Matches the pattern in chromium/extract_storage.go.
- Skip ItemTable rows where key is NULL — SQLite's UNIQUE constraint
  permits multiple NULLs, and silently lowering them to empty strings
  would collide with legitimate empty-string keys.
- countLocalStorage now walks origin dirs and runs SELECT COUNT(key)
  per localstorage.sqlite3 instead of fully decoding every value.
  COUNT(key) naturally excludes NULLs, keeping count and extract
  symmetric.

Addresses Copilot review feedback on #582.

* fix(safari): round-2 review — WAL replay, stable ordering, error context

- Drop immutable=1 on temp-copy SQLite opens in readLocalStorageFile /
  countLocalStorageFile. Session.Acquire copies the -wal / -shm sidecars,
  so mode=ro alone lets SQLite replay WAL on the ephemeral copy and
  surface entries Safari committed to WAL but hasn't checkpointed yet.
  Live-file reads in profiles.go keep immutable=1 as before.
- Order ItemTable query by (key, rowid) for deterministic exports across
  runs and SQLite versions.
- Wrap os.ReadFile / os.ReadDir errors with the offending path so
  multi-origin debug logs stay scannable.
- RFC-011 §7 rewritten to explain the live-vs-temp split.
- New regression test asserts ORDER BY surfaces rows in key order.

Addresses round-2 Copilot review on #582.
2026-04-21 20:47:11 +08:00
RogerandGitHub d75738b90f feat(safari): multi-profile support (#581)
* feat(safari): multi-profile support
2026-04-21 15:50:36 +08:00
RogerandGitHub 7b9a973c9c fix: per-tier master-key retrievers for mixed-cipher profiles (#579)
* fix: per-tier master-key retrievers for mixed-cipher profiles
2026-04-20 17:33:38 +08:00
RogerandGitHub e50c623db0 fix: retrieve correct ABE master key when browser is running (#577)
* fix(windows): retrieve correct ABE master key when browser is running
2026-04-19 20:07:51 +08:00
RogerandGitHub ae1ec66ccb refactor(windows): split Windows code into winapi (#575) 2026-04-19 18:12:37 +08:00
RogerandGitHub 76e2615db2 refactor(windows): clean up Chrome ABE module (#574)
* refactor(abe): remove --abe-key flag and its global state
* refactor(abe): rework scratch protocol and Go/C structure
2026-04-19 15:20:51 +08:00
slimwangandGitHub c3d30b9e8a feat(windows): Chrome App-Bound Encryption implementation (#573)
* build(abe): add zig-cc payload build system + C reflective loader
* feat(abe): add reflective injector and Go ABE key-retriever primitives
* feat(abe): wire ABERetriever into DefaultRetriever chain + --abe-key CLI
* feat(abe): route Chromium v20 ciphertext through AES-GCM with ABE key
2026-04-18 23:25:59 +08:00
RogerandGitHub eb58ebbbf4 fix: support Linux v11 cipher prefix for Chromium decryption (#571) 2026-04-13 22:12:40 +08:00
RogerandGitHub 370c5882c4 feat: add Safari password extraction from macOS Keychain (#568) 2026-04-13 21:34:40 +08:00
RogerandGitHub d105a1f488 feat: add Safari bookmark and download extraction from plist (#567)
* feat: add Safari bookmark and download extraction from plist files
* test: add nested folder test for bookmark tree traversal
Part of #565
2026-04-12 01:50:54 +08:00
RogerandGitHub 7bf1759dd9 feat: add Safari cookie extraction from BinaryCookies format (#566)
* feat: add Safari cookie extraction from BinaryCookies format
* fix: use expiry presence instead of current time for HasExpire
2026-04-12 01:16:59 +08:00
RogerandGitHub 509cdc2468 feat: add Safari browser support with history extraction (#564)
* feat: add Safari browser support with history extraction
* fix: use correlated subquery to ensure title matches latest visit
2026-04-11 23:47:53 +08:00