在域环境下,账号权限各异,有时候需要以管理员权限的账号去运行必要程序,如果密码统一还好处理,如果这种情况下密码还没有统一就一团乱麻了,这里我主要讲解的是一种解决方案,我要做的是遍历管理员账号和密码,然后让拖入到程序里面的软件运行。成功就直接停止,错误就报错。也可以把程序通过注册表加入到右键菜单,右键以编写的程序运行。
我们创建一个控制台程序。
//运行方法
static void YunXing(string ZhangHao, string Password, string LuJing)
{
Process MBRTProcess = new Process();
MBRTProcess.StartInfo.UserName = ZhangHao;
string strPWD = Password;
SecureString password = new SecureString();
foreach (char c in strPWD.ToCharArray())
{
password.AppendChar(c);
}
MBRTProcess.StartInfo.Password = password;
MBRTProcess.StartInfo.FileName = LuJing;
MBRTProcess.StartInfo.UseShellExecute = false;
MBRTProcess.Start();
}
static void Main(string[] args)
{
//当有程序拖入时
if (args.Length >= 1)
{
//输入需要遍历的账号和密码
string[] zhanghao = { "admin", "administrator" };
string[] mima = { zhangsan, lisi, wangwu };
//判断是否有管理员权限
WindowsPrincipal winPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool isAdmin = winPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
if (isAdmin)
{
Process CmdProcess = new Process();
CmdProcess.StartInfo.FileName = "cmd.exe";
CmdProcess.StartInfo.CreateNoWindow = true; // 不创建新窗口
CmdProcess.StartInfo.UseShellExecute = false; //不启用shell启动进程
CmdProcess.StartInfo.RedirectStandardInput = true; // 重定向输入
CmdProcess.StartInfo.RedirectStandardOutput = true; // 重定向标准输出
CmdProcess.StartInfo.RedirectStandardError = true; // 重定向错误输出
CmdProcess.StartInfo.Arguments = "/c " + args[0];//“/C”表示执行完命令后马上退出
CmdProcess.Start();//执行
}
else
{
foreach (var zhanghao0 in zhanghao)
{
foreach (var mima0 in mima)
{
try
{
YunXing(zhanghao0, mima0, args[0]);
//运行成功就退出
return;
}
catch (Exception)
{
}
}
}
//全部错误后,报错
Console.WriteLine("管理员打开失败!");
Console.ReadLine();
}
}
}
至此就结束了,后期可以扩展从外部获取数组的变量,可以在外部写一个密码字典,从中读取,当然这个时间就很长了,并且成功率非常低,如果电脑就在旁边,PE直接破解就好了。
领取专属 10元无门槛券
私享最新 技术干货