我正在尝试编写一个C#程序,该程序应该从Windows调用runas工具并自动输入密码。
我尝试了什么:
Process runas = new Process();
runas.StartInfo.FileName = "runas";
runas.StartInfo.UseShellExecute = false;
runas.StartInfo.RedirectStandardInput = true;
runas.StartInfo.Arguments = "\"/user:domain\\username\" \"cmd.exe\"";
runas.Start();
StreamWriter stream = runas.StandardInput;
stream.WriteLine("our super secret password");
stream.Flush();
stream.Close();
runas.WaitForExit();
runas.Close();
发生了什么:
我得到以下输出。
Please enter the password for "...":
Trying to execute cmd.exe as user "kfz\dummy"...
RUNAS-ERROR: cmd.exe could not be executed
1326: Authentication failed: unknown username or password.
(由我从德语窗口翻译而来)
是的,我仔细检查了密码和用户名。在命令行中手动输入所有内容都可以正常工作。
我尝试了什么:
我也尝试重定向输出并从中读取,但没有成功。
我尝试了写入流的不同变体:
stream.Write("our super secret password");
stream.Write("our super secret password\n");
stream.Write("our super secret password\r\n");
所有结果都具有相同的行为。
我注意到的是:
Runas进程似乎不等我写流。
我在写之前添加了一个Sleep,我立即获得了以上输出。
恐怕runas使用一些nonstd-input .....
研究结果:
在试图找出运行符使用哪种输入时,我没有成功。
我找到了Windows内置runas here的替代方法,但是我不建议使用它,尽管如果无法执行,我可能会退一步。
编辑:
好的,我发现有消息说微软故意阻止人们这样做。
我讨厌有人这样做!如果我想使用不安全的东西,那微软是谁来阻止我!
对不起,我下了话题。
仍然有一个问题……我们还能以某种方式解决它吗?我们可以破解 rune 吗? ;)
最佳答案
您不应该这样做的全部原因是因为有一个API。
无需使用runas
。ProcessStartInfo
可让您直接指定UserName
和Password
。
例如:
var psi = new ProcessStartInfo();
psi.Domain = "YourDomain";
psi.UserName = "YourUserName";
psi.Password = securePassword;
psi.FileName = "cmd.exe";
Process.Start(psi);