注册 登录
编程论坛 VC++/MFC

DLL线程注入问题

唐三藏 发布于 2020-11-07 19:54, 2034 次点击
只有本站会员才能查看附件,请 登录


问题如图所示,能编译,编译后也能运行,但是有绿色的报错提示。请问哪里写错了吗?

代码如下:
BOOL DLL线程注入(HANDLE 进程句柄,const char * DLL完整路径)
{
    LPVOID 地址 = 0;
    DWORD 实际写入大小 = 0;
    HANDLE 线程句柄 = 0;
    地址 = VirtualAllocEx(进程句柄, NULL, 256, MEM_COMMIT, PAGE_READWRITE);//分配内存空间
    if (地址 == 0)
    {
        CloseHandle(进程句柄);
        return FALSE;
    }
    WriteProcessMemory(进程句柄, 地址, DLL完整路径, strlen(DLL完整路径) + 1, &实际写入大小);//写入
    if (实际写入大小 < strlen(DLL完整路径))
    {
        VirtualFreeEx(进程句柄, 地址, 256, MEM_DECOMMIT);
        CloseHandle(进程句柄);
        return FALSE;
    }
    线程句柄 = CreateRemoteThread(进程句柄, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryA, 地址, NULL, NULL);//创建远程线程
    if (线程句柄 == 0)
    {
        VirtualFreeEx(进程句柄, 地址, 256, MEM_DECOMMIT);
        CloseHandle(进程句柄);
        return FALSE;
    }
    WaitForSingleObject(线程句柄, 0xFFFFFFF);//等待线程
    CloseHandle(线程句柄);
    VirtualFreeEx(进程句柄, 地址, 256, MEM_DECOMMIT);//释放内存空间
    CloseHandle(进程句柄);
    return TRUE;
}
1 回复
#2
zzz32652022-02-06 01:05
正常应该用 MEM_RELEASE,  
如果用MEM_DECOMMIT, 会导致虚拟地址空间泄漏,  详情可以MSDN或搜索
1