25 lines
660 B
Go
25 lines
660 B
Go
package gomonkey
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
func modifyBinary(target uintptr, bytes []byte) {
|
|
function := entryAddress(target, len(bytes))
|
|
|
|
proc := syscall.NewLazyDLL("kernel32.dll").NewProc("VirtualProtect")
|
|
const PROT_READ_WRITE = 0x40
|
|
var old uint32
|
|
result, _, _ := proc.Call(target, uintptr(len(bytes)), uintptr(PROT_READ_WRITE), uintptr(unsafe.Pointer(&old)))
|
|
if result == 0 {
|
|
panic(result)
|
|
}
|
|
copy(function, bytes)
|
|
|
|
var ignore uint32
|
|
result, _, _ = proc.Call(target, uintptr(len(bytes)), uintptr(old), uintptr(unsafe.Pointer(&ignore)))
|
|
if result == 0 {
|
|
panic(result)
|
|
}
|
|
} |