parent
							
								
									7c86fdc173
								
							
						
					
					
						commit
						153868198b
					
				| @ -1,3 +1,92 @@ | ||||
| //go:build linux
 | ||||
| 
 | ||||
| package browser | ||||
| 
 | ||||
| import ( | ||||
| 	"hack-browser-data/internal/item" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	chromiumList = map[string]struct { | ||||
| 		name        string | ||||
| 		storage     string | ||||
| 		profilePath string | ||||
| 		items       []item.Item | ||||
| 	}{ | ||||
| 		"chrome": { | ||||
| 			name:        chromeName, | ||||
| 			storage:     chromeStorageName, | ||||
| 			profilePath: chromeProfilePath, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"edge": { | ||||
| 			name:        edgeName, | ||||
| 			storage:     edgeStorageName, | ||||
| 			profilePath: edgeProfilePath, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"chromium": { | ||||
| 			name:        chromiumName, | ||||
| 			storage:     chromiumStorageName, | ||||
| 			profilePath: chromiumProfilePath, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"chrome-beta": { | ||||
| 			name:        chromeBetaName, | ||||
| 			storage:     chromeBetaStorageName, | ||||
| 			profilePath: chromeBetaProfilePath, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"opera": { | ||||
| 			name:        operaName, | ||||
| 			profilePath: operaProfilePath, | ||||
| 			storage:     operaStorageName, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"vivaldi": { | ||||
| 			name:        vivaldiName, | ||||
| 			storage:     vivaldiStorageName, | ||||
| 			profilePath: vivaldiProfilePath, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 		"brave": { | ||||
| 			name:        braveName, | ||||
| 			profilePath: braveProfilePath, | ||||
| 			storage:     braveStorageName, | ||||
| 			items:       item.DefaultChromium, | ||||
| 		}, | ||||
| 	} | ||||
| 	firefoxList = map[string]struct { | ||||
| 		name        string | ||||
| 		storage     string | ||||
| 		profilePath string | ||||
| 		items       []item.Item | ||||
| 	}{ | ||||
| 		"firefox": { | ||||
| 			name:        firefoxName, | ||||
| 			profilePath: firefoxProfilePath, | ||||
| 			items:       item.DefaultFirefox, | ||||
| 		}, | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	firefoxProfilePath    = homeDir + "/.mozilla/firefox/*.default-release*/" | ||||
| 	chromeProfilePath     = homeDir + "/.config/google-chrome/*/" | ||||
| 	chromiumProfilePath   = homeDir + "/.config/chromium/*/" | ||||
| 	edgeProfilePath       = homeDir + "/.config/microsoft-edge*/*/" | ||||
| 	braveProfilePath      = homeDir + "/.config/BraveSoftware/Brave-Browser/*/" | ||||
| 	chromeBetaProfilePath = homeDir + "/.config/google-chrome-beta/*/" | ||||
| 	operaProfilePath      = homeDir + "/.config/opera/" | ||||
| 	vivaldiProfilePath    = homeDir + "/.config/vivaldi/*/" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	chromeStorageName     = "Chrome Safe Storage" | ||||
| 	chromiumStorageName   = "Chromium Safe Storage" | ||||
| 	edgeStorageName       = "Chromium Safe Storage" | ||||
| 	braveStorageName      = "Brave Safe Storage" | ||||
| 	chromeBetaStorageName = "Chrome Safe Storage" | ||||
| 	operaStorageName      = "Chromium Safe Storage" | ||||
| 	vivaldiStorageName    = "Chrome Safe Storage" | ||||
| ) | ||||
|  | ||||
| @ -1 +1,65 @@ | ||||
| package chromium | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/sha1" | ||||
| 
 | ||||
| 	"github.com/godbus/dbus/v5" | ||||
| 	keyring "github.com/ppacher/go-dbus-keyring" | ||||
| 	"golang.org/x/crypto/pbkdf2" | ||||
| 
 | ||||
| 	"hack-browser-data/internal/log" | ||||
| ) | ||||
| 
 | ||||
| func (c *chromium) GetMasterKey() ([]byte, error) { | ||||
| 	// what is d-bus @https://dbus.freedesktop.org/
 | ||||
| 	var chromeSecret []byte | ||||
| 	conn, err := dbus.SessionBus() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	svc, err := keyring.GetSecretService(conn) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	session, err := svc.OpenSession() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		session.Close() | ||||
| 	}() | ||||
| 	collections, err := svc.GetAllCollections() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	for _, col := range collections { | ||||
| 		items, err := col.GetAllItems() | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		for _, item := range items { | ||||
| 			label, err := item.GetLabel() | ||||
| 			if err != nil { | ||||
| 				log.Error(err) | ||||
| 				continue | ||||
| 			} | ||||
| 			if label == c.storage { | ||||
| 				se, err := item.GetSecret(session.Path()) | ||||
| 				if err != nil { | ||||
| 					log.Error(err) | ||||
| 					return nil, err | ||||
| 				} | ||||
| 				chromeSecret = se.Value | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	// TODO: handle error if no secret found
 | ||||
| 	if chromeSecret == nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	var chromeSalt = []byte("saltysalt") | ||||
| 	// @https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_linux.cc
 | ||||
| 	key := pbkdf2.Key(chromeSecret, chromeSalt, 1, 16, sha1.New) | ||||
| 	c.masterKey = key | ||||
| 	return key, nil | ||||
| } | ||||
|  | ||||
					Loading…
					
					
				
		Reference in new issue