Skip to content

Commit 04e620e

Browse files
committed
refactor: output browsing data package
1 parent 13c92b0 commit 04e620e

8 files changed

Lines changed: 58 additions & 35 deletions

File tree

cmd/hack-browser-data/main.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package main
22

33
import (
4-
"fmt"
54
"os"
65
"strings"
76

87
"hack-browser-data/internal/browser"
98
"hack-browser-data/internal/log"
10-
"hack-browser-data/internal/outputter"
119
"hack-browser-data/internal/utils/fileutil"
1210

1311
"github.com/urfave/cli/v2"
@@ -45,7 +43,7 @@ func Execute() {
4543
if verbose {
4644
log.Init("debug")
4745
} else {
48-
log.Init("error")
46+
log.Init("notice")
4947
}
5048
var (
5149
browsers []browser.Browser
@@ -56,29 +54,16 @@ func Execute() {
5654
if err != nil {
5755
log.Error(err)
5856
}
59-
output := outputter.New(outputFormat)
6057

6158
for _, b := range browsers {
6259
data, err := b.GetBrowsingData()
6360
if err != nil {
6461
log.Error(err)
6562
}
66-
var f *os.File
67-
for _, source := range data.Sources {
68-
filename := fmt.Sprintf("%s_%s.%s", b.Name(), source.Name(), outputFormat)
69-
f, err = output.CreateFile(outputDir, filename)
70-
if err != nil {
71-
log.Error(err)
72-
}
73-
err = output.Write(source, f)
74-
if err != nil {
75-
log.Error(err)
76-
}
77-
}
63+
data.Output(outputDir, browserName, outputFormat)
7864
}
7965
if compress {
80-
err = fileutil.CompressDir(outputDir)
81-
if err != nil {
66+
if err = fileutil.CompressDir(outputDir); err != nil {
8267
log.Error(err)
8368
}
8469
}

internal/browingdata/browsingdata.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package browingdata
22

33
import (
4+
"path"
45
"time"
56

67
"hack-browser-data/internal/item"
78
"hack-browser-data/internal/log"
9+
"hack-browser-data/internal/outputter"
10+
"hack-browser-data/internal/utils/fileutil"
811
)
912

1013
type Data struct {
@@ -35,6 +38,24 @@ func (d *Data) Recovery(masterKey []byte) error {
3538
return nil
3639
}
3740

41+
func (d *Data) Output(dir, browserName, output string) {
42+
outputter := outputter.New(output)
43+
44+
for _, source := range d.Sources {
45+
46+
filename := fileutil.Filename(browserName, source.Name(), outputter.Ext())
47+
48+
f, err := outputter.CreateFile(dir, filename)
49+
if err != nil {
50+
log.Error(err)
51+
}
52+
if err := outputter.Write(source, f); err != nil {
53+
log.Error(err)
54+
}
55+
log.Noticef("output to file %s success", path.Join(dir, filename))
56+
}
57+
}
58+
3859
func (d *Data) addSource(Sources []item.Item) {
3960
for _, source := range Sources {
4061
switch source {
@@ -69,7 +90,7 @@ func (d *Data) addSource(Sources []item.Item) {
6990
}
7091

7192
const (
72-
queryChromiumCredit = `SELECT guid, name_on_card, expiration_month, expiration_year, card_number_encrypted FROM credit_cards`
93+
queryChromiumCredit = `SELECT guid, name_on_card, expiration_month, expiration_year, card_number_encrypted, billing_address_id, nickname FROM credit_cards`
7394
queryChromiumLogin = `SELECT origin_url, username_value, password_value, date_created FROM logins`
7495
queryYandexLogin = `SELECT action_url, username_value, password_value, date_created FROM logins`
7596
queryChromiumHistory = `SELECT url, title, visit_count, last_visit_time FROM urls`
@@ -126,5 +147,7 @@ type (
126147
ExpirationYear string
127148
ExpirationMonth string
128149
CardNumber string
150+
Address string
151+
NickName string
129152
}
130153
)

internal/browingdata/creditcard.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,19 @@ func (c *ChromiumCreditCard) Parse(masterKey []byte) error {
2727
defer rows.Close()
2828
for rows.Next() {
2929
var (
30-
name, month, year, guid string
31-
value, encryptValue []byte
30+
name, month, year, guid, address, nickname string
31+
value, encryptValue []byte
3232
)
33-
if err := rows.Scan(&guid, &name, &month, &year, &encryptValue); err != nil {
33+
if err := rows.Scan(&guid, &name, &month, &year, &encryptValue, &address, &nickname); err != nil {
3434
log.Warn(err)
3535
}
36-
creditCardInfo := card{
36+
ccInfo := card{
3737
GUID: guid,
3838
Name: name,
3939
ExpirationMonth: month,
4040
ExpirationYear: year,
41+
Address: address,
42+
NickName: nickname,
4143
}
4244
if masterKey == nil {
4345
value, err = decrypter.DPApi(encryptValue)
@@ -50,8 +52,8 @@ func (c *ChromiumCreditCard) Parse(masterKey []byte) error {
5052
return err
5153
}
5254
}
53-
creditCardInfo.CardNumber = string(value)
54-
*c = append(*c, creditCardInfo)
55+
ccInfo.CardNumber = string(value)
56+
*c = append(*c, ccInfo)
5557
}
5658
return nil
5759
}

internal/browingdata/password.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ func (f *FirefoxPassword) Parse(masterKey []byte) error {
189189
}
190190
*f = append(*f, loginData{
191191
LoginUrl: v.LoginUrl,
192-
UserName: string(decrypter.PKCS5UnPadding(user)),
193-
Password: string(decrypter.PKCS5UnPadding(pwd)),
192+
UserName: string(user),
193+
Password: string(pwd),
194194
CreateDate: v.CreateDate,
195195
})
196196
}

internal/browser/browser.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ func pickFirefox(name, profile string) []Browser {
8585
}
8686
if multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items); err == nil {
8787
for _, b := range multiFirefox {
88-
log.Noticef("find browser: firefox %s success", b.Name())
88+
log.Noticef("find browser firefox %s success", b.Name())
8989
browsers = append(browsers, b)
9090
}
9191
} else {
9292
if strings.Contains(err.Error(), "profile path is not exist") {
93-
log.Noticef("find browser: firefox %s failed, profile path is not exist", v.name)
93+
log.Noticef("find browser firefox %s failed, profile path is not exist", v.name)
9494
} else {
9595
log.Error(err)
9696
}

internal/log/log.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func Init(l string) {
1313
if l == "debug" {
1414
std = newStdLogger(slog.DebugLevel)
1515
} else {
16-
std = newStdLogger(slog.ErrorLevel)
16+
std = newStdLogger(slog.NoticeLevel)
1717
}
1818
}
1919

internal/outputter/outputter.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ import (
1313
"hack-browser-data/internal/browingdata"
1414
)
1515

16-
type outPutter struct {
16+
type OutPutter struct {
1717
json bool
1818
csv bool
1919
}
2020

21-
func New(flag string) *outPutter {
22-
o := &outPutter{}
21+
func New(flag string) *OutPutter {
22+
o := &OutPutter{}
2323
if flag == "json" {
2424
o.json = true
2525
} else {
@@ -28,7 +28,7 @@ func New(flag string) *outPutter {
2828
return o
2929
}
3030

31-
func (o *outPutter) Write(data browingdata.Source, writer io.Writer) error {
31+
func (o *OutPutter) Write(data browingdata.Source, writer io.Writer) error {
3232
switch o.json {
3333
case true:
3434
encoder := jsoniter.NewEncoder(writer)
@@ -45,7 +45,7 @@ func (o *outPutter) Write(data browingdata.Source, writer io.Writer) error {
4545
}
4646
}
4747

48-
func (o *outPutter) CreateFile(dir, filename string) (*os.File, error) {
48+
func (o *OutPutter) CreateFile(dir, filename string) (*os.File, error) {
4949
if filename == "" {
5050
return nil, errors.New("empty filename")
5151
}
@@ -68,3 +68,11 @@ func (o *outPutter) CreateFile(dir, filename string) (*os.File, error) {
6868
}
6969
return file, nil
7070
}
71+
72+
func (o *OutPutter) Ext() string {
73+
if o.json {
74+
return ".json"
75+
} else {
76+
return ".csv"
77+
}
78+
}

internal/utils/fileutil/filetutil.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"os"
99
"path"
1010
"path/filepath"
11+
"strings"
1112

1213
"hack-browser-data/internal/item"
1314
"hack-browser-data/internal/log"
@@ -61,6 +62,10 @@ func CopyItemToLocal(itemPaths map[item.Item]string) error {
6162
return nil
6263
}
6364

65+
func Filename(browser, item, ext string) string {
66+
return strings.ToLower(fmt.Sprintf("%s_%s.%s", browser, item, ext))
67+
}
68+
6469
func ParentDir(p string) string {
6570
return filepath.Dir(p)
6671
}

0 commit comments

Comments
 (0)