11package utils
22
33import (
4- "crypto/aes"
5- "crypto/cipher"
6- "crypto/des"
7- "encoding/asn1"
84 "fmt"
9- "hack-browser-data/log"
105 "io/ioutil"
116 "os"
127 "path"
138 "path/filepath"
149 "strings"
1510 "time"
16- )
17-
18- type DecryptError struct {
19- err error
20- msg string
21- }
22-
23- func (e * DecryptError ) Error () string {
24- return fmt .Sprintf ("%s: %s" , e .msg , e .err )
25- }
2611
27- func (e * DecryptError ) Unwrap () error {
28- return e .err
29- }
30-
31- type Browser struct {
32- Name string
33- DataDir string
34- }
35-
36- const (
37- LoginData = "Login Data"
38- History = "History"
39- Cookies = "Cookies"
40- Bookmarks = "Bookmarks"
41- FirefoxCookie = "cookies.sqlite"
42- FirefoxKey4DB = "key4.db"
43- FirefoxLoginData = "logins.json"
44- FirefoxData = "places.sqlite"
45- FirefoxKey3DB = "key3.db"
12+ "hack-browser-data/log"
4613)
4714
48-
49- func GetDBPath (dir string , dbName ... string ) (dbFile []string ) {
50- for _ , v := range dbName {
51- s , err := filepath .Glob (dir + v )
52- if err != nil && len (s ) == 0 {
53- continue
54- }
55- if len (s ) > 0 {
56- log .Debugf ("Find %s File Success" , v )
57- log .Debugf ("%s file location is %s" , v , s [0 ])
58- dbFile = append (dbFile , s [0 ])
59- }
60- }
61- return dbFile
62- }
63-
6415func CopyDB (src , dst string ) error {
6516 locals , _ := filepath .Glob ("*" )
6617 for _ , v := range locals {
@@ -117,16 +68,6 @@ func TimeEpochFormat(epoch int64) time.Time {
11768 return t
11869}
11970
120- // check time our range[1.9999]
121- func checkTimeRange (check time.Time ) time.Time {
122- end , _ := time .Parse (time .RFC3339 , "9000-01-02T15:04:05Z07:00" )
123- if check .Before (end ) {
124- return check
125- } else {
126- return end
127- }
128- }
129-
13071func ReadFile (filename string ) (string , error ) {
13172 s , err := ioutil .ReadFile (filename )
13273 return string (s ), err
@@ -152,74 +93,3 @@ func MakeDir(dirName string) {
15293 err = os .Mkdir (dirName , 0700 )
15394 }
15495}
155-
156- func PaddingZero (s []byte , l int ) []byte {
157- h := l - len (s )
158- if h <= 0 {
159- return s
160- } else {
161- for i := len (s ); i < l ; i ++ {
162- s = append (s , 0 )
163- }
164- return s
165- }
166- }
167-
168- func PKCS5UnPadding (src []byte ) []byte {
169- length := len (src )
170- unpadding := int (src [length - 1 ])
171- return src [:(length - unpadding )]
172- }
173-
174- func Des3Decrypt (key , iv []byte , src []byte ) ([]byte , error ) {
175- block , err := des .NewTripleDESCipher (key )
176- if err != nil {
177- log .Error (err )
178- return nil , err
179- }
180- blockMode := cipher .NewCBCDecrypter (block , iv )
181- sq := make ([]byte , len (src ))
182- blockMode .CryptBlocks (sq , src )
183- return sq , nil
184- }
185-
186- /*
187- SEQUENCE (3 elem)
188- OCTET STRING (16 byte)
189- SEQUENCE (2 elem)
190- OBJECT IDENTIFIER 1.2.840.113549.3.7 des-EDE3-CBC (RSADSI encryptionAlgorithm)
191- OCTET STRING (8 byte)
192- OCTET STRING (16 byte)
193- */
194- type LoginPBE struct {
195- CipherText []byte
196- SequenceLogin
197- Encrypted []byte
198- }
199-
200- type SequenceLogin struct {
201- asn1.ObjectIdentifier
202- Iv []byte
203- }
204-
205- func DecodeLogin (decodeItem []byte ) (pbe LoginPBE , err error ) {
206- _ , err = asn1 .Unmarshal (decodeItem , & pbe )
207- if err != nil {
208- log .Error (err )
209- return
210- }
211- return pbe , nil
212- }
213-
214- func aes128CBCDecrypt (key , iv , encryptPass []byte ) ([]byte , error ) {
215-
216- block , err := aes .NewCipher (key )
217- if err != nil {
218- return []byte {}, err
219- }
220- dst := make ([]byte , len (encryptPass ))
221- mode := cipher .NewCBCDecrypter (block , iv )
222- mode .CryptBlocks (dst , encryptPass )
223- dst = PKCS5UnPadding (dst )
224- return dst , nil
225- }
0 commit comments