我试着用Golang做DLL注入。
代码:
package main
import (
"fmt"
"github.com/JamesHovious/w32"
"syscall"
)
func main(){
//just a random dll
dllPath := "C:\\Windows\\System32\\wevtapi.dll"
procID := 8124
hProc, handleErr := w32.OpenProcess(w32.PROCESS_ALL_ACCESS, false, uint32(procID))
if handleErr != nil{
fmt.Println("handleErr:", handleErr)
}
kernel32DLL, dllLoadErr := syscall.LoadLibrary("kernel32.dll")
if dllLoadErr != nil{
fmt.Println("dllLoadErr:", dllLoadErr)
}
addr, addrErr := syscall.GetProcAddress(syscall.Handle(kernel32DLL), "LoadLibraryA")
if addrErr != nil{
fmt.Println("addrErr:", addrErr)
}
arg, allocErr := w32.VirtualAllocEx(hProc, 0, len(dllPath)*2, w32.MEM_RESERVE | w32.MEM_COMMIT, w32.PAGE_READWRITE)
if allocErr != nil{
fmt.Println("allocErr:", allocErr)
}
writeErr := w32.WriteProcessMemory(hProc, uint32(arg), []byte(dllPath), 0)
if writeErr != nil{
fmt.Println("writeErr:", writeErr)
}
_, _, threadErr := w32.CreateRemoteThread(hProc, nil, 0, uint32(addr), arg, 0)
if threadErr != nil{
fmt.Println("threadErr:", threadErr)
}
}它不返回任何错误,但我在process中看不到目标进程下的wevtapi.dll。我所针对的进程是32位版本的Notepad++。可执行文件也被编译为32位。我搞不懂为什么不起作用了。
加法:我使用64位版本的windows
发布于 2021-09-30 10:12:11
密码很好用。问题是使用64位动态链接库(C:\Windows\System32\wevtapi.dll)。64位窗口上的32位DLL位于C:\ windows \SysWOW64 64中。
https://stackoverflow.com/questions/69382287
复制相似问题