mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-05-19 18:58:03 +02:00
feat: add chrome cookie parse
This commit is contained in:
+128
-67
@@ -19,6 +19,7 @@ const (
|
||||
var (
|
||||
browserData = new(BrowserData)
|
||||
bookmarkList []*Bookmarks
|
||||
cookieList []*Cookies
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -30,6 +31,10 @@ const (
|
||||
bookmarkChildren = "children"
|
||||
)
|
||||
|
||||
const (
|
||||
queryHistory = ``
|
||||
)
|
||||
|
||||
type (
|
||||
BrowserData struct {
|
||||
BrowserName string
|
||||
@@ -37,11 +42,11 @@ type (
|
||||
Bookmarks []*Bookmarks
|
||||
}
|
||||
LoginData struct {
|
||||
UserName string
|
||||
encryptPass []byte
|
||||
Password string
|
||||
LoginUrl string
|
||||
CreateDate time.Time
|
||||
UserName string `json:"user_name"`
|
||||
encryptPass []byte `json:"-"`
|
||||
Password string `json:"password"`
|
||||
LoginUrl string `json:"login_url"`
|
||||
CreateDate time.Time `json:"create_date"`
|
||||
}
|
||||
Bookmarks struct {
|
||||
ID string `json:"id"`
|
||||
@@ -50,7 +55,18 @@ type (
|
||||
Name string `json:"name"`
|
||||
Type string `json:"type"`
|
||||
}
|
||||
Cookie struct {
|
||||
Cookies struct {
|
||||
KeyName string
|
||||
encryptValue []byte
|
||||
Value string
|
||||
Host string
|
||||
Path string
|
||||
IsSecure bool
|
||||
IsHTTPOnly bool
|
||||
HasExpire bool
|
||||
IsPersistent bool
|
||||
CreateDate time.Time
|
||||
ExpireDate time.Time
|
||||
}
|
||||
History struct {
|
||||
}
|
||||
@@ -68,7 +84,10 @@ func ParseDB(dbname string) {
|
||||
}
|
||||
case utils.Bookmarks:
|
||||
parseBookmarks()
|
||||
case utils.Cookies:
|
||||
parseCookie()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func parseBookmarks() {
|
||||
@@ -80,14 +99,114 @@ func parseBookmarks() {
|
||||
if r.Exists() {
|
||||
roots := r.Get("roots")
|
||||
roots.ForEach(func(key, value gjson.Result) bool {
|
||||
getBookmarkValue(value)
|
||||
getBookmarkChildren(value)
|
||||
return true
|
||||
})
|
||||
fmt.Println(len(bookmarkList))
|
||||
}
|
||||
}
|
||||
|
||||
func getBookmarkValue(value gjson.Result) (children gjson.Result) {
|
||||
var queryLogin = `SELECT origin_url, username_value, password_value, date_created FROM logins`
|
||||
|
||||
func parseLogin() (results []*LoginData, err error) {
|
||||
//datetime(visit_time / 1000000 + (strftime('%s', '1601-01-01')), 'unixepoch')
|
||||
login := &LoginData{}
|
||||
loginDB, err := sql.Open("sqlite3", utils.LoginData)
|
||||
defer func() {
|
||||
if err := loginDB.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = loginDB.Ping()
|
||||
rows, err := loginDB.Query(queryLogin)
|
||||
defer func() {
|
||||
if err := rows.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
for rows.Next() {
|
||||
var (
|
||||
url, username, password string
|
||||
pwd []byte
|
||||
create int64
|
||||
)
|
||||
err = rows.Scan(&url, &username, &pwd, &create)
|
||||
login = &LoginData{
|
||||
UserName: username,
|
||||
encryptPass: pwd,
|
||||
LoginUrl: url,
|
||||
CreateDate: utils.TimeEpochFormat(create),
|
||||
}
|
||||
if len(pwd) > 3 {
|
||||
// remove prefix 'v10'
|
||||
password, err = utils.Aes128CBCDecrypt(pwd[3:])
|
||||
}
|
||||
login.Password = password
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
results = append(results, login)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var queryCookie = `SELECT name, encrypted_value, host_key, path, creation_utc, expires_utc, is_secure, is_httponly, has_expires, is_persistent FROM cookies`
|
||||
func parseCookie() (results []*Cookies, err error) {
|
||||
cookies := &Cookies{}
|
||||
cookieDB, err := sql.Open("sqlite3", utils.Cookies)
|
||||
defer func() {
|
||||
if err := cookieDB.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = cookieDB.Ping()
|
||||
rows, err := cookieDB.Query(queryCookie)
|
||||
defer func() {
|
||||
if err := rows.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
for rows.Next() {
|
||||
var (
|
||||
key, host, path, value string
|
||||
isSecure, isHTTPOnly, hasExpire, isPersistent bool
|
||||
createDate, expireDate int64
|
||||
encryptValue []byte
|
||||
)
|
||||
err = rows.Scan(&key, &encryptValue, &host, &path, &createDate, &expireDate, &isSecure, &isHTTPOnly, &hasExpire, &isPersistent)
|
||||
cookies = &Cookies{
|
||||
KeyName: key,
|
||||
Host: host,
|
||||
Path: path,
|
||||
encryptValue: encryptValue,
|
||||
IsSecure: false,
|
||||
IsHTTPOnly: false,
|
||||
HasExpire: false,
|
||||
IsPersistent: isPersistent,
|
||||
CreateDate: utils.TimeEpochFormat(createDate),
|
||||
ExpireDate: utils.TimeEpochFormat(expireDate),
|
||||
}
|
||||
if len(encryptValue) > 3 {
|
||||
// remove prefix 'v10'
|
||||
value, err = utils.Aes128CBCDecrypt(encryptValue[3:])
|
||||
}
|
||||
cookies.Value = value
|
||||
cookieList = append(cookieList, cookies)
|
||||
}
|
||||
return cookieList, err
|
||||
}
|
||||
|
||||
func parseHistory() {
|
||||
|
||||
}
|
||||
|
||||
func getBookmarkChildren(value gjson.Result) (children gjson.Result) {
|
||||
b := new(Bookmarks)
|
||||
b.ID = value.Get(bookmarkID).String()
|
||||
nodeType := value.Get(bookmarkType)
|
||||
@@ -100,67 +219,9 @@ func getBookmarkValue(value gjson.Result) (children gjson.Result) {
|
||||
bookmarkList = append(bookmarkList, b)
|
||||
if children.Exists() && children.IsArray() {
|
||||
for _, v := range children.Array() {
|
||||
children = getBookmarkValue(v)
|
||||
children = getBookmarkChildren(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
return children
|
||||
}
|
||||
|
||||
func parseLogin() (results []*LoginData, err error) {
|
||||
//datetime(visit_time / 1000000 + (strftime('%s', '1601-01-01')), 'unixepoch')
|
||||
loginD := &LoginData{}
|
||||
logins, err := sql.Open("sqlite3", utils.LoginData)
|
||||
defer func() {
|
||||
if err := logins.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
err = logins.Ping()
|
||||
rows, err := logins.Query(`SELECT origin_url, username_value, password_value, date_created FROM logins`)
|
||||
defer func() {
|
||||
if err := rows.Close(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}()
|
||||
for rows.Next() {
|
||||
var (
|
||||
url string
|
||||
username string
|
||||
pwd []byte
|
||||
password string
|
||||
create int64
|
||||
)
|
||||
err = rows.Scan(&url, &username, &pwd, &create)
|
||||
loginD = &LoginData{
|
||||
UserName: username,
|
||||
encryptPass: pwd,
|
||||
LoginUrl: url,
|
||||
CreateDate: utils.TimeEpochFormat(create),
|
||||
}
|
||||
if len(pwd) > 3 {
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
password, err = utils.Aes128CBCDecrypt(pwd[3:])
|
||||
}
|
||||
loginD.Password = password
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
results = append(results, loginD)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func parseHistory() {
|
||||
|
||||
}
|
||||
|
||||
func parseCookie() {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user