钩子DLL如果需要使用到其他的exe中产生的数据可以通过使用内存映射文件来实现,下面附上代码,不过是两个exe之间的例子,原理一样。本贴代码和最近想完成的一个小工具有关,偷WG数据的。嘿嘿。。。邪恶的想法开始了。。。
之前想过用windows消息机制传递数据。最后还是发现这种方法好。
微软真是神奇。。。。还有这种特殊内存。
exe1:负责写入内存
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
HANDLE hFileMap;
HANDLE hEvent;
LPBYTE pcMap;
hEvent = CreateEvent(NULL, false, false, "MyEvent");
if(hEvent == NULL)
{
printf("createEvent failed\n");
return 0;
}
hFileMap = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, 4 * 1024, "MyShareData");
if(hFileMap == NULL)
{
printf("createfilemapping failed\n");
return 0;
}
pcMap = (LPBYTE)MapViewOfFile(hFileMap, FILE_MAP_READ|FILE_MAP_WRITE,
0, 0, 0);//创建一个共享的内存地址
if(pcMap == NULL)
{
printf("MapViewOfFile failed\n");
CloseHandle(hFileMap);
return 0;
}
printf("begin write\n");
/*int i;
for(i = 0; i < 26; i++)
{
pcMap = 'a' + i;
}*/
strcpy((char *) pcMap , "你好,我是你写入的字符串数据!!");//pcMap = 0;
UnmapViewOfFile(pcMap);
CloseHandle(hFileMap);
SetEvent(hEvent);
CloseHandle(hEvent);
return 1;
}
exe2:负责从内存中读取数据
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
HANDLE hEvent;
HANDLE hFileMap;
LPBYTE pcMap;
hEvent = CreateEvent(NULL, false, false, "MyEvent");
if(hEvent == NULL)
{
return 0;
}
hFileMap = CreateFileMapping((HANDLE)0xffffffff,NULL,
PAGE_READWRITE, 0, 4 * 1024, "MyShareData");
if(hFileMap == NULL)
{
return 0;
}
pcMap = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,
0, 0, 0);//获取共享的内存地址 这个内存地址pcMap 里面保存的是一个字符串。。。就是 exe1 写入的 “你好,我是你写入的字符串数据”
if(pcMap == NULL)
{
printf("MapViewOfFile failed\n");
CloseHandle(hFileMap);
return 0;
}
WaitForSingleObject(hEvent, 3600 * 1000);
printf("犀利!对方写入的数据为: %s\n",pcMap);
UnmapViewOfFile(pcMap);
CloseHandle(hFileMap);
CloseHandle(hEvent);
getchar();
return 1;
}
|