以挂起的方式创建进程

BOOL CreateProcess(  
    LPCTSTR lpApplicationName,                 // name of executable module  
    LPTSTR lpCommandLine,                      // command line string  
    LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD  
    LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD  
    BOOL bInheritHandles,                      // handle inheritance option  
    DWORD dwCreationFlags,                     // creation flags  
    LPVOID lpEnvironment,                      // new environment block  
    LPCTSTR lpCurrentDirectory,                // current directory name  
    LPSTARTUPINFO lpStartupInfo,               // startup information  
    LPPROCESS_INFORMATION lpProcessInformation // process information  

DWORD dwCreationFlags
//此参数指定创建进程的方式,CREATE_NEW_CONSOLE(创建控制台)或者NULL;
//如果创建子进程时设为NULL,则子进程没有控制台,而使用父进程的控制台
//CREATE_SUSPENDED 以挂起的方式创建进程

如果以CREATE_SUSPENDED 以挂起的方式创建进程,系统只会分配4G空间,而不会执行拉伸等后续操作,此时可以就可以对这个空间做一些你懂的事情。
STARTUPINFO ie_si = {0};   								
PROCESS_INFORMATION ie_pi;								
ie_si.cb = sizeof(ie_si);								
								
TCHAR szBuffer[256] = "C:\\notepad.exe";								
CreateProcess(								
	NULL,                  							
	szBuffer,                							
	NULL, 							
	NULL,  							
	FALSE,                   							
	CREATE_SUSPENDED,     							
	NULL,                    							
	NULL,                    							
	&ie_si,                  							
	&ie_pi                  							
	);							
								
//恢复执行								
ResumeThread(ie_pi.hThread);								
																								
2、以挂起的方式创建进程,获取进程的ImageBase和AddressOfEntryPoint								
								
STARTUPINFO ie_si = {0};   								
PROCESS_INFORMATION ie_pi;								
ie_si.cb = sizeof(ie_si);								
								
//以挂起的方式创建进程								
TCHAR szBuffer[256] = "C:\\ipmsg.exe";								
CreateProcess(								
	NULL,                    // name of executable module							
	szBuffer,                // command line string							
	NULL, 					 // SD		
	NULL,  		             // SD					
	FALSE,                   // handle inheritance option							
	CREATE_SUSPENDED,     	 // creation flags  						
	NULL,                    // new environment block							
	NULL,                    // current directory name							
	&ie_si,                  // startup information							
	&ie_pi                   // process information							
	);							
								
								
CONTEXT contx;  								
contx.ContextFlags = CONTEXT_FULL;  								
								
								
GetThreadContext(ie_pi.hThread, &contx);								
								
//获取入口点								
DWORD dwEntryPoint = contx.Eax;								
								
//获取ImageBase								
char* baseAddress = (CHAR *) contx.Ebx+8;								
								
memset(szBuffer,0,256);								
								
ReadProcessMemory(ie_pi.hProcess,baseAddress,szBuffer,4,NULL);								
								
								
ResumeThread(ie_pi.hThread);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值