首页 > 编程语言 > 详细

windows创建远程线程

时间:2020-04-21 16:33:01      阅读:48      评论:0      收藏:0      [点我收藏+]

创建远程进程是在其他进程(非当前进程)中创建一个线程,需要使用 CreateRemoteThread 函数。CreateRemoteThread 函数和 CreateThread 函数相比,只多了一个 HANDLE 类型的参数,这个参数是需要创建线程的进程的句柄。获取到进程句柄后调用 CreateRemoteThread  函数就行了。

被创建线程的进程的源代码如下:

 1 #include <stdio.h>
 2 #include <Windows.h>
 3 
 4 void foo() {
 5     printf("this is foo function!\n");
 6     return;
 7 }
 8 
 9 int main() {
10 
11     printf("The address of foo: %x\n", &foo);
12     foo();
13 
14     getchar();
15 
16     return 0;
17 }

 

当前进程的源代码:

 1 #include <stdio.h>
 2 #include <Windows.h>
 3 
 4 char msg[128];
 5 
 6 BOOL MyCreateRemoteThread(DWORD dwProcessId, DWORD fun) {
 7     /*
 8         1. 获取被创建线程的进程的句柄
 9     */
10     HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, NULL, dwProcessId);
11     if (!hProc) {
12         sprintf(msg, "OpenProcess failed: %d", GetLastError());
13         MessageBox(NULL, msg, NULL, MB_OK);
14         return false;
15     }
16     /*
17         2. 创建远程线程    
18     */
19     HANDLE hrThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)fun, NULL, 0, NULL);
20     if (!hrThread) {
21         sprintf(msg, "CreateRemoteThread failed: %d", GetLastError());
22         CloseHandle(hProc);
23         MessageBox(NULL, msg, NULL, MB_OK);
24         return false;
25     }
26 
27 
28     CloseHandle(hProc);
29     CloseHandle(hrThread);
30     return true;
31 }
32 
33 int main() {
34    /* 这里的两个参数分别是要被创建线程的进程的PID和创建进程后要执行的代码的地址(注意这个地址不能是当前进程的地址)*/
35     MyCreateRemoteThread(8764, 0xf510f0);
36     return 0;
37 }

 

执行结果

创建远程进程前:

技术分享图片

 

 

创建远程线性后,foo 函数又执行了一遍。

 技术分享图片

 

windows创建远程线程

原文:https://www.cnblogs.com/triangleowl/p/12744977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!