滴水 2.28 进程创建 终止 继承

一、进程的创建过程:
image
当系统启动后,创建一个进程:Explorer.exe 也就是桌面进程.
当用户双击某一个EXE时,Explorer 进程使用CreateProcess函数创建被双击的EXE,也就是说,我们在桌面上双击创建的进程都是Explorer进程的子进程.
父进程挂了 子进程不会挂 进程不能单独创建
2.CreateProcess 创建进程过程
image
image
image
3.CreateProcess实操-参数介绍
image
用自己写的软件 创建进程

第一个参数传递
#include "stdafx.h"
#include <windows.h>

	VOID TestCreateProcessByAPPName()					
	{					
		STARTUPINFO si = {0};   				
	    	PROCESS_INFORMATION pi;				
						
		si.cb = sizeof(si);				
						
		TCHAR szApplicationName[] =TEXT("C:\\Program Files\\PCHunter32.exe");				
						
		BOOL res = CreateProcess(				
			szApplicationName, 			
			NULL, 			
			NULL, 			
			NULL, 			
			FALSE, 			
			CREATE_NEW_CONSOLE, 			
			NULL, 			
			NULL, &si, &pi); 			
	   					
	}					



参数2打开
#include "stdafx.h"
#include <windows.h>
	VOID TestCreateProcessByCmdline()					
	{					
		STARTUPINFO si = {0};   				
	    PROCESS_INFORMATION pi;				
						
		si.cb = sizeof(si);				
						
		TCHAR szCmdline[] =TEXT("C:\\Documents and Settings\\Administrator\\Local Settings\\Application Data\\360Chrome\\Chrome\\Application\\360chrome.exe http://www.ifeng.com");				
			
						
		BOOL res = CreateProcess(				
			NULL, 			
			szCmdline, 			
			NULL, 			
			NULL, 			
			FALSE, 			
			CREATE_NEW_CONSOLE, 			
			NULL, 			
			NULL, &si, &pi); 			
	}					
					




参数1 参数2 合并打开

	VOID TestCreateProcess()					
	{					
		STARTUPINFO si = {0};   				
	    	PROCESS_INFORMATION pi;				
						
		si.cb = sizeof(si);				
						
		TCHAR szCmdline[] =TEXT(" http://www.ifeng.com");				
						
		BOOL res = CreateProcess(				
			TEXT("c://program files//internet explorer//iexplore.exe"), 			
			szCmdline, 			
			NULL, 			
			NULL, 			
			FALSE, 			
			CREATE_NEW_CONSOLE, 			
			NULL, 			
			NULL, &si, &pi); 			
	}					
		

image
image

ppiProcInfo指向一个PROCESS_INFORMATION,该结构体包含新创建的进程和线程内核对象的句柄以及id
image

3.句柄和ID--进程销毁
image
image

4.句柄继承
image
image

进程1
// ZZZZ.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
	VOID TestCreateProcessByCmdline()					
	{					
		char szBuffer[256] = {0};							
	char szHandle[8] = {0};							
	//若要创建能继承的句柄,父进程必须指定一个SECURITY_ATTRIBUTES结构并对它进行初始化							
	//三个成员的意义:大小、默认安全属性、是否可以继承							
	SECURITY_ATTRIBUTES sa;							
	sa.nLength = sizeof(sa);							
	sa.lpSecurityDescriptor = NULL;							
	sa.bInheritHandle = TRUE; 							
	//创建一个可以被继承的内核对象							
	HANDLE g_hEvent = CreateEvent(&sa, TRUE, FALSE, NULL);							
								
	//组织命令行参数							
	sprintf(szHandle,"%x",g_hEvent);							
	sprintf(szBuffer,"C:/z2.exe %s",szHandle);							
								
	//定义创建进程需要用的结构体							
	STARTUPINFO si = {0};   							
	PROCESS_INFORMATION pi;							
	si.cb = sizeof(si);							
							
		BOOL res = CreateProcess(		
		NULL, 	
		szBuffer, 	
		NULL, 	
		NULL, 	
		TRUE, 	
		CREATE_NEW_CONSOLE, 	
		NULL, 	
		NULL, &si, &pi); 	
			
	//设置事件为已通知			
	SetEvent(g_hEvent);			
				
	//关闭句柄 内核对象是否会被销毁?			
	CloseHandle(g_hEvent);  			

	
	
	}
					


int main(int argc, char* argv[])
{
	TestCreateProcessByCmdline();
	printf("Hello World!\n");
	getchar();
	return 0;
}
进程2
| char szBuffer[256] = {0};                |
| ---------------------------------------- |
| memcpy(szBuffer,argv[1],8);              |
|                                          |
| DWORD dwHandle = 0;                      |
|                                          |
| sscanf(szBuffer,"%x",&dwHandle);         |
|                                          |
| printf("%s\n",argv[0]);                  |
|                                          |
| printf("%x\n",dwHandle);                 |
|                                          |
| HANDLE g_hEvent = (HANDLE)dwHandle;      |
|                                          |
|                                          |
| printf("开始等待.....\n");                   |
| //当事件变成已通知时                              |
| WaitForSingleObject(g_hEvent, INFINITE); |
|                                          |
| DWORD dwCode = GetLastError();           |
|                                          |
| printf("等到消息.....%x\n",dwCode);          |
|                                          |
| getchar();                               |
posted @ 2023-02-28 11:20  逆向狗  阅读(55)  评论(0)    收藏  举报