From 151c6769aa753663c53f19599b73840dc440d80b Mon Sep 17 00:00:00 2001 From: CowboySteeve Date: Sat, 23 Nov 2019 04:19:34 -0800 Subject: [PATCH 1/3] Adding a note in the README that lets people know not to use this in it's current state until critical bugs are addressed. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ab70901..ba297f3 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ a usb-based dead man's switch for your computer. +****DO NOT USE THIS IN IT'S CURRENT STATE AS AN ANTI-FORENSICS/COMPULSION TOOL THERE ARE CRITICAL EDGE CASES THAT COULD COMPROMISE YOUR FREEDOM OR MORE...** + ## Usage ``` sudo ./deadman From 2728b83ada32d79c8c273d11cd7ff670687c3715 Mon Sep 17 00:00:00 2001 From: CowboySteeve Date: Sat, 23 Nov 2019 18:18:46 -0800 Subject: [PATCH 2/3] Adding executible verification in checkExe function. --- filecheck.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/filecheck.go b/filecheck.go index efd0818..1a9d683 100644 --- a/filecheck.go +++ b/filecheck.go @@ -4,8 +4,51 @@ import ( "os/exec" ) -func checkExe(path string) error { +func checkExe(path string) (bool, error) { _, err := exec.LookPath(path) - return err - //TODO: check for executability -} + if err != nil { + return err + } + + cmd := "which" + args := []string{path} + execCmd := exec.Command(cmd, args...) + + var out bytes.Buffer + var stderr bytes.Buffer + + execCmd.Stdout = &out + execCmd.Stderr = &stderr + + err := execCmd.Run() + if err != nil { + fmt.Println("out: " + out.String()) + fmt.Println("stderr: " + stderr.String()) + fmt.Println(err) + } + + info, err := os.Stat("/usr/bin/lsusb") + if err != nil { + return false, err + } + + m := info.Mode() + + /* + // Bitshift to check if any user can execute given binary + fmt.Println(m&(2>>1)) + + // Bitshift to check if group can execute given binary + fmt.Println(m&(1<<3)) + + // Bitshift to check if owner can execute given binary + fmt.Println(m&(1<<6)) + */ + + // Bitshift to check if any user can execute given binary + if m&(2>>1) != 0 { + return true, nil + } else { + return false, nil + } +} \ No newline at end of file From c22c35c9daaeb60a475dd4dd905e05e434418e46 Mon Sep 17 00:00:00 2001 From: CowboySteeve Date: Mon, 9 Dec 2019 14:04:13 -0800 Subject: [PATCH 3/3] Adding check if file is executable. --- filecheck.go | 61 +++++++++++++++++++++++++++------------------------- main.go | 4 +++- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/filecheck.go b/filecheck.go index 1a9d683..bde831d 100644 --- a/filecheck.go +++ b/filecheck.go @@ -1,54 +1,57 @@ package main import ( + "bytes" + "log" + "os" "os/exec" ) -func checkExe(path string) (bool, error) { +func checkExe(path string) error { _, err := exec.LookPath(path) if err != nil { return err } - - cmd := "which" + + cmd := "which" args := []string{path} execCmd := exec.Command(cmd, args...) - + var out bytes.Buffer - var stderr bytes.Buffer - - execCmd.Stdout = &out - execCmd.Stderr = &stderr - - err := execCmd.Run() - if err != nil { - fmt.Println("out: " + out.String()) - fmt.Println("stderr: " + stderr.String()) - fmt.Println(err) - } - - info, err := os.Stat("/usr/bin/lsusb") - if err != nil { - return false, err + var stderr bytes.Buffer + + execCmd.Stdout = &out + execCmd.Stderr = &stderr + + err = execCmd.Run() + if err != nil { + log.Println("out: " + out.String()) + log.Println("stderr: " + stderr.String()) + log.Println(err) + } + + info, err := os.Stat("/usr/bin/lsusb") + if err != nil { + return err } m := info.Mode() - + /* - // Bitshift to check if any user can execute given binary - fmt.Println(m&(2>>1)) + // Bitshift to check if any user can execute given binary + log.Println(m&(2>>1)) - // Bitshift to check if group can execute given binary - fmt.Println(m&(1<<3)) + // Bitshift to check if group can execute given binary + log.Println(m&(1<<3)) - // Bitshift to check if owner can execute given binary - fmt.Println(m&(1<<6)) + // Bitshift to check if owner can execute given binary + log.Println(m&(1<<6)) */ // Bitshift to check if any user can execute given binary if m&(2>>1) != 0 { - return true, nil + return nil } else { - return false, nil + return nil } -} \ No newline at end of file +} diff --git a/main.go b/main.go index b574d9e..04e3164 100644 --- a/main.go +++ b/main.go @@ -59,12 +59,13 @@ func main() { if err != nil { log.Fatal(err) } - // Look to see if there are any new devicies + // Look to see if there are any new devices for _, d := range devices { if _, ok := deviceMap[d]; !ok { log.Printf("New device: %s [%s]\n", d.Name, d.ID) shutdownSequence(conf) } + deviceMap[d] = now } @@ -74,6 +75,7 @@ func main() { log.Printf("Device %s [%s] has been removed\n", d.Name, d.ID) shutdownSequence(conf) } + } case <-sigint: log.Println("SIGINT received")