进程的创建
进程的启动过程
- 打开目标exe的映象文件
- 创建进程内核对象
- 映射NTDLL到内存
- 创建线程内核对象
- 通知子系统对进程进行管理
- 启动线程初始化空间和加载其他DLL
- 跳转到入口处开始执行
CreateProcess api
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 ); //中文版注释 BOOL CreateProcess( LPCTSTR lpApplicationName, // 可执行模块名称 (全路径 必须是const字符串 LPTSTR lpCommandLine, // 命令行(字符串 可以不是const字符串 LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全描述符 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程描述符 BOOL bInheritHandles, // 继承标志位 DWORD dwCreationFlags, // 创建标志位 (指定控制优先级和创建过程的额外标志,除了如前说,可以在任何组合中指定下列创建标标志 LPVOID lpEnvironment, // 进程环境块 LPCTSTR lpCurrentDirectory, // 驱动目录 LPSTARTUPINFO lpStartupInfo, // 启动信息 指向一个窗体结构,该接口体表示新进程的窗口应该如何出现 LPPROCESS_INFORMATION lpProcessInformation // 进程信息 ); //启动信息参数的结构体 typedef struct _STARTUPINFO { DWORD cb; //记录指定结构体大小,以字节为单位 LPTSTR lpReserved; LPTSTR lpDesktop; LPTSTR lpTitle; //对于控制台进程,日过创建了新的控制欲窗口,则会显示标题栏中的标题,如果NULL。可执行文件额名称将会用作窗口标题, This parameter must be NULL for GUI or console processes that do not create a new console window. DWORD dwX; //控制窗口位置x DWORD dwY; //控制窗口位置y DWORD dwXSize; //控制窗口宽度 DWORD dwYSize; //控制窗口高度 DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow; //窗口显示方式 WORD cbReserved2; LPBYTE lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO; //进程信息结构体 typedef struct _PROCESS_INFORMATION { HANDLE hProcess; //进程句柄 HANDLE hThread; //主线程句柄 DWORD dwProcessId; //被创建的进程id DWORD dwThreadId; //被创建的主线程ID } PROCESS_INFORMATION;
exp: 启动qq
#include "stdafx.h" #include <windows.h> int main() { STARTUPINFO start_info = { 0 }; start_info.cb = sizeof STARTUPINFO; PROCESS_INFORMATION process_info = { 0 }; CreateProcess( L"C://Windows//System32//notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &start_info, &process_info ); return 0; }
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论