debugging 如何以标准服务帐户(例如网络服务)中的Visual Studio?

lokaqttq  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(117)

Windows有不同的built-in standard service accounts,f.e. NetworkService帐户。这个SO post提供了在Visual Studio中调试时如何以不同于当前用户的用户身份调试代码的不同答案,但这些答案显示了不同本地用户帐户/管理员帐户的解决方案,这些帐户要求密码来运行代码(这些内置帐户没有密码)。有没有一种方法可以作为这些内置服务帐户之一从Visual Studio运行和调试代码?
我的用例:我想调试在生产环境中以NetworkService帐户运行的服务(和测试)。这个answer解释了如何使用PsExec作为NetworkService运行应用程序。我是否可以用PsExec启动服务或测试,然后将Visual Studio附加到进程并对其进行调试?

9wbgstp7

9wbgstp71#

事实证明,这实际上是非常简单和直接的:

1.使用所需的服务帐户执行应用程序,以获得Visual Studio调试器可以将自身附加到其上的正在运行的进程

这可以通过注册为服务来完成,然后在Service应用中输入服务帐户凭据,右键单击服务名称->属性并在登录选项卡中设置帐户,或者通过PowerShell,就像described in this SO answer一样。
另一种方法是使用PsExec作为described in this answer。下载PsExec后,在shell中运行以下命令以打开cmd作为服务帐户,例如:对于网络服务帐户:

psexec -i -u "nt authority\network service" cmd.exe

字符串
在cmd中运行whoami以确保它作为所需的帐户执行。现在导航到应该调试的可执行文件,并从此cmd启动它。
注意:我在应用程序的开头添加了一个sleep,以确保在我连接调试器之前它不会执行任何代码(C++示例):

while (!IsDebuggerPresent())
{
  std::this_thread::sleep_for(std::chrono::seconds(5));
}

2.将Visual Studio调试器附加到正在运行的进程

以管理员身份打开Visual Studio,单击Debug -> Attach to Process以打开Attach to Process窗口。窗口打开后,在搜索进程时确保单击Show processes for all users复选框,因为它是在不同的用户帐户下执行的。然后搜索在上一步中启动的进程,并单击Attach。现在应该可以调试应用程序了。
x1c 0d1x的数据

相关问题