Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将DLL注入任何进程?_C++_Windows_Security_Dll_Process - Fatal编程技术网

C++ 如何将DLL注入任何进程?

C++ 如何将DLL注入任何进程?,c++,windows,security,dll,process,C++,Windows,Security,Dll,Process,我正在研究将dll注入windows上任何进程的方法。 我已经有一个代码可以为我自己的程序工作,比如hello world或者类似的东西,但是其他程序,比如notepad、calc、chrome等等 程序可以阻止dll的注入,所以我不知道我能做些什么来绕过它 我的最终目标是钩住任何程序的api调用 这个域名对我来说是新的,所以我是这里的初学者,如果你有任何关于它的资源或解决方案的话 注入器 #include <iostream> #include <Windows.h>

我正在研究将dll注入windows上任何进程的方法。 我已经有一个代码可以为我自己的程序工作,比如hello world或者类似的东西,但是其他程序,比如notepad、calc、chrome等等

程序可以阻止dll的注入,所以我不知道我能做些什么来绕过它

我的最终目标是钩住任何程序的api调用

这个域名对我来说是新的,所以我是这里的初学者,如果你有任何关于它的资源或解决方案的话

注入器

#include <iostream>
#include <Windows.h>

int main()
{
    // path to our dll
    LPCSTR DllPath = "D:\\projects\\standardinjection\\release\\testlib.dll";

    INT process_id = 14367;
    // Open a handle to target process
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process_id);

    // Allocate memory for the dllpath in the target process
    // length of the path string + null terminator
    LPVOID pDllPath = VirtualAllocEx(hProcess, 0, strlen(DllPath) + 1,
        MEM_COMMIT, PAGE_READWRITE);

    // Write the path to the address of the memory we just allocated
    // in the target process
    WriteProcessMemory(hProcess, pDllPath, (LPVOID)DllPath,
        strlen(DllPath) + 1, 0);

    // Create a Remote Thread in the target process which
    // calls LoadLibraryA as our dllpath as an argument -> program loads our dll
    HANDLE hLoadThread = CreateRemoteThread(hProcess, 0, 0,
        (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("Kernel32.dll"),
            "LoadLibraryA"), pDllPath, 0, 0);

    // Wait for the execution of our loader thread to finish
    WaitForSingleObject(hLoadThread, INFINITE);

    std::cout << "Dll path allocated at: " << std::hex << pDllPath << std::endl;
    std::cin.get();

    // Free the memory allocated for our dll path
    VirtualFreeEx(hProcess, pDllPath, strlen(DllPath) + 1, MEM_RELEASE);

    return 0;
}
#包括
#包括
int main()
{
//我们的dll的路径
LPCSTR DllPath=“D:\\projects\\standardinjection\\release\\testlib.dll”;
INT进程id=14367;
//打开目标进程的句柄
HANDLE hProcess=OpenProcess(PROCESS\u ALL\u ACCESS,FALSE,PROCESS\u id);
//为目标进程中的dllpath分配内存
//路径字符串的长度+null终止符
LPVOID pDllPath=VirtualAllocEx(hProcess,0,strlen(DllPath)+1,
MEM_COMMIT,PAGE_READWRITE);
//将路径写入我们刚才分配的内存地址
//在目标过程中
WriteProcessMemory(HPProcess,pDllPath,(LPVOID)DllPath,
strlen(DllPath)+1,0;
//在目标进程中创建一个远程线程
//调用LoadLibraryA作为我们的dllpath作为参数->程序加载我们的dll
HANDLE hLoadThread=CreateRemoteThread(hProcess,0,0,
(LPTHREAD_START_例程)GetProcAddress(GetModuleHandleA(“Kernel32.dll”),
“LoadLibraryA”),pDllPath,0,0);
//等待加载程序线程的执行完成
WaitForSingleObject(hLoadThread,无限);

std::cout对于99%的注入方法,您必须能够将代码写入目标进程。为此,您需要能够使用()打开进程句柄,并使用所需的

如果您尝试注入的进程是一个具有内核模式anticheat的游戏,它将通过阻止您。您还需要处于内核模式才能绕过此保护

如果您尝试注入的进程作为系统或受保护的进程轻进程运行,那么您也会遇到问题。有关详细信息,请参阅我的


在你的评论中,你说你的目标是钩住api,为了回答你问题的这一部分,我想让你看看我在哪里解释它

你的实际问题是什么?实际上,这个程序只能在没有任何保护的情况下将dll注入进程,这是一种基本的注入。我正在寻找一种钩住任何进程的任何api调用的方法,(NtCreateFile等)。我不知道使用简单的dll、注入是否可以做到这一点。@nerap我在回答中添加了一些信息来解决此评论,如果需要更多帮助,请查看并告诉我
#include <Windows.h>

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
        MessageBox(0, L"Hello From testlib!", L"Hello", MB_ICONINFORMATION);

    return TRUE;
}