使用C ++进行DLL注入

问题描述 投票:0回答:1
#include <Windows.h>
HANDLE h = OpenProcess(PROCESS_CREATE_THREAD, FALSE, 34808); //Creating a remote thread 
int main() {
    LPVOID path = "MessageBoxDLL.dll";
    CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, path, 0, NULL);
}

[当我尝试运行我的代码时,它返回错误“无法从const char转换为lpvoid”。我有点迷茫,为什么不让我给它一个有效的路径,甚至为什么它需要转换我的值。我玩了一些,但找不到任何可行的解决方案。https://i.stack.imgur.com/Ne0bp.png

c++ dll dll-injection
1个回答
0
投票

您正在尝试创建远程线程;

CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, path, 0, NULL);

并且您希望该线程的入口点为LoadLibraryA。 LoadlibraryA不满足线程入口点的正确函数签名。显式强制转换强制其进行编译,但只会创建未定义的行为。此外,在CreateRemoteThread可以完成任何操作之前,path超出范围。不确定这对远程线程意味着什么。

您可能真正想要的

DWORD __stdcall ThreadFunction(void* params)
{
    HMODULE hDLL = LoadLibraryA("MessageBoxDLL.dll");
    // whatever else you need to do

    return 0;
}


int main()
{
    HANDLE hThread = CreateRemoteThread(h, NULL, 0, ThreadFunction, NULL, 0, NULL);
    WaitForSingleObject(hThread, INFINITE);
    return 0;
}  

关于是否成功将DLL加载到目标进程中,这是另一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.