首页 > 解决方案 > 使用 DLL 注入如何控制应用程序内存中的现有对象?

问题描述

所以,我最近一直在研究 DLL 注入。有很多带有源代码的在线示例。然而,他们中的许多人在成功注射后停止。我想知道,在将代码注入应用程序内存之后;如何控制(或获取)目标应用程序内存中的现有对象?

以 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...

标签: c++dll-injection

解决方案


推荐阅读