我尝试使用 Go 进行 DLL 注入,但失败了。
我正在准备将用 C++ 注入的 DLL 文件。那是问题吗?
用 C++ 编写的 DLL:

我厌倦了像这样用 Go 注入 DLL 文件:

但是当CreateRemoteThread()函数工作时,Notepad++ 被关闭了。

为什么我失败了?我哪里做错了?
TestD.dll 代码:
#include "pch.h"
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
MessageBox(NULL, L"DLL_PROCESS_ATTACH STARTED", L"DLL_PROCESS_ATTACH TITLE", MB_RETRYCANCEL);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Go InjectApp 代码:
var dllPath = "C:\\Users\\RecaiCingoz\\go\\src\\TestD.dll"
className := syscall.StringToUTF16Ptr("Notepad++")
hwnd := win32services.FindWindowW(className, nil)
fmt.Println("Process HWND", hwnd)
_, processID := win32services.GetWindowThreadProcessId(hwnd)
hProcess, _ := win32services.OpenProcess(win32services.PROCESS_ALL_ACCESS, false, uint32(processID))
baseAddress, _ := win32services.VirtualAllocEx(hProcess, 0, len(dllPath), win32services.MEM_COMMIT, win32services.PAGE_READWRITE)
err := win32services.WriteProcessMemory(hProcess, uint32(baseAddress), []byte(dllPath), 0)
if err != nil {
fmt.Println(err)
}
modLib, _ := syscall.LoadLibrary("kernel32.dll")
loadLib, err := syscall.GetProcAddress(modLib, "LoadLibraryA")
if err != nil {
fmt.Println(err)
}
hRemoteThread, _, err := win32services.CreateRemoteThread(hProcess, nil, 0, loadLib, baseAddress, 0)
fmt.Println(hRemoteThread)
}
CreateRemoteProcess 函数:
func CreateRemoteThread(hprocess HANDLE, sa *syscall.SecurityAttributes,
stackSize uint32, startAddress uintptr, parameter uintptr, creationFlags uint32) (HANDLE, uint32, error) {
var threadId uint32
if int(r1) == 0 {
return INVALID_HANDLE, 0, e1
}
return HANDLE(r1), threadId, e1
}
如何在 Go 中进行 DLL 注入?谁能帮我?
慕哥6287543
子衿沉夜
随时随地看视频慕课网APP
相关分类