源码中 用到的结构和未公开函数 请到 http://www.cnblogs.com/IMyLife/p/4826286.html 获取

 HANDLE ProcessHandle=NULL;
DWORD pPID=NULL;
DWORD TID=NULL;
HWND i = FindWindowW(NULL, L"游戏窗口名称");
TID=GetWindowThreadProcessId(i,&pPID);
ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pPID);
/映射字节集到进程
DWORD MappingBytes(PVOID Address,DWORD BYTE_SIZE,WCHAR Nume[])
{
DWORD vaddress=NULL,size=NULL;
HANDLE hMap=CreateFileMappingW(INVALID_HANDLE_VALUE,NULL,PAGE_EXECUTE_READWRITE,NULL,BYTE_SIZE,Nume);
if(hMap!=NULL)
{
HANDLE pAddress=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,NULL,NULL,NULL);
if(pAddress!=NULL)
{
RtlMoveMemory(pAddress,Address,BYTE_SIZE);
//映射字节集到目标进程
ZwMapViewOfSection(hMap,ProcessHandle,&vaddress,NULL,NULL,NULL,&size,,,PAGE_EXECUTE_READWRITE);
UnmapViewOfFile(pAddress);
return vaddress;
}
}
return ;
}
//获取HOOK函数的字节数量//记得HOOK函数最后加上 int 0 不然无法判断
DWORD GetFunctionLong(DWORD JMPAddress)
{
BYTE *p=(BYTE*)JMPAddress;
int i=;
while (TRUE)
{
if((DWORD)*p==)
{
return i;
}
p++;
i++;
}
return ;
}
//远程调用CALL函数主功能 //要调用的CALL,参数结构,结构大小 可实现任意个数参数调用(看下面怎么获取参数的) 只测试了DWORD类型参数
DWORD LoadCALL(DWORD* CALLAddress, DWORD* ParameterStruct, DWORD ParameterStruct_SIZE)
{
DWORD vaddress = NULL, size = NULL,lsbuff = ,lenght=,structbuff=;
lenght = GetFunctionLong((DWORD)CALLAddress);
HANDLE hMap = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, NULL, lenght, L"CALL");
if (hMap != NULL)
{
HANDLE pAddress = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, NULL, NULL, NULL);
if (pAddress != NULL)
{
RtlMoveMemory(pAddress, CALLAddress, lenght);
//映射CALL字节集到目标进程
ZwMapViewOfSection(hMap, ProcessHandle, &vaddress, NULL, NULL, NULL, &size, , , );
//映射参数结构到目标进程
structbuff=MappingBytes((PVOID)ParameterStruct, ParameterStruct_SIZE, L"struct");
//修改内存页面保护属性
VirtualProtectEx(ProcessHandle, (LPVOID)vaddress, lenght, PAGE_EXECUTE_READWRITE, &lsbuff);
//创建远线程执行CALL
CreateRemoteThread(ProcessHandle, NULL, NULL, (LPTHREAD_START_ROUTINE)vaddress, (LPVOID)structbuff, NULL, NULL);
UnmapViewOfFile(pAddress);
return = vaddress;
}
}
return ;
} //调用远程CALL格式
/*
3 参数结构
4 typedef struct A
5 {
6 DWORD a1;
7 DWORD a2;
8 DWORD a3;
9 DWORD a4;
10 };
11 typedef struct A A1;
12 typedef A1 *A2;
13
14 要调用的CALL
15 void __declspec( naked ) ZwGoodsCALL()
16 {
17 _asm
18 {
19 MOV EAX, [ebp+8]
20 mov ebx,dword ptr ds : [eax] //取结构第一个参数 第二个+4 第三个+8依次加4
21 mov ecx,dword ptr ds : [eax+4]//获取第二个参数
22 retn
23 int 0// 结尾标识符 给获取函数长度函数做判断
24 }
25 }
26 调用方法
27 A2 pA2 = NULL;
28 pA2 = (A2)malloc(sizeof(A1));
29 pA2->a1 = 1;
30 pA2->a2 = 2;
31 pA2->a3 = 3;
32 pA2->a4 = 4;
33 LoadCALL((DWORD*)ZwGoodsCALL, (DWORD*)pA2, sizeof(A1));
34 */ //

内存映射+远线程 调用游戏CALL的更多相关文章

  1. linux编程之内存映射

    一.概述                                                   内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...

  2. VB.NET实现32位、64位远线程运行ASM,注入非托管、托管DLL

    这是一个老话题,远线程函数给我们提供了机会在其他进程中启动一个新线程,所以我们可以做很多事情.但事情远远没有结束,如果我们要做的事情非常复杂,那么将面临编写大量的ASM代码,虽然我们可以用VC之类的工 ...

  3. 《windows核心编程》 17章 内存映射文件

    内存映射文件主要用于以下三种情况: 系统使用内存映射文件载入并运行exe和dll,这大量节省了页交换文件的空间以及应用程序的启动时间 开发人员可以使用内存映射文件来访问磁盘上的数据文件.这使得我们可以 ...

  4. 内存映射文件MemoryMappedFile使用

    参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...

  5. Java NIO内存映射---上G大文件处理(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了java中内存映射的原理及过程,与传统IO进行了对比,最后,用实例说明了结果 ...

  6. [转载]linux内存映射mmap原理分析【转】

    转自:http://www.cnblogs.com/wanpengcoder/articles/5306688.html 转自:http://blog.csdn.net/yusiguyuan/arti ...

  7. .NET 4.0中使用内存映射文件实现进程通讯

    操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...

  8. Linux驱动mmap内存映射

    mmap在linux哪里? 什么是mmap? 上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED).LCD控制器.磁盘控制器,实际上就是往设备的物理地址读写数据. ...

  9. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

随机推荐

  1. SQL-LINQ-Lambda语法对照

    SQL LINQ Lambda SELECT *FROM HumanResources.Employee from e in Employees select e Employees .Select ...

  2. oracle从客户端到sql语句追踪

    这两天看小布老师的视频学习了一下从客户端到oracle数据库发送执行的SQL语句的跟踪,整理一下笔记. 需要用到的命令:netstat oracle端要用到的四个视图为: V$session:当前有多 ...

  3. mysql定时器三部曲

    1.查看事件状态 SELECT @@event_scheduler;  或    show VARIABLES LIKE '%sche%'; 2.创建存储过程 示例一批量新增: delimiter | ...

  4. uva10622 Perfect P-th Powers

    留坑(p.343) 完全不知道哪里有问题qwq 从31向下开始枚举p,二分找存在性,或者数学函数什么的也兹辞啊 #include<cstdio> #include<cstring&g ...

  5. BootStrap-table 客户端分页和服务端分页的区别

    当服务器没有对数据进行分页时,前端页面设计又要求进行分页,要分开来设置. 服务端分页: responseHandler: function(data){ return data.response; } ...

  6. 深入了解VSTS的Unit Test测试属性

    深入的了解一下方法上带有的属性的含义.每个方法上几乎都带有TestMethod这个属性,我们直觉告诉我们,这肯定是表示被测试函数的意思.事实也正是如此,在Unit Test里,有许多测试属性,常用的如 ...

  7. HDU2255 奔小康赚大钱【二分图最佳匹配】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=2255 题目大意: 村里要分房子. 有N家老百姓,刚好有N间房子.考虑到每家都要有房住,每家必须分配 ...

  8. richTextBox1 转到行号

      private void button2_Click(object sender, EventArgs e) {     Win32CommonDialog.frm_GOTO frm = new  ...

  9. mysqldump 定时任务 执行后备份的文件为空

    #!/bin/bash mysql_host="127.0.0.1" mysql_user="root" mysql_passwd="******** ...

  10. [AngularJS + Unit Testing] Testing Directive's controller with bindToController, controllerAs and isolate scope

    <div> <h2>{{vm.userInfo.number}} - {{vm.userInfo.name}}</h2> </div> 'use str ...