DLL共享节技术可以让使用同一个DLL的多个进程共享一块内存(共享节),下面我通过一个项目来演示使用方法。
首先准备一个受害者程序,我选用了xp的扫雷,您也可以用任意喜欢的程序。

然后,编写DLL,DLL中需要设置共享节,然后在本项目中,DLL被注入到扫雷进程,然后循环打印共享节中的数据,这个数据可以被控制程序修改。
下面是DLL代码,g_buffer就是共享节的数据。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "framework.h"
#pragma data_seg("Shared")
char g_buffer[0x1000] = {
0};
#pragma data_seg()
#pragma comment(linker,"/section:Shared,rws")
extern "C" __declspec(dllexport) void SetData(char *buf, DWORD dwDataLen)
{
ZeroMemory(g_buffer, 0x1000);
memcpy(g_buffer, buf, dwDataLen);
}
extern "C" __declspec(dllexport) void GetData(char *buf)
{
memcpy(buf, g_buffer, 0x1000);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
// 区分是目标进程(游戏)还是控制进程(WG)
// 如果是扫雷进程(winmine.exe)则开始接收数据
char szModule[MAX_PATH] = {
0 };
GetModuleFileNameA(NULL, szModule, MAX_PATH)

本文介绍如何利用DLL共享节技术实现多个进程间的内存共享。通过创建DLL并注入到目标进程(如扫雷),循环读写共享内存,以此达到控制程序修改目标进程数据的效果。详细展示了DLL代码和控制端代码的实现,强调需将所有相关文件置于同一目录并按特定顺序运行。
最低0.47元/天 解锁文章
1757





