fix: improve extract parsing with proper decoding and error handling (#543)

* fix: implement proper Chromium localStorage LevelDB parsing
* feat: add IsMeta field to StorageEntry and keep META entries
* fix: add error logging for decryption and missing data fields
* fix: address PR review for localStorage parsing
* fix: use naïve instead of café in Latin-1 test to avoid typos false positive
* fix: extension enabled detection and sessionStorage decoding
* fix: session storage origin resolution and extension enabled detection
* fix: address PR review comments for storage parsing
This commit is contained in:
Roger
2026-04-04 18:52:54 +08:00
committed by GitHub
parent a58d432688
commit 068b82178f
10 changed files with 497 additions and 57 deletions
+9 -2
View File
@@ -9,6 +9,7 @@ import (
"github.com/tidwall/gjson"
"github.com/moond4rk/hackbrowserdata/crypto"
"github.com/moond4rk/hackbrowserdata/log"
"github.com/moond4rk/hackbrowserdata/types"
"github.com/moond4rk/hackbrowserdata/utils/typeutil"
)
@@ -43,8 +44,14 @@ func extractPasswords(masterKey []byte, path string) ([]types.LoginEntry, error)
url = v.Get("hostname").String()
}
user, _ := decryptPBE(v.Get("encryptedUsername").String(), masterKey)
pwd, _ := decryptPBE(v.Get("encryptedPassword").String(), masterKey)
user, err := decryptPBE(v.Get("encryptedUsername").String(), masterKey)
if err != nil {
log.Debugf("decrypt firefox username for %s: %v", url, err)
}
pwd, err := decryptPBE(v.Get("encryptedPassword").String(), masterKey)
if err != nil {
log.Debugf("decrypt firefox password for %s: %v", url, err)
}
logins = append(logins, types.LoginEntry{
URL: url,