mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-21 19:06:47 +02:00
feat: rename item name
This commit is contained in:
@@ -4,11 +4,8 @@ go 1.18
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9
|
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9
|
||||||
github.com/godbus/dbus/v5 v5.0.3
|
|
||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/jszwec/csvutil v1.3.0
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.9
|
github.com/mattn/go-sqlite3 v1.14.9
|
||||||
github.com/ppacher/go-dbus-keyring v1.0.1
|
|
||||||
github.com/tidwall/gjson v1.9.3
|
github.com/tidwall/gjson v1.9.3
|
||||||
github.com/urfave/cli/v2 v2.2.0
|
github.com/urfave/cli/v2 v2.2.0
|
||||||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9
|
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9
|
||||||
|
|||||||
@@ -6,13 +6,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9 h1:ptTza/LLPmfRtmz77X+6J61Wyf5e1hz5xYMvRk/hkE4=
|
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9 h1:ptTza/LLPmfRtmz77X+6J61Wyf5e1hz5xYMvRk/hkE4=
|
||||||
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
|
github.com/gocarina/gocsv v0.0.0-20211203214250-4735fba0c1d9/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
|
||||||
github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME=
|
|
||||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
github.com/jszwec/csvutil v1.3.0 h1:d0zzXKQYvc22b4La5Wcp97CDgQ7JDLGJLm2NWqJGEYg=
|
|
||||||
github.com/jszwec/csvutil v1.3.0/go.mod h1:Rpu7Uu9giO9subDyMCIQfHVDuLrcaC36UA4YcJjGBkg=
|
|
||||||
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
|
github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA=
|
||||||
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
|
||||||
@@ -21,8 +17,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
|
|||||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/ppacher/go-dbus-keyring v1.0.1 h1:dM4dMfP5w9MxY+foFHCQiN7izEGpFdKr3tZeMGmvqD0=
|
|
||||||
github.com/ppacher/go-dbus-keyring v1.0.1/go.mod h1:JEmkRwBVPBFkOHedAsoZALWmhNJxR/R/ykkFpbEHtGE=
|
|
||||||
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||||
|
|||||||
@@ -1,16 +1,10 @@
|
|||||||
package browser
|
package browser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io/fs"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser/data"
|
"hack-browser-data/internal/browser/data"
|
||||||
"hack-browser-data/internal/browser/item"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Browser interface {
|
type Browser interface {
|
||||||
@@ -90,185 +84,6 @@ func pickFirefox(name string) []Browser {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type chromium struct {
|
|
||||||
browserInfo *browserInfo
|
|
||||||
items []item.Item
|
|
||||||
itemPaths map[item.Item]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// newChromium 根据浏览器信息生成 Browser Interface
|
|
||||||
func newChromium(info *browserInfo, items []item.Item) (*chromium, error) {
|
|
||||||
c := &chromium{
|
|
||||||
browserInfo: info,
|
|
||||||
items: items,
|
|
||||||
}
|
|
||||||
absProfilePath := path.Join(homeDir, filepath.Clean(c.browserInfo.profilePath))
|
|
||||||
// TODO: Handle file path is not exist
|
|
||||||
if !isFileExist(absProfilePath) {
|
|
||||||
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
|
|
||||||
}
|
|
||||||
itemsPaths, err := getChromiumItemPath(absProfilePath, c.items)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
c.itemPaths = itemsPaths
|
|
||||||
return c, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *chromium) GetName() string {
|
|
||||||
return c.browserInfo.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *chromium) GetBrowsingData() []data.BrowsingData {
|
|
||||||
var browsingData []data.BrowsingData
|
|
||||||
for item := range c.itemPaths {
|
|
||||||
d := item.NewBrowsingData()
|
|
||||||
if d != nil {
|
|
||||||
browsingData = append(browsingData, d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return browsingData
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *chromium) CopyItemFileToLocal() error {
|
|
||||||
for item, sourcePath := range c.itemPaths {
|
|
||||||
var dstFilename = item.FileName()
|
|
||||||
locals, _ := filepath.Glob("*")
|
|
||||||
for _, v := range locals {
|
|
||||||
if v == dstFilename {
|
|
||||||
err := os.Remove(dstFilename)
|
|
||||||
// TODO: Should Continue all iteration error
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Handle read file error
|
|
||||||
sourceFile, err := ioutil.ReadFile(sourcePath)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err.Error())
|
|
||||||
}
|
|
||||||
err = ioutil.WriteFile(dstFilename, sourceFile, 0777)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type firefox struct {
|
|
||||||
browserInfo *browserInfo
|
|
||||||
items []item.Item
|
|
||||||
itemPaths map[item.Item]string
|
|
||||||
multiItemPaths map[string]map[item.Item]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// newFirefox
|
|
||||||
func newMultiFirefox(info *browserInfo, items []item.Item) ([]*firefox, error) {
|
|
||||||
f := &firefox{
|
|
||||||
browserInfo: info,
|
|
||||||
items: items,
|
|
||||||
}
|
|
||||||
multiItemPaths, err := getFirefoxItemAbsPath(f.browserInfo.profilePath, f.items)
|
|
||||||
if err != nil {
|
|
||||||
if strings.Contains(err.Error(), "profile path is not exist") {
|
|
||||||
fmt.Println(err)
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
var firefoxList []*firefox
|
|
||||||
for name, value := range multiItemPaths {
|
|
||||||
firefoxList = append(firefoxList, &firefox{
|
|
||||||
browserInfo: &browserInfo{
|
|
||||||
name: name,
|
|
||||||
masterKey: nil,
|
|
||||||
},
|
|
||||||
items: items,
|
|
||||||
itemPaths: value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return firefoxList, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getFirefoxItemAbsPath(profilePath string, items []item.Item) (map[string]map[item.Item]string, error) {
|
|
||||||
var multiItemPaths = make(map[string]map[item.Item]string)
|
|
||||||
absProfilePath := path.Join(homeDir, filepath.Clean(profilePath))
|
|
||||||
// TODO: Handle read file error
|
|
||||||
if !isFileExist(absProfilePath) {
|
|
||||||
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
|
|
||||||
}
|
|
||||||
err := filepath.Walk(absProfilePath, firefoxWalkFunc(items, multiItemPaths))
|
|
||||||
return multiItemPaths, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *firefox) CopyItemFileToLocal() error {
|
|
||||||
for item, sourcePath := range f.itemPaths {
|
|
||||||
var dstFilename = item.FileName()
|
|
||||||
locals, _ := filepath.Glob("*")
|
|
||||||
for _, v := range locals {
|
|
||||||
if v == dstFilename {
|
|
||||||
err := os.Remove(dstFilename)
|
|
||||||
// TODO: Should Continue all iteration error
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Handle read file name error
|
|
||||||
sourceFile, err := ioutil.ReadFile(sourcePath)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err.Error())
|
|
||||||
}
|
|
||||||
err = ioutil.WriteFile(dstFilename, sourceFile, 0777)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) filepath.WalkFunc {
|
|
||||||
return func(path string, info fs.FileInfo, err error) error {
|
|
||||||
for _, v := range items {
|
|
||||||
if info.Name() == v.DefaultName() {
|
|
||||||
parentDir := getParentDir(path)
|
|
||||||
if _, exist := multiItemPaths[parentDir]; exist {
|
|
||||||
multiItemPaths[parentDir][v] = path
|
|
||||||
} else {
|
|
||||||
multiItemPaths[parentDir] = map[item.Item]string{v: path}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func getParentDir(absPath string) string {
|
|
||||||
return filepath.Base(filepath.Dir(absPath))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *firefox) GetMasterKey() ([]byte, error) {
|
|
||||||
return f.browserInfo.masterKey, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *firefox) GetName() string {
|
|
||||||
return f.browserInfo.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *firefox) GetBrowsingData() []data.BrowsingData {
|
|
||||||
var browsingData []data.BrowsingData
|
|
||||||
for item := range f.itemPaths {
|
|
||||||
d := item.NewBrowsingData()
|
|
||||||
if d != nil {
|
|
||||||
browsingData = append(browsingData, d)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return browsingData
|
|
||||||
}
|
|
||||||
|
|
||||||
func ListBrowser() []string {
|
func ListBrowser() []string {
|
||||||
var l []string
|
var l []string
|
||||||
for c := range chromiumList {
|
for c := range chromiumList {
|
||||||
@@ -313,39 +128,3 @@ const (
|
|||||||
coccocName = "CocCoc"
|
coccocName = "CocCoc"
|
||||||
yandexName = "Yandex"
|
yandexName = "Yandex"
|
||||||
)
|
)
|
||||||
|
|
||||||
var defaultFirefoxItems = []item.Item{
|
|
||||||
item.firefoxKey4,
|
|
||||||
item.firefoxPassword,
|
|
||||||
item.firefoxCookie,
|
|
||||||
item.firefoxBookmark,
|
|
||||||
item.firefoxHistory,
|
|
||||||
item.firefoxDownload,
|
|
||||||
item.firefoxCreditCard,
|
|
||||||
item.firefoxLocalStorage,
|
|
||||||
item.firefoxExtension,
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultYandexItems = []item.Item{
|
|
||||||
item.chromiumKey,
|
|
||||||
item.yandexPassword,
|
|
||||||
item.chromiumCookie,
|
|
||||||
item.chromiumBookmark,
|
|
||||||
item.chromiumHistory,
|
|
||||||
item.chromiumDownload,
|
|
||||||
item.yandexCreditCard,
|
|
||||||
item.chromiumLocalStorage,
|
|
||||||
item.chromiumExtension,
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultChromiumItems = []item.Item{
|
|
||||||
item.chromiumKey,
|
|
||||||
item.chromiumPassword,
|
|
||||||
item.chromiumCookie,
|
|
||||||
item.chromiumBookmark,
|
|
||||||
item.chromiumHistory,
|
|
||||||
item.chromiumDownload,
|
|
||||||
item.chromiumCreditCard,
|
|
||||||
item.chromiumLocalStorage,
|
|
||||||
item.chromiumExtension,
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser/item"
|
"hack-browser-data/internal/item"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -18,43 +18,43 @@ var (
|
|||||||
}{
|
}{
|
||||||
"chrome": {
|
"chrome": {
|
||||||
browserInfo: chromeInfo,
|
browserInfo: chromeInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"edge": {
|
"edge": {
|
||||||
browserInfo: edgeInfo,
|
browserInfo: edgeInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"chromium": {
|
"chromium": {
|
||||||
browserInfo: chromiumInfo,
|
browserInfo: chromiumInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"chrome-beta": {
|
"chrome-beta": {
|
||||||
browserInfo: chromeBetaInfo,
|
browserInfo: chromeBetaInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"opera": {
|
"opera": {
|
||||||
browserInfo: operaInfo,
|
browserInfo: operaInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"opera-gx": {
|
"opera-gx": {
|
||||||
browserInfo: operaGXInfo,
|
browserInfo: operaGXInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"vivaldi": {
|
"vivaldi": {
|
||||||
browserInfo: vivaldiInfo,
|
browserInfo: vivaldiInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"coccoc": {
|
"coccoc": {
|
||||||
browserInfo: coccocInfo,
|
browserInfo: coccocInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"brave": {
|
"brave": {
|
||||||
browserInfo: braveInfo,
|
browserInfo: braveInfo,
|
||||||
items: defaultChromiumItems,
|
items: item.DefaultChromium,
|
||||||
},
|
},
|
||||||
"yandex": {
|
"yandex": {
|
||||||
browserInfo: yandexInfo,
|
browserInfo: yandexInfo,
|
||||||
items: defaultYandexItems,
|
items: item.DefaultYandex,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
firefoxList = map[string]struct {
|
firefoxList = map[string]struct {
|
||||||
|
|||||||
@@ -7,14 +7,16 @@ import (
|
|||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser/item"
|
"hack-browser-data/internal/browser/item"
|
||||||
|
|
||||||
"hack-browser-data/internal/decrypter"
|
"hack-browser-data/internal/decrypter"
|
||||||
|
item2 "hack-browser-data/internal/item"
|
||||||
"hack-browser-data/internal/utils"
|
"hack-browser-data/internal/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
chromiumList = map[string]struct {
|
chromiumList = map[string]struct {
|
||||||
browserInfo *browserInfo
|
browserInfo *browserInfo
|
||||||
items []item.Item
|
items []item2.Item
|
||||||
}{
|
}{
|
||||||
"chrome": {
|
"chrome": {
|
||||||
browserInfo: chromeInfo,
|
browserInfo: chromeInfo,
|
||||||
@@ -31,7 +33,7 @@ var (
|
|||||||
}
|
}
|
||||||
firefoxList = map[string]struct {
|
firefoxList = map[string]struct {
|
||||||
browserInfo *browserInfo
|
browserInfo *browserInfo
|
||||||
items []item.Item
|
items []item2.Item
|
||||||
}{
|
}{
|
||||||
"firefox": {
|
"firefox": {
|
||||||
browserInfo: firefoxInfo,
|
browserInfo: firefoxInfo,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser/data"
|
"hack-browser-data/internal/browser/data"
|
||||||
"hack-browser-data/internal/browser/item"
|
"hack-browser-data/internal/item"
|
||||||
)
|
)
|
||||||
|
|
||||||
type chromium struct {
|
type chromium struct {
|
||||||
@@ -21,15 +21,15 @@ type chromium struct {
|
|||||||
itemPaths map[item.Item]string
|
itemPaths map[item.Item]string
|
||||||
}
|
}
|
||||||
|
|
||||||
// newChromium 根据浏览器信息生成 Browser Interface
|
// New 根据浏览器信息生成 Browser Interface
|
||||||
func newChromium(name, storage, profilePath string, items []item.Item) (*chromium, error) {
|
func New(name, storage, profilePath string, items []item.Item) (*chromium, error) {
|
||||||
c := &chromium{
|
c := &chromium{
|
||||||
name: name,
|
name: name,
|
||||||
storage: storage,
|
storage: storage,
|
||||||
profilePath: profilePath,
|
profilePath: profilePath,
|
||||||
items: items,
|
items: items,
|
||||||
}
|
}
|
||||||
absProfilePath := path.Join(homeDir, filepath.Clean(c.browserInfo.profilePath))
|
absProfilePath := path.Join(homeDir, filepath.Clean(c.ProfilePath))
|
||||||
// TODO: Handle file path is not exist
|
// TODO: Handle file path is not exist
|
||||||
if !isFileExist(absProfilePath) {
|
if !isFileExist(absProfilePath) {
|
||||||
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
|
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
|
||||||
@@ -59,7 +59,7 @@ func (c *chromium) GetBrowsingData() []data.BrowsingData {
|
|||||||
|
|
||||||
func (c *chromium) CopyItemFileToLocal() error {
|
func (c *chromium) CopyItemFileToLocal() error {
|
||||||
for item, sourcePath := range c.itemPaths {
|
for item, sourcePath := range c.itemPaths {
|
||||||
var dstFilename = item.FileName()
|
var dstFilename = item.TempName()
|
||||||
locals, _ := filepath.Glob("*")
|
locals, _ := filepath.Glob("*")
|
||||||
for _, v := range locals {
|
for _, v := range locals {
|
||||||
if v == dstFilename {
|
if v == dstFilename {
|
||||||
@@ -94,7 +94,7 @@ func chromiumWalkFunc(items []item.Item, itemPaths map[item.Item]string) filepat
|
|||||||
return func(path string, info os.FileInfo, err error) error {
|
return func(path string, info os.FileInfo, err error) error {
|
||||||
for _, it := range items {
|
for _, it := range items {
|
||||||
switch {
|
switch {
|
||||||
case it.DefaultName() == info.Name():
|
case it.FileName() == info.Name():
|
||||||
if it == it.chromiumKey {
|
if it == it.chromiumKey {
|
||||||
itemPaths[it] = path
|
itemPaths[it] = path
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,15 @@ import (
|
|||||||
"github.com/tidwall/gjson"
|
"github.com/tidwall/gjson"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser/item"
|
"hack-browser-data/internal/browser/item"
|
||||||
|
|
||||||
|
item2 "hack-browser-data/internal/item"
|
||||||
"hack-browser-data/internal/utils"
|
"hack-browser-data/internal/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ChromiumBookmark []bookmark
|
type ChromiumBookmark struct {
|
||||||
|
bookmarks []bookmark
|
||||||
|
item item2.Item
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChromiumBookmark) Parse(masterKey []byte) error {
|
func (c *ChromiumBookmark) Parse(masterKey []byte) error {
|
||||||
bookmarks, err := utils.ReadFile(item.ChromiumBookmarkFilename)
|
bookmarks, err := utils.ReadFile(item.ChromiumBookmarkFilename)
|
||||||
@@ -27,8 +32,8 @@ func (c *ChromiumBookmark) Parse(masterKey []byte) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
// TODO: 使用泛型重构
|
// TODO: 使用泛型重构
|
||||||
sort.Slice(*c, func(i, j int) bool {
|
sort.Slice(c.bookmarks, func(i, j int) bool {
|
||||||
return (*c)[i].DateAdded.After((*c)[j].DateAdded)
|
return (c.bookmarks)[i].DateAdded.After((c.bookmarks)[j].DateAdded)
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package data
|
package data
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type BrowsingData interface {
|
type BrowsingData interface {
|
||||||
Parse(masterKey []byte) error
|
Parse(masterKey []byte) error
|
||||||
|
|||||||
@@ -1 +1,129 @@
|
|||||||
package firefox
|
package firefox
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"hack-browser-data/internal/browser/data"
|
||||||
|
"hack-browser-data/internal/item"
|
||||||
|
)
|
||||||
|
|
||||||
|
type firefox struct {
|
||||||
|
name string
|
||||||
|
storage string
|
||||||
|
profilePath string
|
||||||
|
masterKey []byte
|
||||||
|
items []item.Item
|
||||||
|
itemPaths map[item.Item]string
|
||||||
|
multiItemPaths map[string]map[item.Item]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// New
|
||||||
|
func New(info *browserInfo, items []item.Item) ([]*firefox, error) {
|
||||||
|
f := &firefox{
|
||||||
|
browserInfo: info,
|
||||||
|
items: items,
|
||||||
|
}
|
||||||
|
multiItemPaths, err := getFirefoxItemAbsPath(f.browserInfo.profilePath, f.items)
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(err.Error(), "profile path is not exist") {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
var firefoxList []*firefox
|
||||||
|
for name, value := range multiItemPaths {
|
||||||
|
firefoxList = append(firefoxList, &firefox{
|
||||||
|
browserInfo: &browserInfo{
|
||||||
|
name: name,
|
||||||
|
masterKey: nil,
|
||||||
|
},
|
||||||
|
items: items,
|
||||||
|
itemPaths: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return firefoxList, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFirefoxItemAbsPath(profilePath string, items []item.Item) (map[string]map[item.Item]string, error) {
|
||||||
|
var multiItemPaths = make(map[string]map[item.Item]string)
|
||||||
|
absProfilePath := path.Join(homeDir, filepath.Clean(profilePath))
|
||||||
|
// TODO: Handle read file error
|
||||||
|
if !isFileExist(absProfilePath) {
|
||||||
|
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
|
||||||
|
}
|
||||||
|
err := filepath.Walk(absProfilePath, firefoxWalkFunc(items, multiItemPaths))
|
||||||
|
return multiItemPaths, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *firefox) CopyItemFileToLocal() error {
|
||||||
|
for item, sourcePath := range f.itemPaths {
|
||||||
|
var dstFilename = item.TempName()
|
||||||
|
locals, _ := filepath.Glob("*")
|
||||||
|
for _, v := range locals {
|
||||||
|
if v == dstFilename {
|
||||||
|
err := os.Remove(dstFilename)
|
||||||
|
// TODO: Should Continue all iteration error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Handle read file name error
|
||||||
|
sourceFile, err := ioutil.ReadFile(sourcePath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
err = ioutil.WriteFile(dstFilename, sourceFile, 0777)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) filepath.WalkFunc {
|
||||||
|
return func(path string, info fs.FileInfo, err error) error {
|
||||||
|
for _, v := range items {
|
||||||
|
if info.Name() == v.FileName() {
|
||||||
|
parentDir := getParentDir(path)
|
||||||
|
if _, exist := multiItemPaths[parentDir]; exist {
|
||||||
|
multiItemPaths[parentDir][v] = path
|
||||||
|
} else {
|
||||||
|
multiItemPaths[parentDir] = map[item.Item]string{v: path}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getParentDir(absPath string) string {
|
||||||
|
return filepath.Base(filepath.Dir(absPath))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *firefox) GetMasterKey() ([]byte, error) {
|
||||||
|
return f.masterKey, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *firefox) GetName() string {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *firefox) GetBrowsingData() []data.BrowsingData {
|
||||||
|
var browsingData []data.BrowsingData
|
||||||
|
for item := range f.itemPaths {
|
||||||
|
d := item.NewBrowsingData()
|
||||||
|
if d != nil {
|
||||||
|
browsingData = append(browsingData, d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return browsingData
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
package item
|
|
||||||
|
|
||||||
// item's default filename
|
|
||||||
const (
|
|
||||||
FileChromiumKey = "Local State"
|
|
||||||
FileChromiumCredit = "Web Data"
|
|
||||||
FileChromiumPassword = "Login Data"
|
|
||||||
FileChromiumHistory = "History"
|
|
||||||
FileChromiumDownload = "History"
|
|
||||||
FileChromiumCookie = "Cookies"
|
|
||||||
FileChromiumBookmark = "Bookmarks"
|
|
||||||
FileChromiumLocalStorage = "chromiumLocalStorage"
|
|
||||||
|
|
||||||
FileYandexPassword = "Ya PassMan Data"
|
|
||||||
FileYandexCredit = "Ya Credit Cards"
|
|
||||||
|
|
||||||
FileFirefoxKey4 = "key4.db"
|
|
||||||
FileFirefoxCookie = "cookies.sqlite"
|
|
||||||
FileFirefoxPassword = "logins.json"
|
|
||||||
FileFirefoxData = "places.sqlite"
|
|
||||||
|
|
||||||
FileUnknownItem = "unknown item"
|
|
||||||
FileUnsupportedItem = "unsupported item"
|
|
||||||
)
|
|
||||||
|
|
||||||
// item's renamed filename
|
|
||||||
const (
|
|
||||||
TempChromiumKey = "TempChromiumKey"
|
|
||||||
TempChromiumCredit = "TempChromiumCredit"
|
|
||||||
TempChromiumPassword = "TempChromiumPassword"
|
|
||||||
TempChromiumHistory = "TempChromiumHistory"
|
|
||||||
TempChromiumDownload = "TempChromiumDownload"
|
|
||||||
TempChromiumCookie = "TempChromiumCookie"
|
|
||||||
TempChromiumBookmark = "TempChromiumBookmark"
|
|
||||||
TempChromiumLocalStorage = "TempChromiumLocalStorage"
|
|
||||||
|
|
||||||
TempYandexPassword = "TempYandexPassword"
|
|
||||||
TempYandexCredit = "TempYandexCredit"
|
|
||||||
|
|
||||||
TempFirefoxKey4 = "TempFirefoxKey4"
|
|
||||||
TempFirefoxCookie = "TempFirefoxCookie"
|
|
||||||
TempFirefoxPassword = "TempFirefoxPassword"
|
|
||||||
TempFirefoxDownload = "TempFirefoxDownload"
|
|
||||||
TempFirefoxHistory = "TempFirefoxHistory"
|
|
||||||
TempFirefoxBookmark = "TempFirefoxBookmark"
|
|
||||||
TempFirefoxData = "TempFirefoxData"
|
|
||||||
)
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
package item
|
|
||||||
|
|
||||||
import (
|
|
||||||
data2 "hack-browser-data/internal/browser/data"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Item int
|
|
||||||
|
|
||||||
const (
|
|
||||||
ItemChromiumKey Item = iota
|
|
||||||
ItemChromiumPassword
|
|
||||||
ItemChromiumCookie
|
|
||||||
ItemChromiumBookmark
|
|
||||||
ItemChromiumHistory
|
|
||||||
ItemChromiumDownload
|
|
||||||
ItemChromiumCreditCard
|
|
||||||
ItemChromiumLocalStorage
|
|
||||||
ItemChromiumExtension
|
|
||||||
|
|
||||||
ItemYandexPassword
|
|
||||||
ItemYandexCreditCard
|
|
||||||
|
|
||||||
ItemFirefoxKey4
|
|
||||||
ItemFirefoxPassword
|
|
||||||
ItemFirefoxCookie
|
|
||||||
ItemFirefoxBookmark
|
|
||||||
ItemFirefoxHistory
|
|
||||||
ItemFirefoxDownload
|
|
||||||
ItemFirefoxCreditCard
|
|
||||||
ItemFirefoxLocalStorage
|
|
||||||
ItemFirefoxExtension
|
|
||||||
)
|
|
||||||
|
|
||||||
func (i Item) DefaultName() string {
|
|
||||||
switch i {
|
|
||||||
case ItemChromiumKey:
|
|
||||||
return ChromiumKey
|
|
||||||
case ItemChromiumPassword:
|
|
||||||
return ChromiumPassword
|
|
||||||
case ItemChromiumCookie:
|
|
||||||
return ChromiumCookie
|
|
||||||
case ItemChromiumBookmark:
|
|
||||||
return ChromiumBookmark
|
|
||||||
case ItemChromiumDownload:
|
|
||||||
return ChromiumDownload
|
|
||||||
case ItemChromiumLocalStorage:
|
|
||||||
return ChromiumLocalStorage
|
|
||||||
case ItemChromiumCreditCard:
|
|
||||||
return ChromiumCredit
|
|
||||||
case ItemChromiumExtension:
|
|
||||||
return UnknownItem
|
|
||||||
case ItemChromiumHistory:
|
|
||||||
return ChromiumHistory
|
|
||||||
case ItemYandexPassword:
|
|
||||||
return YandexPassword
|
|
||||||
case ItemYandexCreditCard:
|
|
||||||
return YandexCredit
|
|
||||||
case ItemFirefoxKey4:
|
|
||||||
return FirefoxKey4
|
|
||||||
case ItemFirefoxPassword:
|
|
||||||
return FirefoxPassword
|
|
||||||
case ItemFirefoxCookie:
|
|
||||||
return FirefoxCookie
|
|
||||||
case ItemFirefoxBookmark:
|
|
||||||
return FirefoxData
|
|
||||||
case ItemFirefoxDownload:
|
|
||||||
return FirefoxData
|
|
||||||
case ItemFirefoxLocalStorage:
|
|
||||||
return UnsupportedItem
|
|
||||||
case ItemFirefoxCreditCard:
|
|
||||||
return UnsupportedItem
|
|
||||||
case ItemFirefoxHistory:
|
|
||||||
return FirefoxData
|
|
||||||
case ItemFirefoxExtension:
|
|
||||||
return UnsupportedItem
|
|
||||||
default:
|
|
||||||
return UnknownItem
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i Item) FileName() string {
|
|
||||||
switch i {
|
|
||||||
case chromiumKey:
|
|
||||||
return TempChromiumKey
|
|
||||||
case chromiumPassword:
|
|
||||||
return TempChromiumPassword
|
|
||||||
case chromiumCookie:
|
|
||||||
return ChromiumCookieFilename
|
|
||||||
case chromiumBookmark:
|
|
||||||
return ChromiumBookmarkFilename
|
|
||||||
case chromiumDownload:
|
|
||||||
return ChromiumDownloadFilename
|
|
||||||
case chromiumLocalStorage:
|
|
||||||
return ChromiumLocalStorageFilename
|
|
||||||
case chromiumCreditCard:
|
|
||||||
return TempChromiumCredit
|
|
||||||
case chromiumHistory:
|
|
||||||
return TempChromiumHistory
|
|
||||||
case chromiumExtension:
|
|
||||||
return UnsupportedItem
|
|
||||||
case yandexPassword:
|
|
||||||
return TempChromiumPassword
|
|
||||||
case yandexCreditCard:
|
|
||||||
return TempChromiumCredit
|
|
||||||
case firefoxKey4:
|
|
||||||
return FirefoxKey4Filename
|
|
||||||
case firefoxPassword:
|
|
||||||
return FirefoxPasswordFilename
|
|
||||||
case firefoxCookie:
|
|
||||||
return FirefoxCookieFilename
|
|
||||||
case firefoxBookmark:
|
|
||||||
return FirefoxBookmarkFilename
|
|
||||||
case firefoxDownload:
|
|
||||||
return FirefoxDownloadFilename
|
|
||||||
case firefoxLocalStorage:
|
|
||||||
return UnsupportedItem
|
|
||||||
case firefoxCreditCard:
|
|
||||||
return UnsupportedItem
|
|
||||||
case firefoxHistory:
|
|
||||||
return FirefoxHistoryFilename
|
|
||||||
case firefoxExtension:
|
|
||||||
return UnsupportedItem
|
|
||||||
default:
|
|
||||||
return UnknownItem
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i Item) NewBrowsingData() data2.BrowsingData {
|
|
||||||
switch i {
|
|
||||||
case chromiumKey:
|
|
||||||
return nil
|
|
||||||
case chromiumPassword:
|
|
||||||
return &data2.ChromiumPassword{}
|
|
||||||
case chromiumCookie:
|
|
||||||
return &data2.ChromiumCookie{}
|
|
||||||
case chromiumBookmark:
|
|
||||||
return &data2.ChromiumBookmark{}
|
|
||||||
case chromiumDownload:
|
|
||||||
return &data2.ChromiumDownload{}
|
|
||||||
case chromiumLocalStorage:
|
|
||||||
return nil
|
|
||||||
case chromiumCreditCard:
|
|
||||||
return &data2.ChromiumCreditCard{}
|
|
||||||
case chromiumExtension:
|
|
||||||
return nil
|
|
||||||
case chromiumHistory:
|
|
||||||
return &data2.ChromiumHistory{}
|
|
||||||
case yandexPassword:
|
|
||||||
return &data2.ChromiumPassword{}
|
|
||||||
case yandexCreditCard:
|
|
||||||
return &data2.ChromiumCreditCard{}
|
|
||||||
case firefoxPassword:
|
|
||||||
return &data2.FirefoxPassword{}
|
|
||||||
case firefoxCookie:
|
|
||||||
return &data2.FirefoxCookie{}
|
|
||||||
case firefoxBookmark:
|
|
||||||
return &data2.FirefoxBookmark{}
|
|
||||||
case firefoxDownload:
|
|
||||||
return &data2.FirefoxDownload{}
|
|
||||||
case firefoxHistory:
|
|
||||||
return &data2.FirefoxHistory{}
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package item
|
||||||
|
|
||||||
|
// item's default filename
|
||||||
|
const (
|
||||||
|
fileChromiumKey = "Local State"
|
||||||
|
fileChromiumCredit = "Web Data"
|
||||||
|
fileChromiumPassword = "Login Data"
|
||||||
|
fileChromiumHistory = "History"
|
||||||
|
fileChromiumDownload = "History"
|
||||||
|
fileChromiumCookie = "Cookies"
|
||||||
|
fileChromiumBookmark = "Bookmarks"
|
||||||
|
fileChromiumLocalStorage = "chromiumLocalStorage"
|
||||||
|
|
||||||
|
fileYandexPassword = "Ya PassMan Data"
|
||||||
|
fileYandexCredit = "Ya Credit Cards"
|
||||||
|
|
||||||
|
fileFirefoxKey4 = "key4.db"
|
||||||
|
fileFirefoxCookie = "cookies.sqlite"
|
||||||
|
fileFirefoxPassword = "logins.json"
|
||||||
|
fileFirefoxData = "places.sqlite"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
UnknownItem = "unknown item"
|
||||||
|
UnsupportedItem = "unsupported item"
|
||||||
|
)
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
package item
|
||||||
|
|
||||||
|
import (
|
||||||
|
"hack-browser-data/internal/browser/data"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Item int
|
||||||
|
|
||||||
|
const (
|
||||||
|
ChromiumKey Item = iota
|
||||||
|
ChromiumPassword
|
||||||
|
ChromiumCookie
|
||||||
|
ChromiumBookmark
|
||||||
|
ChromiumHistory
|
||||||
|
ChromiumDownload
|
||||||
|
ChromiumCreditCard
|
||||||
|
ChromiumLocalStorage
|
||||||
|
ChromiumExtension
|
||||||
|
|
||||||
|
YandexPassword
|
||||||
|
YandexCreditCard
|
||||||
|
|
||||||
|
FirefoxKey4
|
||||||
|
FirefoxPassword
|
||||||
|
FirefoxCookie
|
||||||
|
FirefoxBookmark
|
||||||
|
FirefoxHistory
|
||||||
|
FirefoxDownload
|
||||||
|
FirefoxCreditCard
|
||||||
|
FirefoxLocalStorage
|
||||||
|
FirefoxExtension
|
||||||
|
)
|
||||||
|
|
||||||
|
var DefaultFirefox = []Item{
|
||||||
|
FirefoxKey4,
|
||||||
|
FirefoxPassword,
|
||||||
|
FirefoxCookie,
|
||||||
|
FirefoxBookmark,
|
||||||
|
FirefoxHistory,
|
||||||
|
FirefoxDownload,
|
||||||
|
FirefoxCreditCard,
|
||||||
|
FirefoxLocalStorage,
|
||||||
|
FirefoxExtension,
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultYandex = []Item{
|
||||||
|
ChromiumKey,
|
||||||
|
ChromiumCookie,
|
||||||
|
ChromiumBookmark,
|
||||||
|
ChromiumHistory,
|
||||||
|
ChromiumDownload,
|
||||||
|
ChromiumLocalStorage,
|
||||||
|
ChromiumExtension,
|
||||||
|
YandexPassword,
|
||||||
|
YandexCreditCard,
|
||||||
|
}
|
||||||
|
|
||||||
|
var DefaultChromium = []Item{
|
||||||
|
ChromiumKey,
|
||||||
|
ChromiumPassword,
|
||||||
|
ChromiumCookie,
|
||||||
|
ChromiumBookmark,
|
||||||
|
ChromiumHistory,
|
||||||
|
ChromiumDownload,
|
||||||
|
ChromiumCreditCard,
|
||||||
|
ChromiumLocalStorage,
|
||||||
|
ChromiumExtension,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i Item) FileName() string {
|
||||||
|
switch i {
|
||||||
|
case ChromiumKey:
|
||||||
|
return fileChromiumKey
|
||||||
|
case ChromiumPassword:
|
||||||
|
return fileChromiumPassword
|
||||||
|
case ChromiumCookie:
|
||||||
|
return fileChromiumCookie
|
||||||
|
case ChromiumBookmark:
|
||||||
|
return fileChromiumBookmark
|
||||||
|
case ChromiumDownload:
|
||||||
|
return fileChromiumDownload
|
||||||
|
case ChromiumLocalStorage:
|
||||||
|
return fileChromiumLocalStorage
|
||||||
|
case ChromiumCreditCard:
|
||||||
|
return fileChromiumCredit
|
||||||
|
case ChromiumExtension:
|
||||||
|
return UnknownItem
|
||||||
|
case ChromiumHistory:
|
||||||
|
return fileChromiumHistory
|
||||||
|
case YandexPassword:
|
||||||
|
return fileYandexPassword
|
||||||
|
case YandexCreditCard:
|
||||||
|
return fileYandexCredit
|
||||||
|
case FirefoxKey4:
|
||||||
|
return fileFirefoxKey4
|
||||||
|
case FirefoxPassword:
|
||||||
|
return fileFirefoxPassword
|
||||||
|
case FirefoxCookie:
|
||||||
|
return fileFirefoxCookie
|
||||||
|
case FirefoxBookmark:
|
||||||
|
return fileFirefoxData
|
||||||
|
case FirefoxDownload:
|
||||||
|
return fileFirefoxData
|
||||||
|
case FirefoxLocalStorage:
|
||||||
|
return UnsupportedItem
|
||||||
|
case FirefoxCreditCard:
|
||||||
|
return UnsupportedItem
|
||||||
|
case FirefoxHistory:
|
||||||
|
return fileFirefoxData
|
||||||
|
case FirefoxExtension:
|
||||||
|
return UnsupportedItem
|
||||||
|
default:
|
||||||
|
return UnknownItem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i Item) String() string {
|
||||||
|
switch i {
|
||||||
|
case ChromiumKey:
|
||||||
|
return "chromiumKey"
|
||||||
|
case ChromiumPassword:
|
||||||
|
return "password"
|
||||||
|
case ChromiumCookie:
|
||||||
|
return "cookie"
|
||||||
|
case ChromiumBookmark:
|
||||||
|
return "bookmark"
|
||||||
|
case ChromiumDownload:
|
||||||
|
return "download"
|
||||||
|
case ChromiumLocalStorage:
|
||||||
|
return "localStorage"
|
||||||
|
case ChromiumCreditCard:
|
||||||
|
return "creditCard"
|
||||||
|
case ChromiumExtension:
|
||||||
|
return UnsupportedItem
|
||||||
|
case ChromiumHistory:
|
||||||
|
return "history"
|
||||||
|
case YandexPassword:
|
||||||
|
return "yandexPassword"
|
||||||
|
case YandexCreditCard:
|
||||||
|
return "yandexCreditCard"
|
||||||
|
case FirefoxKey4:
|
||||||
|
return "firefoxKey4"
|
||||||
|
case FirefoxPassword:
|
||||||
|
return "firefoxPassword"
|
||||||
|
case FirefoxCookie:
|
||||||
|
return "firefoxCookie"
|
||||||
|
case FirefoxBookmark:
|
||||||
|
return "firefoxBookmark"
|
||||||
|
case FirefoxDownload:
|
||||||
|
return "firefoxDownload"
|
||||||
|
case FirefoxHistory:
|
||||||
|
return "firefoxHistory"
|
||||||
|
case FirefoxLocalStorage:
|
||||||
|
return UnsupportedItem
|
||||||
|
case FirefoxCreditCard:
|
||||||
|
return UnsupportedItem
|
||||||
|
case FirefoxExtension:
|
||||||
|
return UnsupportedItem
|
||||||
|
default:
|
||||||
|
return UnknownItem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i Item) NewBrowsingData() data.BrowsingData {
|
||||||
|
switch i {
|
||||||
|
case ChromiumKey:
|
||||||
|
return nil
|
||||||
|
case ChromiumPassword:
|
||||||
|
return &data.ChromiumPassword{}
|
||||||
|
case ChromiumCookie:
|
||||||
|
return &data.ChromiumCookie{}
|
||||||
|
case ChromiumBookmark:
|
||||||
|
return &data.ChromiumBookmark{}
|
||||||
|
case ChromiumDownload:
|
||||||
|
return &data.ChromiumDownload{}
|
||||||
|
case ChromiumLocalStorage:
|
||||||
|
return nil
|
||||||
|
case ChromiumCreditCard:
|
||||||
|
return &data.ChromiumCreditCard{}
|
||||||
|
case ChromiumExtension:
|
||||||
|
return nil
|
||||||
|
case ChromiumHistory:
|
||||||
|
return &data.ChromiumHistory{}
|
||||||
|
case YandexPassword:
|
||||||
|
return &data.ChromiumPassword{}
|
||||||
|
case YandexCreditCard:
|
||||||
|
return &data.ChromiumCreditCard{}
|
||||||
|
case FirefoxPassword:
|
||||||
|
return &data.FirefoxPassword{}
|
||||||
|
case FirefoxCookie:
|
||||||
|
return &data.FirefoxCookie{}
|
||||||
|
case FirefoxBookmark:
|
||||||
|
return &data.FirefoxBookmark{}
|
||||||
|
case FirefoxDownload:
|
||||||
|
return &data.FirefoxDownload{}
|
||||||
|
case FirefoxHistory:
|
||||||
|
return &data.FirefoxHistory{}
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user