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