You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.4 KiB
144 lines
3.4 KiB
package hackbrowserdata
|
|
|
|
import (
|
|
"github.com/moond4rk/hackbrowserdata/browserdata"
|
|
)
|
|
|
|
type DataType int
|
|
|
|
const (
|
|
TypeMasterKey DataType = iota
|
|
TypePassword
|
|
TypeCookie
|
|
TypeHistory
|
|
TypeBookmark
|
|
TypeCreditCard
|
|
TypeDownload
|
|
TypeExtensions
|
|
TypeSessionStorage
|
|
TypeLocalStorage
|
|
)
|
|
|
|
func (i DataType) NewExtractor(browserType browserType, masterKey []byte, datafiles []string) browserdata.Extractor {
|
|
switch i {
|
|
case TypePassword:
|
|
switch browserType {
|
|
case browserTypeChromium:
|
|
return browserdata.NewPassExtractor(masterKey, datafiles, browserdata.DefaultDBHandler, browserdata.ChromiumPassRowsHandler)
|
|
case browserTypeFirefox:
|
|
return browserdata.NewPassExtractor(masterKey, datafiles, browserdata.DefaultJSONHandler, browserdata.FirefoxPassRowsHandler)
|
|
}
|
|
case TypeCookie:
|
|
}
|
|
return nil
|
|
}
|
|
|
|
var (
|
|
defaultDataTypes = []DataType{TypePassword, TypeCookie}
|
|
)
|
|
|
|
const unsupportedType = ""
|
|
|
|
func (i DataType) Filename(b browser) string {
|
|
switch b.Type() {
|
|
case browserTypeChromium:
|
|
return i.chromiumFilename()
|
|
case browserTypeFirefox:
|
|
return i.firefoxFilename()
|
|
case browserTypeYandex:
|
|
return i.yandexFilename()
|
|
default:
|
|
return unsupportedType
|
|
}
|
|
}
|
|
|
|
func (i DataType) chromiumFilename() string {
|
|
switch i {
|
|
case TypeMasterKey:
|
|
return fileChromiumKey
|
|
case TypePassword:
|
|
return fileChromiumPassword
|
|
case TypeCookie:
|
|
return fileChromiumCookie
|
|
case TypeHistory:
|
|
return fileChromiumHistory
|
|
case TypeBookmark:
|
|
return fileChromiumBookmark
|
|
case TypeCreditCard:
|
|
return fileChromiumCredit
|
|
case TypeDownload:
|
|
return fileChromiumDownload
|
|
case TypeExtensions:
|
|
return fileChromiumExtension
|
|
case TypeSessionStorage:
|
|
return fileChromiumSessionStorage
|
|
case TypeLocalStorage:
|
|
return fileChromiumLocalStorage
|
|
default:
|
|
return unsupportedFile
|
|
}
|
|
}
|
|
|
|
func (i DataType) yandexFilename() string {
|
|
switch i {
|
|
case TypePassword:
|
|
return fileYandexPassword
|
|
case TypeCreditCard:
|
|
return fileYandexCredit
|
|
default:
|
|
return i.chromiumFilename()
|
|
}
|
|
}
|
|
|
|
func (i DataType) firefoxFilename() string {
|
|
switch i {
|
|
case TypeMasterKey:
|
|
return fileFirefoxMasterKey
|
|
case TypePassword:
|
|
return fileFirefoxPassword
|
|
case TypeCookie:
|
|
return fileFirefoxCookie
|
|
case TypeHistory:
|
|
return fileFirefoxData
|
|
case TypeBookmark:
|
|
return fileFirefoxData
|
|
case TypeCreditCard:
|
|
// Firefox does not store credit cards
|
|
return unsupportedFile
|
|
case TypeDownload:
|
|
return fileFirefoxData
|
|
case TypeExtensions:
|
|
return fileFirefoxExtension
|
|
case TypeSessionStorage:
|
|
return fileFirefoxData
|
|
case TypeLocalStorage:
|
|
return fileFirefoxLocalStorage
|
|
default:
|
|
return unsupportedFile
|
|
}
|
|
}
|
|
|
|
const unsupportedFile = "unsupported file"
|
|
|
|
const (
|
|
fileChromiumKey = "Local State"
|
|
fileChromiumCredit = "Web Data"
|
|
fileChromiumPassword = "Login Data"
|
|
fileChromiumHistory = "History"
|
|
fileChromiumDownload = "History"
|
|
fileChromiumCookie = "Cookies"
|
|
fileChromiumBookmark = "Bookmarks"
|
|
fileChromiumLocalStorage = "Local Storage/leveldb"
|
|
fileChromiumSessionStorage = "Session Storage"
|
|
fileChromiumExtension = "Extensions"
|
|
|
|
fileYandexPassword = "Ya Passman Data"
|
|
fileYandexCredit = "Ya Credit Cards"
|
|
|
|
fileFirefoxMasterKey = "key4.db"
|
|
fileFirefoxCookie = "cookies.sqlite"
|
|
fileFirefoxPassword = "logins.json"
|
|
fileFirefoxData = "places.sqlite"
|
|
fileFirefoxLocalStorage = "webappsstore.sqlite"
|
|
fileFirefoxExtension = "extensions.json"
|
|
)
|
|
|