rework eros and make minor CLI adjustments
This commit is contained in:
parent
52c1f28f80
commit
8f63a56d67
4
go.sum
4
go.sum
@ -30,8 +30,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
|
||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
||||
github.com/c-bata/go-prompt v0.2.5 h1:3zg6PecEywxNn0xiqcXHD96fkbxghD+gdB2tbsYfl+Y=
|
||||
github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw=
|
||||
github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI=
|
||||
github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
@ -177,8 +175,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
|
||||
github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
|
||||
github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw=
|
||||
github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
|
||||
github.com/plar/go-adaptive-radix-tree v1.0.4 h1:Ucd8R6RH2E7RW8ZtDKrsWyOD3paG2qqJO0I20WQ8oWQ=
|
||||
github.com/plar/go-adaptive-radix-tree v1.0.4/go.mod h1:Ot8d28EII3i7Lv4PSvBlF8ejiD/CtRYDuPsySJbSaK8=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
|
@ -27,12 +27,16 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
// deviceDb will hold details about devices discovered
|
||||
deviceDb *bitcask.Bitcask
|
||||
// attackDb will hold details about exploits to be used against BLE devices
|
||||
attackDb *bitcask.Bitcask
|
||||
// serviceDb will hold definitions of various bluetook services and will ultimately be updated via an HTTP repository
|
||||
serviceDb *bitcask.Bitcask
|
||||
// devices will hold details about devices discovered
|
||||
// exploits will hold details about exploits to be used against BLE devices
|
||||
// services will hold definitions of various bluetook services and will ultimately be updated via an HTTP repository
|
||||
// manufacturers will hold manufacturer to UUID correlations
|
||||
dbs = []string {
|
||||
"devices",
|
||||
"exploits",
|
||||
"services",
|
||||
"manufacturers",
|
||||
}
|
||||
|
||||
err error
|
||||
Manufacturers ManufData
|
||||
@ -41,9 +45,10 @@ var (
|
||||
DataDir string = "./.eros-data/"
|
||||
)
|
||||
|
||||
var DB map[string]*bitcask.Bitcask
|
||||
|
||||
// Ingest UUID will add the UUID to the manufacturer if it doesn't already exist
|
||||
func (manuf *Manufacturer) IngestUUID(uuid bluetooth.UUID) bool {
|
||||
|
||||
contains := func(s []bluetooth.UUID, v bluetooth.UUID) bool {
|
||||
for _, a := range s {
|
||||
if a == v {
|
||||
@ -72,8 +77,8 @@ func ManufLoad() {
|
||||
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
log.Debug().Msg(err.Error())
|
||||
os.Exit(1)
|
||||
log.Error().Err(err).
|
||||
Msg("Failed to open JSON file")
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
@ -132,44 +137,49 @@ func ManufLoad() {
|
||||
Manufacturers.Entries = append(Manufacturers.Entries, *mf)
|
||||
}
|
||||
}
|
||||
|
||||
for _, manuf := range Manufacturers.Entries {
|
||||
var jsonData []byte
|
||||
jsonData, err = json.Marshal(manuf)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).
|
||||
Msg("EROS_FATAL_MANUFACTURER_JSON_MARSHAL")
|
||||
}
|
||||
|
||||
err := DB["manufacturers"].Put([]byte(manuf.Name), jsonData)
|
||||
if err != nil {
|
||||
log.Fatal().Err(err).
|
||||
Msg("EROS_FATAL_MANUFACTURER_JSON_STORE")
|
||||
}
|
||||
|
||||
log.Debug().Str("Name", manuf.Name).
|
||||
Msg("EROS_MANUFACTURER_STORE")
|
||||
}
|
||||
}
|
||||
|
||||
// Awaken - create the data directory if it does not exist; initialize bitcask in this directory
|
||||
func Awaken() {
|
||||
//log.Debug().Str("DataDir",DataDir).Msg("Initializing eros...")
|
||||
|
||||
deviceDb, err = bitcask.Open(DataDir + "devices")
|
||||
if err != nil {
|
||||
panic(err.Error)
|
||||
}
|
||||
|
||||
attackDb, err = bitcask.Open(DataDir + "exploits")
|
||||
if err != nil {
|
||||
panic(err.Error)
|
||||
}
|
||||
|
||||
serviceDb, err = bitcask.Open(DataDir + "services")
|
||||
if err != nil {
|
||||
panic(err.Error)
|
||||
DB = make(map[string]*bitcask.Bitcask)
|
||||
for _, name := range dbs {
|
||||
DB[name], err = bitcask.Open(DataDir + name)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Slumber - Clean up database entries, sync them to persistent storage, and safelty close the database.
|
||||
func Slumber() {
|
||||
rest := func(db *bitcask.Bitcask) {
|
||||
for _, db := range DB {
|
||||
db.Merge()
|
||||
db.Sync()
|
||||
db.Close()
|
||||
}
|
||||
|
||||
rest(deviceDb)
|
||||
rest(attackDb)
|
||||
rest(serviceDb)
|
||||
}
|
||||
|
||||
// Exists - check if a device is present in the Database
|
||||
func Exists(Addr string) bool {
|
||||
if deviceDb.Has([]byte(Addr)) {
|
||||
if DB["devices"].Has([]byte(Addr)) {
|
||||
return true
|
||||
}
|
||||
|
||||
@ -200,7 +210,7 @@ func Remember(dev Device) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = deviceDb.Put([]byte(dev.Addr), jsonData)
|
||||
err = DB["devices"].Put([]byte(dev.Addr), jsonData)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -210,7 +220,7 @@ func Recall(Addr string) (Device, error) {
|
||||
var bytes []byte
|
||||
var member Device
|
||||
|
||||
bytes, err = deviceDb.Get([]byte(Addr))
|
||||
bytes, err = DB["devices"].Get([]byte(Addr))
|
||||
|
||||
if err != nil {
|
||||
member = Device{}
|
||||
@ -221,6 +231,18 @@ func Recall(Addr string) (Device, error) {
|
||||
return member, err
|
||||
}
|
||||
|
||||
func Backup(path string) {
|
||||
for _, db := range DB {
|
||||
db.Merge()
|
||||
db.Sync()
|
||||
err := db.Backup(path)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Hypnosis - retrieve new exploits/attacks from a remote http repository
|
||||
func Hypnosis(repo string) {
|
||||
// placeholder
|
||||
|
Loading…
Reference in New Issue
Block a user