进程的创建

admin 2018年5月10日18:56:45评论420 views字数 2023阅读6分44秒阅读模式
摘要

exp: 启动qq


进程的创建

进程的启动过程

  1. 打开目标exe的映象文件
  2. 创建进程内核对象
  3. 映射NTDLL到内存
  4. 创建线程内核对象
  5. 通知子系统对进程进行管理
  6. 启动线程初始化空间和加载其他DLL
  7. 跳转到入口处开始执行

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; }

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月10日18:56:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   进程的创建http://cn-sec.com/archives/51263.html

发表评论

匿名网友 填写信息