C++ CreateRemoteThread使用进程\查询\有限\信息

C++ CreateRemoteThread使用进程\查询\有限\信息,c++,multithreading,dll,privileges,inject,C++,Multithreading,Dll,Privileges,Inject,最近,我研究了使用CreateRemoteThread的dll注入技术,发现了一些有趣的东西。我刚刚用process\u QUERY\u LIMITED\u信息打开了这个进程,并用它的句柄调用了CreateRemoteThread。令人惊讶的是,它奏效了。有趣的是,我尝试用另一个函数NtCreateThreadEx创建远程线程,它是CreateRemoteThread的一个内部函数,但没有起作用。我不明白这里发生了什么。代码如下: void Create_Remote_Thread() {

最近,我研究了使用CreateRemoteThread的dll注入技术,发现了一些有趣的东西。我刚刚用process\u QUERY\u LIMITED\u信息打开了这个进程,并用它的句柄调用了CreateRemoteThread。令人惊讶的是,它奏效了。有趣的是,我尝试用另一个函数NtCreateThreadEx创建远程线程,它是CreateRemoteThread的一个内部函数,但没有起作用。我不明白这里发生了什么。代码如下:

void Create_Remote_Thread()
{
    HMODULE ntdll, kernel32;
    HANDLE hCurrp = nullptr;
    ntdll = GetModuleHandle(L"ntdll.dll");
    kernel32 = LoadLibrary(L"kernel32.dll");
    FARPROC lpfnLoadLibrary = NULL;

    _NtGetNextProcess nextProc = (_NtGetNextProcess)GetProcAddress(ntdll, "NtGetNextProcess");
    
    lpfnLoadLibrary = GetProcAddress(kernel32, "LoadLibraryA");

    char buf[MAX_PATH];
    //while (nextProc(hCurrp, PROCESS_QUERY_LIMITED_INFORMATION, 0, 0, &hCurrp) == 0) {
    while (nextProc(hCurrp, PROCESS_ALL_ACCESS, 0, 0, &hCurrp) == 0) {
        GetModuleFileNameExA(hCurrp, 0, buf, MAX_PATH);
        HANDLE hThread = NULL;
        if (strstr(buf, "notepad.exe") != NULL) {
        
            hThread = CreateRemoteThread(hCurrp, NULL, 0, (LPTHREAD_START_ROUTINE)lpfnLoadLibrary, NULL, 0, NULL);      
            
        }
    }
}

那么,我可以用较低的权限创建远程线程吗?如果有人知道这件事,请通知我。谢谢。

NtCreateThreadEx
PROCESS\u ALL\u ACCESS
一起使用?当然,它是有效的。我对它进行了测试。但是您发布的
CreateRemoteThread
调用无法工作,因为
lpParameter
为NULL。CreateRemoteThread的返回值不为NULL,我的意思是,hThread不为NULL。这意味着它在lpParameter为NULL的情况下仍能工作。