ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。...返回值: 若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一: ① 0:系统内存或资源已耗尽。 ...其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中(PROCESS_INFORMATION)。CreateProcess返回该结构中的进程ID及其句柄,以及初始线程ID及其句柄。...ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。...CreateProcess返回该结构中的进 程ID及其句柄,以及初始线程ID及其句柄。可以将ID发送到 其它进程,或使用句 柄来控制新进程。
ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。 ...返回值: 若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一: ① 0:系统内存或资源已耗尽。 ...lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。 ...其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中(PROCESS_INFORMATION)。CreateProcess返回该结构中的进程ID及其句柄,以及初始线程ID及其句柄。...可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
创建进程函数 CreateProcess CreateProcessW( _In_opt_ LPCWSTR lpApplicationName,// 该字符串可以指定要执行的模块的完整路径和文件名...LPWSTR lpCommandLine, //命令行 _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, //该 结构确定子进程是否可以继承返回到新进程对象的句柄...如果//lpProcessAttributes为NULL,则不能继承该句柄 _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, //该 结构确定子进程是否可以继承返回到新线程对象的句柄...请注意,继承的句柄与原始句柄具有相同的值和//访问权限 _In_ DWORD dwCreationFlags,// 控制优先级类别和流程创建的标志 CREATE_NEW_CONSOLE _In_opt...命名管道 支持网络之间不同进程的通信 CreateNamedPipe HANDLE CreateNamedPipeA( LPCSTR lpName, // \.
我们知道Windows里启动一个进程可以使用createprocess函数(https://docs.microsoft.com/en-us/previous-versions/aa908775(v=msdn...比如: chrome.exe urlstr 其中urlstr可控,原意是使用chrome.exe打开用户传递的链接。...0x03 火狐浏览器-过滤空格 这是我今天重点要讲的,这里我们限制一下条件: 1. 限制createprocess的传入启动程序为firefox.exe 2....换句话说我们得指定与桌面环境不同的配置文件来生成这个headless实例才能避免和桌面环境的火狐冲突。...\tdefault 这样做我们就能启动一个运行在后台并且访问我们的beef的headless状态的火狐浏览器,这个进程会长期挂在后台,前台新开火狐等操作是感知不到的。
⑶ 返回值: 若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一: ① 0:系统内存或资源已耗尽。 ...lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。 ...lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。 ...可以用来设置控台的标题,新窗口的的初始大小和位置,及重定向标准输入 和输出。新程序通常可以忽略多数这些数据项,如果选择那样做的话。可以规定该结构体中的标志,已表明要设置的数据段。...其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中 (PROCESS_INFORMATION)。CreateProcess返回该结构中的进程ID及其句柄,以及初始线程ID及其句柄。
如果参数的值为真,调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。 ...新进程树的用户标识符与这个进程的标识符是相同的,由 lpProcessInformation参数返回。...如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。 ...这个线程将连同一个已初始化了的堆栈一起被创建,堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。 新进程和新线程的句柄被以全局访问权限创建。...由CreateProcess函数返回的句柄对于进程对象具有PROCESS_ALL_ACCESS的访问权限。 由lpcurrentDirectory参数指定的当前目录室子进程对象的当前目录。
病毒木马植入模块成功植入用户计算机之后,便会启动攻击模块来对用户计算机数据实施窃取和回传等操作。通常植入和攻击是分开在不同模块之中的,这里的模块指的是DLL、exe或其他加密的PE文件等。...本章介绍了3种常用的病毒木马启动技术,它包括: q 创建进程API:介绍使用WinExec、ShellExecute以及CreateProcess创建进程。...bInheritHandles [in] 如果此参数为TRUE,则调用进程中的每个可继承句柄都由新进程继承;如果参数为FALSE,则不能继承句柄。请注意,继承的句柄具有与原始句柄相同的值和访问权限。...CreateProcessAsUser函数的用法以及参数含义与CreateProcess函数的用法和参数含义类似。...服务程序的入口点与普通程序的入口点不同,需要通过调用函数StartServiceCtrlDispatcher来设置服务入口点函数。
而它创建的时候.是通过API CreateProcess 进行创建的. 2.原理.CreateProcess做了什么事情. 1.映射exe内存. 当调用CreateProcess的时候....当我们创建进程完毕后.会得到进程的句柄.线程句柄. 进程id,线程id. 这个是个传出参数.表示返回值....进程信息结构体 typedef struct _PROCESS_INFORMATION { HANDLE hProcess; 返回的进程句柄...HANDLE hThread; 返回的线程句柄 DWORD dwProcessId;...CloseHandle(句柄) 关闭句柄. 当CreateProcess创建进程完毕后会返回进程信息结构体. 里面的句柄如果不适用我们需要使用CloseHandle进行关闭. 四丶详细代码.
,用于接收创建的管道的读端和写端的句柄。...同时,CreateProcess()函数会返回一个PROCESS_INFORMATION结构体,其中包含新进程的句柄和ID等信息。...如下RunCommand函数所示,该函数传入一个字符串类型的命令参数,并返回一个字符串执行结果,在函数内部,使用 CreatePipe() 函数创建了一个匿名管道,并使用 CreateProcess()...函数启动了一个新的 CMD 进程并将其标准输出和错误输出重定向到管道的写入端。...接着使用 ReadFile() 函数从管道的读取端读取输出数据,并将读取到的数据存储到一个缓冲区中。最后,它将缓冲区的内容拼接成一个完整的输出结果返回给调用者。
但是,由于WinExec()函数没有提供区分进程启动成功和失败的返回值,且无法从函数返回的进程句柄获得与进程相关的信息,因此使用较为有限。...:指定程序窗口最初显示方式,如SW_SHOW,即窗口正常大小和位置显示 WinExec 函数的返回值是一个无符号整数,它表示进程是否成功启动。...若成功启动,则返回值为任务句柄。否则,返回值为0。...ShellExecute()函数的优点是可以控制进程的启动方式、传递命令参数,并对返回值进行判断,通过传递参数来控制启动进程的方式,比如最大化或最小化窗口,或者在后台启动进程。...指定新进程的初始工作目录,如果为NULL,则使用与调用进程相同的当前目录 lpStartupInfo:指向STARTUPINFO结构体的指针 lpProcessInformation:进程信息结构,包括新进程的句柄和进程
但是,由于WinExec()函数没有提供区分进程启动成功和失败的返回值,且无法从函数返回的进程句柄获得与进程相关的信息,因此使用较为有限。...,如SW_SHOW,即窗口正常大小和位置显示WinExec 函数的返回值是一个无符号整数,它表示进程是否成功启动。...若成功启动,则返回值为任务句柄。否则,返回值为0。...ShellExecute()函数的优点是可以控制进程的启动方式、传递命令参数,并对返回值进行判断,通过传递参数来控制启动进程的方式,比如最大化或最小化窗口,或者在后台启动进程。...,如果为NULL,则使用与调用进程相同的当前目录lpStartupInfo:指向STARTUPINFO结构体的指针lpProcessInformation:进程信息结构,包括新进程的句柄和进程ID 如果仅仅只是需要将一个进程拉起来
⑶ 返回值: 若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一: ① 0:系统内存或资源已耗尽。 ...⑷ 程序示例 下面通过一个例子来说名WinExec和ShellExecute的使用。下面程序有控制台程序示例,其使用两种不同的方法,打开文本文件。...lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。 ...lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。 ...其返回值是布尔型的,而真正感兴趣的返回值发生于作为参数传送的结构中(PROCESS_INFORMATION)。CreateProcess返回该结构中的进程ID及其句柄,以及初始线程ID及其句柄。
lpDirectory; // 工作目录 int nShow; // 显示方式 HINSTANCE hInstApp; // 接收 ShellExcuteEX 的返回值...、注册表路径 HKEY hkeyClass; // 当 fMask = SEE_MASK_CLASSNAME 时使用 DWORD dwHotKey; // 与应用程序关联的键盘快捷键...,fMask = SEE_MASK_HMONITOR 时使用 } DUMMYUNIONNAME; HANDLE hProcess; // 新启动的应用程序的句柄 } SHELLEXECUTEINFOA...,发现 CreateProcess 的第二个参数有一句这么写到: 也就是说 CreateProcessW 的第二个参数不能是一个常量字符串,或者是一个指向只读地址的指针,这么也就说通了,因为L"E:\...PROCESS_INFORMATION { HANDLE hProcess; // 新创建进程的句柄 HANDLE hThread; // 新创建进程的主线程的句柄 DWORD dwProcessId
LaunchProcess LaunchProcess的基本实现是利用了CreateProcess系列函数来实现进程的启动,其中LaunchOptions则是主要和CreateProcess的各个参数一一对应...进程启动在windows上面需要额外注意UAC也就是是否管理员权限启动,有以下四种场景 非管理员权限应用 启动 非管理员权限进程 + 管理员权限应用 启动 管理员权限进程 这两种情况,应用利用CreateProcess...lpClass:用于指定注册表中的类名。 hkeyClass:用于指定注册表中的类键。 dwHotKey:指定与应用程序关联的热键。 hIcon/hMonitor:用于指定图标句柄或监视器句柄。...hProcess:如果设置了SEE_MASK_NOCLOSEPROCESS标志,这个字段会被设置为启动的进程的句柄。...如果命令执行成功并且正常退出,返回true,并且命令的退出代码可以通过exit_code指针获得。
调用入口点函数 如:int nMainRetVal = wmain(__argc, __wargv, _wenviron); 当进入点函数返回时,启动函数便调用C 执行期的ex i t 函数...的时候,会返回当前调用模块的所有路径名字。...这就是两个全然不同的环境变量了。...当前文件夹和进程的启动文件夹是不同的,启动文件夹就是exe或者dll被调用的文件夹,我们能够通过GetModuleFineName函数进行处理。... lpProcessAttributes 指向 SECURITY_ATTRIBUTES的指针。决定进程创建函数返回的的新进程对象的句柄能否被子进程继承。
常规api创建进程 通过常用的api来创建进程是常规启动进程的方式,最常用的几个api有WinExec、ShellExecute、CreateProcess,我们一个一个来看一下 WinExec 首先是...(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制 HINSTANCE ShellExecuteA( [in, optional] HWND hwnd, [...,干活儿是里面的线程,所以下一步就是创建目标进程的初始线程 与EPROCESS对应,线程的数据结构是ETHREAD,与进程环境块PEB对应,线程也有线程环境块TEB; PEB在用户空间的位置大致是固定的...,完成之后再从ring0返回ring3。...该函数的调用不需要任何参数,直接返回Session Id。根据Session Id继续调用WTSQueryUserToken函数来检索用户令牌,并获取对应的用户令牌句柄。
TRUE,无论是从VS中启动调试还是从资源管理器中启动。...//原来,从资源管理器或者VS中启动程序时,系统会自动把该进程放到一个作业(Job)中。知道了这一点,要想让这段代码返回FALSE,只要从CMD中启动该程序即可。...UI限制的用户对象的句柄的权限.当授予了访问权限,所有相关联的进程都可以在随后识别和使用这个句柄.当访问被拒绝,该进程不能在使用该句柄....STARTUPINFO si = { 0 }; si.cb = sizeof(si); PROCESS_INFORMATION pi = { 0 }; bret = CreateProcess...+i) { pidlist->ProcessIdList[i]; } free(pidlist); pidlist = nullptr; //已分配的
,讲解调试程序和被调试程序之间如何建立联系 调试对象 调试器和被调试程序 调试器与被调试程序之间建立起联系的两种方式 CreateProcess DebugActiveProcess 与调试器建立连接...DEBUG_OBJECT, *PDEBUG_OBJECT; 然后到ntoskrnl里面看一下NtCreateDebugObject 然后调用了ObInsertObject创建DebugObject结构返回句柄...再回到ntdll.dll,当前线程回0环创建了一个DebugObject结构,返回句柄到3环存放在了TEB的0xF24偏移处 也就是说,遍历TEB的0xF24偏移的地方,如果有值则一定是调试器 与被调试程序建立连接..., 第一个参数为被调试对象的句柄,第二个参数为调试器的句柄 执行ObReferenceObjectByHandle,把被调试进程的句柄放到第五个参数里面,这里eax本来存储的是调试器的EPROCESS...ULONG Flags; //+38 标志 调试消息是否已读取 } DEBUG_OBJECT, *PDEBUG_OBJECT; 调试事件的处理 因为每种事件的调试信息不一样,所以会有很多种类
调试器与被调试程序之间建立起联系的两种方式 •CreateProcess •DebugActiveProcess 与调试器建立连接 首先看一下DebugActiveProcess 调用ntdll.dll...DEBUG_OBJECT, *PDEBUG_OBJECT; 然后到ntoskrnl里面看一下NtCreateDebugObject 然后调用了ObInsertObject创建DebugObject结构返回句柄...再回到ntdll.dll,当前线程回0环创建了一个DebugObject结构,返回句柄到3环存放在了TEB的0xF24偏移处 也就是说,遍历TEB的0xF24偏移的地方,如果有值则一定是调试器 与被调试程序建立连接..., 第一个参数为被调试对象的句柄,第二个参数为调试器的句柄 执行ObReferenceObjectByHandle,把被调试进程的句柄放到第五个参数里面,这里eax本来存储的是调试器的EPROCESS...ULONG Flags; //+38 标志 调试消息是否已读取 } DEBUG_OBJECT, *PDEBUG_OBJECT; 调试事件的处理 因为每种事件的调试信息不一样,所以会有很多种类(
Createprocess()以挂起方式启动rundll32.exe: ? 注意输入的标志0x00000004 CREATE_SUSPENDED: ? ?...直接使用createprocess()启动相应进程: ? Spawnto(x86) case13,spawnto,设置Beacon派生会话时使用的程序 ?...steal_token case31,从目标进程中窃取访问令牌 先打开进程,获取指定进程的句柄令牌,再用ImpersonateLoggedOnUser模拟一个登陆用户的访问令牌的安全上下文,最后用DuplicateTokenEx...Inject(x64) case43,指定已打开进程来注入会话,原理就是远程线程注入,dllinject、shinject之类也会走这个case,流程与case9一样。...Spawn(x64) case44,派生会话(x64),原理也是挂起线程rundll32线程注入dll,流程都是一样的,只是在不同文件夹在rundll32.exe ?
领取专属 10元无门槛券
手把手带您无忧上云