启动进程并隐藏命令行参数,使其在任务管理器中不可见。

6

我不确定这个问题更适合Stackoverflow还是SuperUser或其他StackExchange网站...

基本上,我使用Process.Start从C#启动第三方应用程序,并带有几个命令行参数。其中一个命令行参数是密码。

我认为我在我的应用程序中做了一个非常好的工作来保护那个密码,除非你在任务管理器中打开进程选项卡,否则你可以添加“命令行”列并查看所有这些命令行参数。

有人能想到一种启动进程的方法,使得命令行参数被隐藏起来吗?这可能吗?

谢谢!

编辑:

这是一个包装plink.exe(SSH/Putty)的Windows服务。如果我不在命令行中指定密码,它会提示输入密码,但我收到了这个奇怪的警告:

Plink.exe - 3/30/2013 2:40:47 PM - Attempting keyboard-interactive authentication
Plink.exe - 3/30/2013 2:40:47 PM - Server refused keyboard-interactive authentication
Plink.exe - 3/30/2013 2:40:49 PM - user@hostname.com's password: 

我已经指定了重定向标准输入,但也许我会继续研究并看看是否可以解决它。 此外,正如David Heffernan建议的那样,我将进一步研究Pageant。 谢谢大家 - 一旦我找到更好的解决方案,我会发布更新!


第三方应用程序经常更改吗?例如,有新版本等。此外,这是部署在您的服务器上还是客户PC上? - Filip
我也不认为这会起作用,但只是为了好玩——这是一个控制台应用程序吗?如果您不提供密码会发生什么?它是否会再次输出命令行?这是一个想法——您可以将输入流传输到控制台(例如 this)——我记得这样做是有效的,但这是一个漫长的过程 :) - NSGaga-mostly-inactive
谢谢大家的评论/回答。我基本上正在编写一个Windows Service,它使用plink.exe(Putty.exe的创建者用于SSH连接)来建立半永久的SSH隧道。 - Adam Plocher
哎呀,我按下回车太快了:P。它会提示输入密码,但当我使用Process.Start时,它会提示输入密码,然后立即显示类似于“未找到键盘钩子”之类的消息,然后退出。即使我重定向标准输入,也似乎无法连接到它... - Adam Plocher
使用Putty,您可以使用Pageant,避免在命令行上指定密码。 - David Heffernan
谢谢David,昨晚我稍微研究了一下这个。那可能是正确的方式,但我正在尝试使其尽可能容易使用以便进行开源分发。我会继续研究它。请查看我的更新问题-我将继续尝试连接交互式密码提示,但如果我无法连接,则会采取pageant路径。非常感谢你David! - Adam Plocher
2个回答

3

没有办法将命令行参数传递给进程,以便进程可以看到它,但系统中的其他所有内容都无法看到。

这是一个明显的缺陷,当程序允许密码作为参数传递时,通常是为了方便不关心窃听者的用户。设计良好的程序通常还会提供其他安全的身份验证手段。


2
如果您为新进程设置ACL,则应限制可以读取命令行信息的人员。 空ACL不授予权限,可能会阻止管理员使用任务管理器访问,尽管我最初的猜测是它不会这样做。 (请注意,空安全描述符与空ACL不是相同的东西。一个隐式授予每个人权限,另一个隐式拒绝权限。)
当然,管理员始终可以用某些存储密码的替代品替换plink.exe。因此,我不确定担心管理员可以在任务管理器中看到什么是有意义的!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接