Как внедрить DLL в ЛЮБОЙ процесс? - PullRequest
0 голосов
/ 13 октября 2019

Я работаю над тем, чтобы внедрить dll в любой процесс в Windows. У меня уже есть код, который работает для моей собственной программы, например, hello world или тому подобное, но другие программы, такие как notepad, calc, chrome и т. Д.

Программа может предотвратить внедрение DLL, поэтому я неНе знаю, что я могу сделать, чтобы обойти это.

Моя конечная цель - перехватить вызов API любой программы.

Этот домен для меня новый, поэтому я новичок здесь, если у вас есть какой-либо ресурс или решение об этом!

injector.cpp

#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;
}

my dll

#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;
}

В настоящее время я нахожусь на Windows 10 x64Unix OS, так что Windows для меня новинка!

Спасибо, что уделили время!

1 Ответ

0 голосов
/ 12 ноября 2019

Для 99% методов внедрения вы должны иметь возможность записать свой код в целевой процесс. Для этого вам нужно иметь возможность открыть дескриптор процесса, используя OpenProcess () с необходимыми привилегиями .

Если процесс, который вы пытаетесьчтобы ввести это игра с античитом режима ядра, она заблокирует вас через ObjRegisterCallbacks . Вам также нужно будет перейти в режим ядра, чтобы обойти эту защиту.

Если процесс, в который вы пытаетесь внедрить, работает как SYSTEM или защищенный процесс Light Light, то у вас тоже есть проблемы. Больше информации об этом в моем предыдущем ответе

...