@ -8,18 +8,18 @@ import (
"hack-browser-data/internal/browser"
"hack-browser-data/internal/browser"
"hack-browser-data/internal/log"
"hack-browser-data/internal/log"
"hack-browser-data/internal/outputter"
"hack-browser-data/internal/outputter"
"hack-browser-data/internal/utils"
"hack-browser-data/internal/utils/fileutil "
"github.com/urfave/cli/v2"
"github.com/urfave/cli/v2"
)
)
var (
var (
browserName string
browserName string
exportDir string
outputDir string
outputFormat string
outputFormat string
verbose bool
verbose bool
compress bool
compress bool
customProfilePath string
profilePath string
)
)
func main ( ) {
func main ( ) {
@ -28,30 +28,33 @@ func main() {
func Execute ( ) {
func Execute ( ) {
app := & cli . App {
app := & cli . App {
Name : "hack-browser-data" ,
Name : "hack-browser-data" ,
Usage : "Export passwords/cookies/history/bookmarks from browser" ,
Usage : "Export passwords/cookies/history/bookmarks from browser" ,
UsageText : "[hack-browser-data -b chrome -f json -dir results -cc]\n Get all browingdata(password/cookie/history/bookmark) from chrome " ,
UsageText : "[hack-browser-data -b chrome -f json -dir results -cc]\nGet all browingdata(password/cookie/history/bookmark) from browser " ,
Version : "0.4.0" ,
Version : "0.4.0" ,
Flags : [ ] cli . Flag {
Flags : [ ] cli . Flag {
& cli . BoolFlag { Name : "verbose" , Aliases : [ ] string { "vv" } , Destination : & verbose , Value : false , Usage : "verbose" } ,
& cli . BoolFlag { Name : "verbose" , Aliases : [ ] string { "vv" } , Destination : & verbose , Value : false , Usage : "verbose" } ,
& cli . BoolFlag { Name : "compress" , Aliases : [ ] string { "cc" } , Destination : & compress , Value : false , Usage : "compress result to zip" } ,
& cli . BoolFlag { Name : "compress" , Aliases : [ ] string { "cc" } , Destination : & compress , Value : false , Usage : "compress result to zip" } ,
& cli . StringFlag { Name : "browser" , Aliases : [ ] string { "b" } , Destination : & browserName , Value : "all" , Usage : "available browsers: all|" + strings . Join ( browser . ListBrowser ( ) , "|" ) } ,
& cli . StringFlag { Name : "browser" , Aliases : [ ] string { "b" } , Destination : & browserName , Value : "all" , Usage : "available browsers: all|" + strings . Join ( browser . ListBrowser ( ) , "|" ) } ,
& cli . StringFlag { Name : "results-dir" , Aliases : [ ] string { "dir" } , Destination : & expor tDir, Value : "results" , Usage : "export dir" } ,
& cli . StringFlag { Name : "results-dir" , Aliases : [ ] string { "dir" } , Destination : & outpu tDir, Value : "results" , Usage : "export dir" } ,
& cli . StringFlag { Name : "format" , Aliases : [ ] string { "f" } , Destination : & outputFormat , Value : "csv" , Usage : "format, csv|json|console" } ,
& cli . StringFlag { Name : "format" , Aliases : [ ] string { "f" } , Destination : & outputFormat , Value : "csv" , Usage : "format, csv|json|console" } ,
& cli . StringFlag { Name : "profile-dir-path" , Aliases : [ ] string { "p" } , Destination : & customP rofilePath, Value : "" , Usage : "custom profile dir path, get with chrome://version" } ,
& cli . StringFlag { Name : "profile-dir-path" , Aliases : [ ] string { "p" } , Destination : & p rofilePath, Value : "" , Usage : "custom profile dir path, get with chrome://version" } ,
} ,
} ,
HideHelpCommand : true ,
HideHelpCommand : true ,
Action : func ( c * cli . Context ) error {
Action : func ( c * cli . Context ) error {
var (
browsers [ ] browser . Browser
err error
)
if verbose {
if verbose {
log . InitLog ( "debug" )
log . InitLog ( "debug" )
} else {
} else {
log . InitLog ( "error" )
log . InitLog ( "error" )
}
}
browsers , err = browser . PickBrowser ( browserName )
var (
browsers [ ] browser . Browser
err error
)
// if profilePath != "" {
// browsers, err = browser.PickBrowserByProfilePath(browserName, profilePath)
// }
browsers , err = browser . PickBrowser ( browserName , profilePath )
if err != nil {
if err != nil {
log . Error ( err )
log . Error ( err )
}
}
@ -65,7 +68,10 @@ func Execute() {
var f * os . File
var f * os . File
for _ , source := range data . Sources {
for _ , source := range data . Sources {
filename := fmt . Sprintf ( "%s_%s.%s" , b . Name ( ) , source . Name ( ) , outputFormat )
filename := fmt . Sprintf ( "%s_%s.%s" , b . Name ( ) , source . Name ( ) , outputFormat )
f , err = output . CreateFile ( exportDir , filename )
f , err = output . CreateFile ( outputDir , filename )
if err != nil {
log . Error ( err )
}
err = output . Write ( source , f )
err = output . Write ( source , f )
if err != nil {
if err != nil {
log . Error ( err )
log . Error ( err )
@ -73,7 +79,7 @@ func Execute() {
}
}
}
}
if compress {
if compress {
err = utils . Compress ( expor tDir)
err = file util. CompressDir ( outpu tDir )
if err != nil {
if err != nil {
log . Error ( err )
log . Error ( err )
}
}