parent
							
								
									7c86fdc173
								
							
						
					
					
						commit
						153868198b
					
				| @ -1,3 +1,92 @@ | |||||||
| //go:build linux
 | //go:build linux
 | ||||||
| 
 | 
 | ||||||
| package browser | 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 | 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