mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
feat: rename item name
This commit is contained in:
@@ -4,11 +4,8 @@ go 1.18
|
||||
|
||||
require (
|
||||
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/jszwec/csvutil v1.3.0
|
||||
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/urfave/cli/v2 v2.2.0
|
||||
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/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/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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
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/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
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/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
package browser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"hack-browser-data/internal/browser/data"
|
||||
"hack-browser-data/internal/browser/item"
|
||||
)
|
||||
|
||||
type Browser interface {
|
||||
@@ -90,185 +84,6 @@ func pickFirefox(name string) []Browser {
|
||||
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 {
|
||||
var l []string
|
||||
for c := range chromiumList {
|
||||
@@ -313,39 +128,3 @@ const (
|
||||
coccocName = "CocCoc"
|
||||
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"
|
||||
|
||||
"hack-browser-data/internal/browser/item"
|
||||
"hack-browser-data/internal/item"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -18,43 +18,43 @@ var (
|
||||
}{
|
||||
"chrome": {
|
||||
browserInfo: chromeInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"edge": {
|
||||
browserInfo: edgeInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"chromium": {
|
||||
browserInfo: chromiumInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"chrome-beta": {
|
||||
browserInfo: chromeBetaInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"opera": {
|
||||
browserInfo: operaInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"opera-gx": {
|
||||
browserInfo: operaGXInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"vivaldi": {
|
||||
browserInfo: vivaldiInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"coccoc": {
|
||||
browserInfo: coccocInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"brave": {
|
||||
browserInfo: braveInfo,
|
||||
items: defaultChromiumItems,
|
||||
items: item.DefaultChromium,
|
||||
},
|
||||
"yandex": {
|
||||
browserInfo: yandexInfo,
|
||||
items: defaultYandexItems,
|
||||
items: item.DefaultYandex,
|
||||
},
|
||||
}
|
||||
firefoxList = map[string]struct {
|
||||
|
||||
@@ -7,14 +7,16 @@ import (
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
"hack-browser-data/internal/browser/item"
|
||||
|
||||
"hack-browser-data/internal/decrypter"
|
||||
item2 "hack-browser-data/internal/item"
|
||||
"hack-browser-data/internal/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
chromiumList = map[string]struct {
|
||||
browserInfo *browserInfo
|
||||
items []item.Item
|
||||
items []item2.Item
|
||||
}{
|
||||
"chrome": {
|
||||
browserInfo: chromeInfo,
|
||||
@@ -31,7 +33,7 @@ var (
|
||||
}
|
||||
firefoxList = map[string]struct {
|
||||
browserInfo *browserInfo
|
||||
items []item.Item
|
||||
items []item2.Item
|
||||
}{
|
||||
"firefox": {
|
||||
browserInfo: firefoxInfo,
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"hack-browser-data/internal/browser/data"
|
||||
"hack-browser-data/internal/browser/item"
|
||||
"hack-browser-data/internal/item"
|
||||
)
|
||||
|
||||
type chromium struct {
|
||||
@@ -21,15 +21,15 @@ type chromium struct {
|
||||
itemPaths map[item.Item]string
|
||||
}
|
||||
|
||||
// newChromium 根据浏览器信息生成 Browser Interface
|
||||
func newChromium(name, storage, profilePath string, items []item.Item) (*chromium, error) {
|
||||
// New 根据浏览器信息生成 Browser Interface
|
||||
func New(name, storage, profilePath string, items []item.Item) (*chromium, error) {
|
||||
c := &chromium{
|
||||
name: name,
|
||||
storage: storage,
|
||||
profilePath: profilePath,
|
||||
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
|
||||
if !isFileExist(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 {
|
||||
for item, sourcePath := range c.itemPaths {
|
||||
var dstFilename = item.FileName()
|
||||
var dstFilename = item.TempName()
|
||||
locals, _ := filepath.Glob("*")
|
||||
for _, v := range locals {
|
||||
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 {
|
||||
for _, it := range items {
|
||||
switch {
|
||||
case it.DefaultName() == info.Name():
|
||||
case it.FileName() == info.Name():
|
||||
if it == it.chromiumKey {
|
||||
itemPaths[it] = path
|
||||
}
|
||||
|
||||
@@ -8,10 +8,15 @@ import (
|
||||
"github.com/tidwall/gjson"
|
||||
|
||||
"hack-browser-data/internal/browser/item"
|
||||
|
||||
item2 "hack-browser-data/internal/item"
|
||||
"hack-browser-data/internal/utils"
|
||||
)
|
||||
|
||||
type ChromiumBookmark []bookmark
|
||||
type ChromiumBookmark struct {
|
||||
bookmarks []bookmark
|
||||
item item2.Item
|
||||
}
|
||||
|
||||
func (c *ChromiumBookmark) Parse(masterKey []byte) error {
|
||||
bookmarks, err := utils.ReadFile(item.ChromiumBookmarkFilename)
|
||||
@@ -27,8 +32,8 @@ func (c *ChromiumBookmark) Parse(masterKey []byte) error {
|
||||
})
|
||||
}
|
||||
// TODO: 使用泛型重构
|
||||
sort.Slice(*c, func(i, j int) bool {
|
||||
return (*c)[i].DateAdded.After((*c)[j].DateAdded)
|
||||
sort.Slice(c.bookmarks, func(i, j int) bool {
|
||||
return (c.bookmarks)[i].DateAdded.After((c.bookmarks)[j].DateAdded)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package data
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type BrowsingData interface {
|
||||
Parse(masterKey []byte) error
|
||||
|
||||
@@ -1 +1,129 @@
|
||||
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