feat: add is full export browsing data option

This commit is contained in:
moonD4rk
2023-03-11 20:09:10 +08:00
parent fbe61a2cf4
commit 84ab4005f9
15 changed files with 125 additions and 79 deletions
+7 -7
View File
@@ -63,15 +63,15 @@ type nssPBE struct {
func (n nssPBE) Decrypt(globalSalt, masterPwd []byte) (key []byte, err error) {
glmp := append(globalSalt, masterPwd...)
hp := sha1.Sum(glmp)
s := append(hp[:], n.entrySalt()...)
s := append(hp[:], n.salt()...)
chp := sha1.Sum(s)
pes := paddingZero(n.entrySalt(), 20)
pes := paddingZero(n.salt(), 20)
tk := hmac.New(sha1.New, chp[:])
tk.Write(pes)
pes = append(pes, n.entrySalt()...)
pes = append(pes, n.salt()...)
k1 := hmac.New(sha1.New, chp[:])
k1.Write(pes)
tkPlus := append(tk.Sum(nil), n.entrySalt()...)
tkPlus := append(tk.Sum(nil), n.salt()...)
k2 := hmac.New(sha1.New, chp[:])
k2.Write(tkPlus)
k := append(k1.Sum(nil), k2.Sum(nil)...)
@@ -79,7 +79,7 @@ func (n nssPBE) Decrypt(globalSalt, masterPwd []byte) (key []byte, err error) {
return des3Decrypt(k[:24], iv, n.encrypted())
}
func (n nssPBE) entrySalt() []byte {
func (n nssPBE) salt() []byte {
return n.AlgoAttr.SaltAttr.EntrySalt
}
@@ -136,12 +136,12 @@ type slatAttr struct {
func (m metaPBE) Decrypt(globalSalt, masterPwd []byte) (key2 []byte, err error) {
k := sha1.Sum(globalSalt)
key := pbkdf2.Key(k[:], m.entrySalt(), m.iterationCount(), m.keySize(), sha256.New)
key := pbkdf2.Key(k[:], m.salt(), m.iterationCount(), m.keySize(), sha256.New)
iv := append([]byte{4, 14}, m.iv()...)
return aes128CBCDecrypt(key, iv, m.encrypted())
}
func (m metaPBE) entrySalt() []byte {
func (m metaPBE) salt() []byte {
return m.AlgoAttr.Data.Data.SlatAttr.EntrySalt
}
+2 -2
View File
@@ -2,12 +2,12 @@
package crypto
var iv = []byte{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
func Chromium(key, encryptPass []byte) ([]byte, error) {
if len(encryptPass) <= 3 {
return nil, errPasswordIsEmpty
}
iv := []byte{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
return aes128CBCDecrypt(key, iv, encryptPass[3:])
}
+3 -3
View File
@@ -2,13 +2,13 @@
package crypto
var iv = []byte{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
func Chromium(key, encryptPass []byte) ([]byte, error) {
if len(encryptPass) < 3 {
return nil, errPasswordIsEmpty
}
chromeIV := []byte{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}
return aes128CBCDecrypt(key, chromeIV, encryptPass[3:])
return aes128CBCDecrypt(key, iv, encryptPass[3:])
}
func DPAPI(data []byte) ([]byte, error) {
+3 -3
View File
@@ -10,7 +10,7 @@ import (
)
func Chromium(key, encryptPass []byte) ([]byte, error) {
if len(encryptPass) < 3 {
if len(encryptPass) < 15 {
return nil, errPasswordIsEmpty
}
@@ -51,7 +51,7 @@ type dataBlob struct {
pbData *byte
}
func NewBlob(d []byte) *dataBlob {
func newBlob(d []byte) *dataBlob {
if len(d) == 0 {
return &dataBlob{}
}
@@ -78,7 +78,7 @@ func DPAPI(data []byte) ([]byte, error) {
procDecryptData := dllCrypt.NewProc("CryptUnprotectData")
procLocalFree := dllKernel.NewProc("LocalFree")
var outBlob dataBlob
r, _, err := procDecryptData.Call(uintptr(unsafe.Pointer(NewBlob(data))), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(&outBlob)))
r, _, err := procDecryptData.Call(uintptr(unsafe.Pointer(newBlob(data))), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(&outBlob)))
if r == 0 {
return nil, err
}