使用密码的Windows7登录脚本

我一直在尝试编写脚本批处理文件或 exe 来执行登录。它应该执行一个基本操作-只需登录我的 windows 7 pc 不在网络中。我有一个 jar 文件在后台运行。我想写一个带有密码的脚本来登录我自己的 windows 7 pc

我一直在尝试编写脚本批处理文件或 exe 来执行登录。它应该执行一个基本操作-只需登录我的 windows 7 pc 不在网络中。我有一个 jar 文件在后台运行。我想写一个带有密码的脚本来登录我自己的 windows 7 pc

我已经研究了一些实用程序Logon.exe

上面的实用程序在我的电脑中不起作用显示一些错误,如

Windows Logon version 1.04
Copyright (c) 2003-2010 SoftTree Technologies, Inc.
Unable to install logon service (OpenSCManager failed).
Logon failed.

在某个地方,它告诉文件应该以管理员身份运行。

这是我的代码:

Process process = new ProcessBuilder("C:\\Logon.exe","-p","welcome").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}

我也尝试使用AutoLogon using LogonExpert

上面的工具是完美的。但我需要的是只使用 java 和需要时登录。

请帮帮我,伙计们...

5

你想做的是可行的,但是你必须遵守规则,这些规则不包括 Java。这里有一点历史,为什么你目前的尝试不起作用,以及你如何修复它。

这不容易.

一点历史

首先,从 Windows Vista 开始,Windows 获取凭据的方式发生了根本变化。您提到的 logon.exe 实用程序使用旧体系结构。那时,您几乎可以做任何您想做的事情,因为在 Winlogon 的过程中,任何与登录体系结构有关的事情都可以作为 DLL 运行。您可能已经找到了一些自定义的 GINA,例如this one I wrote。在最新版本的 Windows 中,它们被忽略。

现在,Winlogon 要求 LogonUI 获取凭据。LogonUI 是一个将托管凭据提供程序的进程。凭据提供程序在登录屏幕上由“磁贴”表示。有几个 COM 接口要实现,以便 LogonUI 向您询问凭据。

要记住的重要事情是:

必须实现 COM 接口才能与登录进程交互

您可以决定呈现什么 UI,或者根本没有 UI

实现 COM 接口几乎不包括 Java。

你现在面临的问题

登录用户意味着为他获取安全令牌。但是以交互方式登录用户意味着您必须告诉 Winlogon 打开门。Winlogon 将的唯一进程是 LogonUI。

换句话说,即使您有可以创建安全令牌的代码,您也无法使用它来解锁桌面。

顺便说一下,创建安全令牌的 Windows API 是LogonUser

你怎么能解决它

您必须编写一个 Credential Provider。我从未听说过在 Java 中执行此操作的方法,这过于平台特定且不可移植。所有的文档如果为 C++,但我听说它可以在.Net 中完成。一个很好的起点是平台 SDK 中的 Credential Providers 示例。

当您的 Credential Provider 初始化时,您将生成一个等待某些事件的线程,例如蓝牙设备出现。只要您可以与 CP 通信,运行服务就可以工作。

您还需要在ICredentialProvider::Advise的实现中保存指向 LogonUI 的事件机制的指针。

当您的硬件检测线程检测到您的蓝牙设备时,让它调用ICredentialProviderEvents::CredentialsChanged。它会告诉 LogonUI 再次检查所有凭据提供程序。当被调用时,您必须回答您是默认的自动登录提供程序。

呼!我们还没有登录呢!

最后一步是检索您为该用户保存的密码,并在调用ICredentialProviderCredential::GetSerialization时将其发送到 LogonUI。

LogonUI 将从那里获取它。它将指示 Winlogon 为您调用身份验证包并登录用户。

This SO answer说同样的事情,但它有点简洁。这个MSDM article比我的答案更完整。

+ 加密和管理用户的密码是作为一个 exercice;),但你可能想看看Data Protection API

1

您还可以使用已经存在的自动登录功能。

以 admin 身份登录并执行 (WIN-R):

控制用户密码2

取消选中用户必须输入用户名和密码才能使用此计算机

您的 PC 仍然可以安全地进行远程访问。

1

由于 ixe013 答案解释了完成交互式登录的本机方式(也检查此SO Q&A),我花了一些时间来研究 logonExpert 工具,该工具已经根据您的反馈成功完成了工作,该工具是用 Borland Delphi 编写的(使用 PEiD 检查)。

我不知道你是否注意到 le.exe cmd 工具,它使您能够以类似于 logon.exe 的方式按需调用它。(通过阅读帮助 chm 文件找到)。

虽然我的回答没有添加有价值的技术亮点,但我认为你可能会错过 cmd 工具选项。

免责声明:我与 logonexpert 没有任何关系。

编辑:我刚刚发现 MS SysinternalsSuite 包括autologon工具,可以从 cmd(自动登录用户域密码)调用。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(988)
在 Unity上的另一个场景中显示分数
上一篇
IOS拼贴应用程序中的矩形布局
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(33条)