一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

start.exe的启动流程

答案:start.exe是Sandboxie中的核心组件,用于启动沙箱进程。其启动流程涉及多个步骤和组件的交互,以下是详细的启动流程解析:

用户操作触发:

用户通过Sandboxie的UI(如Sandman.exe)进行操作,例如右键点击沙箱名并选择“运行程序”。

Sandman.exe响应:

Sandman.exe是Sandboxie的用户界面程序,它接收用户的操作指令。

对于“运行程序”这一操作,Sandman.exe会调用其内部的API函数来处理。

API函数调用:

在Sandman.exe中,处理“运行程序”操作的API函数是CSbiePlusAPI::RunStart。

该函数接收多个参数,包括沙箱名、要运行的命令、启动标志、工作目录以及一个指向QProcess对象的指针(用于启动新进程)。

构建命令行参数:

根据用户提供的参数和启动标志,CSbiePlusAPI::RunStart函数构建了一个命令行字符串。

这个字符串包含了start.exe的路径、启动标志(如是否以管理员权限运行、是否使用文件路径隔离等)、沙箱名以及要运行的命令。

启动start.exe:

使用QProcess对象(或创建一个新的QProcess对象),CSbiePlusAPI::RunStart函数调用了QProcess::start方法来启动start.exe。

此时,虽然看起来是Sandman.exe直接启动了start.exe,但实际上在Sandboxie的实现中,有一个关键的步骤被省略了:即start.exe是如何被注入到沙箱环境中的。

沙箱环境注入:

实际上,start.exe并不是直接由Sandman.exe启动的,而是由Sandboxie的服务组件(如SbieSvc.exe)在沙箱环境中创建的。

SbieSvc.exe是Sandboxie的核心服务,它负责管理和维护沙箱环境。

当Sandman.exe请求启动一个沙箱进程时,它会通过某种机制(可能是IPC、套接字等)与SbieSvc.exe通信,请求SbieSvc.exe在沙箱环境中启动start.exe。

SbieSvc.exe接收到请求后,会在沙箱环境中创建一个新的进程空间,并在该空间中启动start.exe。

由于这个过程是在沙箱环境中进行的,所以start.exe的父进程会被设置为SbieSvc.exe的一个子进程(或某种代理进程),而不是Sandman.exe。

start.exe执行:

一旦start.exe在沙箱环境中启动,它就会根据传递给它的命令行参数执行相应的操作。

这可能包括加载指定的程序、设置环境变量、执行用户提供的命令等。

由于start.exe是在沙箱环境中运行的,所以它对系统的影响被限制在了沙箱内部,不会影响到宿主系统。

重点内容:

图片展示:

一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

一个沙箱进程的生死(1):start.exe的启动流程(牛刀小试)

标签:牛刀小试,沙箱,start