45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:调用代码的远程的步骤

调用代码的远程的步骤

2016-08-31 16:39:52 来源:www.45fan.com 【

调用代码的远程的步骤

代码的远程调用涉及到以下技术难点

1.代码的拷贝:


		
调用代码的远程的步骤DWORDCodeSize=0; 调用代码的远程的步骤DWORDCodeStart=0; 调用代码的远程的步骤_asm 调用代码的远程的步骤调用代码的远程的步骤{ 调用代码的远程的步骤moveax,_end 调用代码的远程的步骤subeax,_begin 调用代码的远程的步骤movCodeSize,eaxmoveax,_begin 调用代码的远程的步骤movCodeStart,eax 调用代码的远程的步骤jmp_end 调用代码的远程的步骤_begin: 调用代码的远程的步骤//此处是具体的功能代码 调用代码的远程的步骤_end: 调用代码的远程的步骤} 调用代码的远程的步骤 调用代码的远程的步骤//计算要分配的空间 调用代码的远程的步骤DWORDToAllocateSize=CodeSize+sizeof(int); 调用代码的远程的步骤 调用代码的远程的步骤//分配空间 调用代码的远程的步骤LPVOIDRemotePointer=VirtualAllocEx(RemoteProcess,NULL,ToAllocateSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 调用代码的远程的步骤 调用代码的远程的步骤//拷贝代码 调用代码的远程的步骤WriteProcessMemory(RemoteProcess,RemotePointer,reinterpret_cast<char*>(CodeStart),CodeSize,NULL); 调用代码的远程的步骤//释放分配的空间 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,CodeSize,MEM_DECOMMIT); 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,0,MEM_RELEASE);

2.参数的传递:参数传递的难点在于定位,在上面的基础上面继续完成参数的传递

调用代码的远程的步骤intParam1=GetTickCount();//用于测试的参数,此处用GetTickCount来赋值是表明此值不是常量,所以需要传递给调用的代码 调用代码的远程的步骤DWORDCodeSize=0; 调用代码的远程的步骤DWORDCodeStart=0; 调用代码的远程的步骤_asm 调用代码的远程的步骤调用代码的远程的步骤{ 调用代码的远程的步骤moveax,_end 调用代码的远程的步骤subeax,_begin 调用代码的远程的步骤movCodeSize,eaxmoveax,_begin 调用代码的远程的步骤movCodeStart,eax 调用代码的远程的步骤jmp_end 调用代码的远程的步骤_begin: 调用代码的远程的步骤//注意,下面是使用传递过来的数据 调用代码的远程的步骤//获取重定位信息 调用代码的远程的步骤calldelta 调用代码的远程的步骤delta:popebp 调用代码的远程的步骤moveax,offsetdelta 调用代码的远程的步骤subebp,eax 调用代码的远程的步骤//完成重定位,得到_end的真实地址,_end之后跟的是数据 调用代码的远程的步骤movebx,_end 调用代码的远程的步骤addebx,ebp 调用代码的远程的步骤//上面的步骤执行完了之后,ebx里面就是_end的实际位置了,在这里也就是指向Param1了 调用代码的远程的步骤 调用代码的远程的步骤_end: 调用代码的远程的步骤} 调用代码的远程的步骤//计算要分配的空间 调用代码的远程的步骤DWORDToAllocateSize=CodeSize+sizeof(int); 调用代码的远程的步骤 调用代码的远程的步骤//分配空间 调用代码的远程的步骤LPVOIDRemotePointer=VirtualAllocEx(RemoteProcess,NULL,ToAllocateSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 调用代码的远程的步骤//拷贝代码 调用代码的远程的步骤WriteProcessMemory(RemoteProcess,RemotePointer,reinterpret_cast<char*>(CodeStart),CodeSize,NULL); 调用代码的远程的步骤//接着前面的代码拷贝数据 调用代码的远程的步骤WriteProcessMemory(RemoteProcess,RemotePointer+CodeSize,reinterpret_cast<char*>(&Param1),sizeof(int),NULL); 调用代码的远程的步骤 调用代码的远程的步骤//释放分配的空间 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,CodeSize,MEM_DECOMMIT); 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,0,MEM_RELEASE);
3.调用:调用实在是再简单不过的事情了,上面的代码完成之后,可以使用你可以想到的调用方式,目前有实际意思的是远程线程以及网络调用

远程线程的方法:

调用代码的远程的步骤intParam1=GetTickCount();//用于测试的参数,此处用GetTickCount来赋值是表明此值不是常量,所以需要传递给调用的代码 调用代码的远程的步骤DWORDCodeSize=0; 调用代码的远程的步骤DWORDCodeStart=0; 调用代码的远程的步骤_asm 调用代码的远程的步骤调用代码的远程的步骤{ 调用代码的远程的步骤moveax,_end 调用代码的远程的步骤subeax,_begin 调用代码的远程的步骤movCodeSize,eaxmoveax,_begin 调用代码的远程的步骤movCodeStart,eax 调用代码的远程的步骤jmp_end 调用代码的远程的步骤_begin: 调用代码的远程的步骤//注意,下面是使用传递过来的数据 调用代码的远程的步骤//获取重定位信息 调用代码的远程的步骤calldelta 调用代码的远程的步骤delta:popebp 调用代码的远程的步骤moveax,offsetdelta 调用代码的远程的步骤subebp,eax 调用代码的远程的步骤//完成重定位,得到_end的真实地址,_end之后跟的是数据 调用代码的远程的步骤movebx,_end 调用代码的远程的步骤addebx,ebp 调用代码的远程的步骤//上面的步骤执行完了之后,ebx里面就是_end的实际位置了,在这里也就是指向Param1了 调用代码的远程的步骤 调用代码的远程的步骤_end: 调用代码的远程的步骤} 调用代码的远程的步骤//计算要分配的空间 调用代码的远程的步骤DWORDToAllocateSize=CodeSize+sizeof(int); 调用代码的远程的步骤 调用代码的远程的步骤//分配空间 调用代码的远程的步骤LPVOIDRemotePointer=VirtualAllocEx(RemoteProcess,NULL,ToAllocateSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 调用代码的远程的步骤//拷贝代码 调用代码的远程的步骤WriteProcessMemory(RemoteProcess,RemotePointer,reinterpret_cast<char*>(CodeStart),CodeSize,NULL); 调用代码的远程的步骤//接着前面的代码拷贝数据 调用代码的远程的步骤WriteProcessMemory(RemoteProcess,RemotePointer+CodeSize,reinterpret_cast<char*>(&Param1),sizeof(int),NULL); 调用代码的远程的步骤 调用代码的远程的步骤//远程调用 调用代码的远程的步骤HANDLERemoteThread=CreateRemoteThread(RemoteProcess,NULL,0,reinterpret_cast<PTHREAD_START_ROUTINE>(RemotePointer),0,0,NULL); 调用代码的远程的步骤WaitForSingleObject(RemoteThread,INFINITE); 调用代码的远程的步骤 调用代码的远程的步骤//释放分配的空间 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,CodeSize,MEM_DECOMMIT); 调用代码的远程的步骤VirtualFreeEx(RemoteProcess,RemotePointer,0,MEM_RELEASE);
网络调用可以把上述的代码进行修改之后,通过网络传输之后,由接受放负责调用
 

本文地址:http://www.45fan.com/a/question/70372.html
Tags: 远程 技术 代码
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部