mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
fix: filter result if item is empty and add utf8 encoder to csv
Merge pull request #144 from moonD4rk/fix/bug
This commit is contained in:
@@ -134,7 +134,7 @@ USAGE:
|
|||||||
Github Link: https://github.com/moonD4rk/HackBrowserData
|
Github Link: https://github.com/moonD4rk/HackBrowserData
|
||||||
|
|
||||||
VERSION:
|
VERSION:
|
||||||
0.4.2
|
0.4.3
|
||||||
|
|
||||||
GLOBAL OPTIONS:
|
GLOBAL OPTIONS:
|
||||||
--verbose, --vv verbose (default: false)
|
--verbose, --vv verbose (default: false)
|
||||||
|
|||||||
+1
-1
@@ -129,7 +129,7 @@ USAGE:
|
|||||||
Github Link: https://github.com/moonD4rk/HackBrowserData
|
Github Link: https://github.com/moonD4rk/HackBrowserData
|
||||||
|
|
||||||
VERSION:
|
VERSION:
|
||||||
0.4.2
|
0.4.3
|
||||||
|
|
||||||
GLOBAL OPTIONS:
|
GLOBAL OPTIONS:
|
||||||
--verbose, --vv verbose (default: false)
|
--verbose, --vv verbose (default: false)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ require (
|
|||||||
github.com/urfave/cli/v2 v2.4.0
|
github.com/urfave/cli/v2 v2.4.0
|
||||||
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3
|
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3
|
||||||
golang.org/x/exp v0.0.0-20220414153411-bcd21879b8fd
|
golang.org/x/exp v0.0.0-20220414153411-bcd21879b8fd
|
||||||
|
golang.org/x/text v0.3.6
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
|
||||||
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
|
|||||||
@@ -76,10 +76,23 @@ func getBookmarkChildren(value gjson.Result, w *ChromiumBookmark) (children gjso
|
|||||||
return children
|
return children
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func bookmarkType(a int64) string {
|
||||||
|
switch a {
|
||||||
|
case 1:
|
||||||
|
return "url"
|
||||||
|
default:
|
||||||
|
return "folder"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChromiumBookmark) Name() string {
|
func (c *ChromiumBookmark) Name() string {
|
||||||
return "bookmark"
|
return "bookmark"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumBookmark) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxBookmark []bookmark
|
type FirefoxBookmark []bookmark
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -134,11 +147,6 @@ func (f *FirefoxBookmark) Name() string {
|
|||||||
return "bookmark"
|
return "bookmark"
|
||||||
}
|
}
|
||||||
|
|
||||||
func bookmarkType(a int64) string {
|
func (f *FirefoxBookmark) Length() int {
|
||||||
switch a {
|
return len(*f)
|
||||||
case 1:
|
|
||||||
return "url"
|
|
||||||
default:
|
|
||||||
return "folder"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ type Source interface {
|
|||||||
Parse(masterKey []byte) error
|
Parse(masterKey []byte) error
|
||||||
|
|
||||||
Name() string
|
Name() string
|
||||||
|
|
||||||
|
Length() int
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(sources []item.Item) *Data {
|
func New(sources []item.Item) *Data {
|
||||||
@@ -47,6 +49,10 @@ func (d *Data) Output(dir, browserName, flag string) {
|
|||||||
output := NewOutPutter(flag)
|
output := NewOutPutter(flag)
|
||||||
|
|
||||||
for _, source := range d.sources {
|
for _, source := range d.sources {
|
||||||
|
if source.Length() == 0 {
|
||||||
|
// if the length of the export data is 0, then it is not necessary to output
|
||||||
|
continue
|
||||||
|
}
|
||||||
filename := fileutil.Filename(browserName, source.Name(), output.Ext())
|
filename := fileutil.Filename(browserName, source.Name(), output.Ext())
|
||||||
|
|
||||||
f, err := output.CreateFile(dir, filename)
|
f, err := output.CreateFile(dir, filename)
|
||||||
|
|||||||
@@ -93,6 +93,10 @@ func (c *ChromiumCookie) Name() string {
|
|||||||
return "cookie"
|
return "cookie"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumCookie) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxCookie []cookie
|
type FirefoxCookie []cookie
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -137,3 +141,7 @@ func (f *FirefoxCookie) Parse(masterKey []byte) error {
|
|||||||
func (f *FirefoxCookie) Name() string {
|
func (f *FirefoxCookie) Name() string {
|
||||||
return "cookie"
|
return "cookie"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxCookie) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
@@ -76,6 +76,10 @@ func (c *ChromiumCreditCard) Name() string {
|
|||||||
return "creditcard"
|
return "creditcard"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumCreditCard) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type YandexCreditCard []card
|
type YandexCreditCard []card
|
||||||
|
|
||||||
func (c *YandexCreditCard) Parse(masterKey []byte) error {
|
func (c *YandexCreditCard) Parse(masterKey []byte) error {
|
||||||
@@ -127,3 +131,7 @@ func (c *YandexCreditCard) Parse(masterKey []byte) error {
|
|||||||
func (c *YandexCreditCard) Name() string {
|
func (c *YandexCreditCard) Name() string {
|
||||||
return "creditcard"
|
return "creditcard"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *YandexCreditCard) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|||||||
@@ -70,6 +70,10 @@ func (c *ChromiumDownload) Name() string {
|
|||||||
return "download"
|
return "download"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumDownload) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxDownload []download
|
type FirefoxDownload []download
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -131,3 +135,7 @@ func (f *FirefoxDownload) Parse(masterKey []byte) error {
|
|||||||
func (f *FirefoxDownload) Name() string {
|
func (f *FirefoxDownload) Name() string {
|
||||||
return "download"
|
return "download"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxDownload) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,6 +50,10 @@ func (c *ChromiumExtension) Name() string {
|
|||||||
return "extension"
|
return "extension"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumExtension) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxExtension []*extension
|
type FirefoxExtension []*extension
|
||||||
|
|
||||||
func (f *FirefoxExtension) Parse(masterKey []byte) error {
|
func (f *FirefoxExtension) Parse(masterKey []byte) error {
|
||||||
@@ -73,3 +77,7 @@ func (f *FirefoxExtension) Parse(masterKey []byte) error {
|
|||||||
func (f *FirefoxExtension) Name() string {
|
func (f *FirefoxExtension) Name() string {
|
||||||
return "extension"
|
return "extension"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxExtension) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
@@ -65,6 +65,10 @@ func (c *ChromiumHistory) Name() string {
|
|||||||
return "history"
|
return "history"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumHistory) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxHistory []history
|
type FirefoxHistory []history
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -119,3 +123,7 @@ func (f *FirefoxHistory) Parse(masterKey []byte) error {
|
|||||||
func (f *FirefoxHistory) Name() string {
|
func (f *FirefoxHistory) Name() string {
|
||||||
return "history"
|
return "history"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxHistory) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ func (c *ChromiumLocalStorage) Name() string {
|
|||||||
return "localStorage"
|
return "localStorage"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumLocalStorage) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *storage) fillKey(b []byte) {
|
func (s *storage) fillKey(b []byte) {
|
||||||
keys := bytes.Split(b, []byte("\x00"))
|
keys := bytes.Split(b, []byte("\x00"))
|
||||||
if len(keys) == 1 && bytes.HasPrefix(keys[0], []byte("META:")) {
|
if len(keys) == 1 && bytes.HasPrefix(keys[0], []byte("META:")) {
|
||||||
@@ -142,3 +146,7 @@ func (s *storage) fillFirefox(originKey, key, value string) {
|
|||||||
func (f *FirefoxLocalStorage) Name() string {
|
func (f *FirefoxLocalStorage) Name() string {
|
||||||
return "localStorage"
|
return "localStorage"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxLocalStorage) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import (
|
|||||||
|
|
||||||
"github.com/gocarina/gocsv"
|
"github.com/gocarina/gocsv"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
|
"golang.org/x/text/encoding/unicode"
|
||||||
|
"golang.org/x/text/transform"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OutPutter struct {
|
type OutPutter struct {
|
||||||
@@ -35,7 +37,7 @@ func (o *OutPutter) Write(data Source, writer io.Writer) error {
|
|||||||
return encoder.Encode(data)
|
return encoder.Encode(data)
|
||||||
default:
|
default:
|
||||||
gocsv.SetCSVWriter(func(w io.Writer) *gocsv.SafeCSVWriter {
|
gocsv.SetCSVWriter(func(w io.Writer) *gocsv.SafeCSVWriter {
|
||||||
writer := csv.NewWriter(w)
|
writer := csv.NewWriter(transform.NewWriter(w, unicode.UTF8BOM.NewEncoder()))
|
||||||
writer.Comma = ','
|
writer.Comma = ','
|
||||||
return gocsv.NewSafeCSVWriter(writer)
|
return gocsv.NewSafeCSVWriter(writer)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ func (c *ChromiumPassword) Name() string {
|
|||||||
return "password"
|
return "password"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChromiumPassword) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type YandexPassword []loginData
|
type YandexPassword []loginData
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -154,6 +158,10 @@ func (c *YandexPassword) Name() string {
|
|||||||
return "password"
|
return "password"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *YandexPassword) Length() int {
|
||||||
|
return len(*c)
|
||||||
|
}
|
||||||
|
|
||||||
type FirefoxPassword []loginData
|
type FirefoxPassword []loginData
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -224,10 +232,6 @@ func (f *FirefoxPassword) Parse(masterKey []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FirefoxPassword) Name() string {
|
|
||||||
return "password"
|
|
||||||
}
|
|
||||||
|
|
||||||
func getFirefoxDecryptKey(key4file string) (item1, item2, a11, a102 []byte, err error) {
|
func getFirefoxDecryptKey(key4file string) (item1, item2, a11, a102 []byte, err error) {
|
||||||
var keyDB *sql.DB
|
var keyDB *sql.DB
|
||||||
keyDB, err = sql.Open("sqlite3", key4file)
|
keyDB, err = sql.Open("sqlite3", key4file)
|
||||||
@@ -278,3 +282,11 @@ func getFirefoxLoginData(loginJson string) (l []loginData, err error) {
|
|||||||
}
|
}
|
||||||
return l, nil
|
return l, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxPassword) Name() string {
|
||||||
|
return "password"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FirefoxPassword) Length() int {
|
||||||
|
return len(*f)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user