@ -9,6 +9,7 @@ import (
"path/filepath"
"sort"
"time"
"strings"
"hack-browser-data/core/decrypt"
"hack-browser-data/log"
@ -55,6 +56,7 @@ var (
queryChromiumDownload = ` SELECT target_path, tab_url, total_bytes, start_time, end_time, mime_type FROM downloads `
queryChromiumCookie = ` SELECT name, encrypted_value, host_key, path, creation_utc, expires_utc, is_secure, is_httponly, has_expires, is_persistent FROM cookies `
queryFirefoxHistory = ` SELECT id, url, last_visit_date, title, visit_count FROM moz_places `
queryFirefoxDownload = ` SELECT place_id, GROUP_CONCAT(content) , url, dateAdded FROM (SELECT * FROM moz_annos INNER JOIN moz_places ON moz_annos.place_id=moz_places.id) t GROUP BY place_id `
queryFirefoxBookMarks = ` SELECT id, fk, type, dateAdded, title FROM moz_bookmarks `
queryFirefoxCookie = ` SELECT name, value, host, path, creationTime, expiry, isSecure, isHttpOnly FROM moz_cookies `
queryMetaData = ` SELECT item1, item2 FROM metaData WHERE id = 'password' `
@ -500,9 +502,63 @@ func (d *downloads) ChromeParse(key []byte) error {
}
func ( d * downloads ) FirefoxParse ( ) error {
var (
err error
keyDB * sql . DB
downloadRows * sql . Rows
tempMap map [ int64 ] string
)
tempMap = make ( map [ int64 ] string )
keyDB , err = sql . Open ( "sqlite3" , FirefoxDataFile )
if err != nil {
return err
}
_ , err = keyDB . Exec ( closeJournalMode )
if err != nil {
log . Error ( err )
}
defer func ( ) {
if err := keyDB . Close ( ) ; err != nil {
log . Error ( err )
}
} ( )
downloadRows , err = keyDB . Query ( queryFirefoxDownload )
if err != nil {
log . Error ( err )
return err
}
defer func ( ) {
if err := downloadRows . Close ( ) ; err != nil {
log . Error ( err )
}
} ( )
for downloadRows . Next ( ) {
var (
content , url string
place_id , dateAdded int64
)
err = downloadRows . Scan ( & place_id , & content , & url , & dateAdded )
if err != nil {
log . Warn ( err )
}
contentList := strings . Split ( content , ",{" )
if len ( contentList ) > 1 {
path := contentList [ 0 ]
json := "{" + contentList [ 1 ]
endTime := gjson . Get ( json , "endTime" )
fileSize := gjson . Get ( json , "fileSize" )
d . downloads = append ( d . downloads , download {
TargetPath : path ,
Url : url ,
TotalBytes : fileSize . Int ( ) ,
StartTime : utils . TimeStampFormat ( dateAdded / 1000000 ) ,
EndTime : utils . TimeStampFormat ( endTime . Int ( ) / 1000000 ) ,
} )
}
tempMap [ place_id ] = url
}
return nil
}
func ( d * downloads ) CopyDB ( ) error {
return copyToLocalPath ( d . mainPath , filepath . Base ( d . mainPath ) )
}