Как с помощью DLL Injection взять под контроль существующие объекты в памяти приложения? - PullRequest
0 голосов
/ 17 июня 2020

Итак, последнее время я изучаю DLL Injection. Есть много онлайн-примеров с исходным кодом. Однако многие из них прекращаются после успешной инъекции. Я хотел бы знать, после внедрения кода в память приложения; как взять под контроль (или получить) существующие объекты в памяти целевых приложений?

Возьмем, к примеру, DirectX. Допустим, я хотел дать себе неограниченное количество патронов в игре или хотел нарисовать какую-нибудь другую графику поверх окна. Чтобы сделать последнее, мне нужно было бы получить ссылку на объект IDXGISwapChain.

Хотелось бы, чтобы это сработало, если бы мы использовали GetProcAddress () для получения ссылки на объект из d3d11.dll? (Обратите внимание, я не тестировал этот код, не уверен, что он вообще будет работать)

FNC3DC11 IDXGISwapChain_out;
TCHAR szDllPath[MAX_PATH] = { 0 };

GetSystemDirectory(szDllPath, MAX_PATH);

// We have to specify the full path to avoid the search order (found in Win32 folder)
lstrcat(szDllPath, "\\d3d11.dll");
HMODULE hDll = LoadLibrary(szDllPath);

if(hDll == NULL)
{
    return FALSE;
}

// Pointer to the original function
IDXGISwapChain_out = (FND3DC9)GetProcAddress(hDll, "IDXGISwapChain");
if(IDXGISwapChain_out == NULL)
{
   FreeLibrary(hDll);
   return FALSE;
}

//Do things with IDXGISwapChain_out...
...