美文网首页
C++远程调用(跨线程代码注入执行)

C++远程调用(跨线程代码注入执行)

作者: blank_white | 来源:发表于2020-06-21 15:38 被阅读0次

1.获取目标进程句柄

参考内存读写获取句柄

HANDLE handle

2.在目标进程内分配内存空间

PVOID FarCall=VirtuakAllocEx(handle,NULL,0xffff,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

0xffff :所分配空间大小

FarCall:分配空间的地址

3.向分配的空间内写入要执行的代码

DWORD bywrite;//用于保存函数的返回信息,一般用不上

//__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码
//__declspec(naked)是编译器直接拿来用的汇编函数代码,所以一定要记得在开始的时候保存上下文标志位(压栈),在结束的时候要记得恢复上下文(出栈)。并且在结尾要加上ret命令
__declspec(naked) void plant1(DWORD *pxy)
{      __asm
        {        
              mov ebx, [esp+4]
            //此时ebx 内存储 pxy 值,这里的 esp +4 暂时这样理解,带参数的远程调用,B进程发起远程调用 A ,A 会 push 参数地址 ,push IP , jmp 调用地址 ,所以 esp +4 为 参数地址存储位置
            ret;
    }
}
WriteProcessMemory(handle,FarCall,plant1,0xffff,&bywrite);

//远程调用如过有参数同样要给参数分配内存空间,把参数写入
DWORD xy[5];
PVOID CallArg=VirtuakAllocEx(handle,NULL,sizeof(DWORD)*5,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
WriteProcessMemory(handle,CallArg,xy,sizeof(xy),&bywrite);

4.远程调用

HANDLE h_remote=CreateRemoteThread(handle,NULL,NULL堆栈未使用所以空,(LPTHREAD_START_ROUTINE)FarCall,CallArg没有参数则为空, NULL, NULL);

//等待远程调用结束,否则在下一步中可能会出现远程调用未结束,就释放了内存,造成调用函数未执行完全
WaitForSingleObject(h_remote,6666最大等待时间);
VirtualFreeEx(handle,FarCall,0xffff,MEM_DECOMMIT);

相关文章

  • C++远程调用(跨线程代码注入执行)

    1.获取目标进程句柄 参考内存读写获取句柄 2.在目标进程内分配内存空间 0xffff :所分配空间大小 FarC...

  • 2018-04-15多线程-全局变量-互斥锁

    多线程----threadingthread跨平台较弱,threading可以跨平台调用理解线程:进程里面执行代码...

  • CTF中的命令执行绕过

    在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同。他们的区别在于,远程代码执行实际上是调用服务器网站...

  • 一种纯粹的C++回调OC函数/方法的方式

    起因 因为在做跨端SDK,语言用的C++,想尽量把C++代码和OC代码解耦,OC调用C++倒是简单,改个源文件的名...

  • 2017-12-30

    rpc 远程过程调用 rmi 远程方法调用 EJB jsp的功能代码分类转移到对应的服务器执行 //https:/...

  • C++子线程调用Java方法

    1. C++ 全局调用Java方法 之前讨论过,如何C++主线程中调用 Java 函数C++主线程调用Java方法...

  • Java多线程编程核心技术

    多线程基础 概念 进程 线程 线程的调用的随机性:代码的运行结果与代码执行顺序或调用顺序是无关的.CPU以不确定的...

  • C++主线程调用Java方法

    1. C++ 全局调用Java方法 1.1 C++主线程调用Java方法 在 Android C++多线程-创建子...

  • JAVA多线程入门

    继承Thread父类 线程代码执行顺序和调用顺序无关,例如: 上述代码执行理论上“MyThread”和“mainT...

  • Java——Join()

    调用某个线程的Join方法时,这个方法会挂起调用线程,直到被调用线程结束执行,调用线程才会继续执行。 public...

网友评论

      本文标题:C++远程调用(跨线程代码注入执行)

      本文链接:https://www.haomeiwen.com/subject/audbnctx.html