feat: rename item name

pull/125/head
ᴍᴏᴏɴD4ʀᴋ 3 years ago
parent 05659822b7
commit 303e00cd28
  1. 3
      go.mod
  2. 6
      go.sum
  3. 221
      internal/browser/browser.go
  4. 22
      internal/browser/browser_darwin.go
  5. 6
      internal/browser/browser_windows.go
  6. 12
      internal/browser/chromium/chromium.go
  7. 11
      internal/browser/data/bookmark.go
  8. 4
      internal/browser/data/browsingdata.go
  9. 128
      internal/browser/firefox/firefox.go
  10. 47
      internal/browser/item/filename.go
  11. 165
      internal/browser/item/item.go
  12. 26
      internal/item/filename.go
  13. 201
      internal/item/item.go
  14. 0
      internal/item/sql.go

@ -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
}
}
Loading…
Cancel
Save