确定用户帐户是否在Windows上设置/启用了密码

时间:2018-10-29 13:39:17

标签: windows winapi

在我的应用程序中,我正在检查用户是否已在Windows上将密码设置/启用为安全应用程序的一部分(漏洞扫描)。

我本人来自软件开发背景,因此在系统管理方面我是新手。到目前为止,我还没有意识到 LogonUsers API的工作原理,但是如果使用此API并尝试“登录”,则会将凭据计数计入帐户锁定策略(如果已设置),因此无法使用该API。

我最近发现的cmd命令net use \\%COMPUTERNAME% "/user:%USERNAME%"可以“有时”工作,但更多情况下它不能检查是否设置了密码,因为它会产生相同的输出。

在程序Bit Defender Internet Security中,漏洞扫描实用程序会进行检查以高精度地仅执行此问题,在组策略帐户触发/计入“失败的登录尝试”计数器时锁定策略已设置。我尝试使用Sysinternals流程监视器对该功能进行反向工程,但是找不到任何东西(可能我错过了一些东西)。另一个难题是弄清楚位防御者如何能够获取密码“ length”。

我想知道是否有人对检查用户帐户是否设置/启用密码有任何建议?

1 个答案:

答案 0 :(得分:0)

更改密码后,即使Windows也不知道密码的长度。密码作为固定长度的哈希存储在SAM数据库中。有未公开的API可以查询SAM数据库以获取密码,但实际上它仅返回固定长度的密码哈希。

您可以使用NetUserModalsGet() api检索有关密码策略的各种信息,但是只会返回最小密码长度,等等。还有另一种api可以获取有关用户帐户的信息NetUserGetInfo()和这将返回密码使用期限,也许您可​​以使用该密码来检查上次更改密码的时间,但这可能无济于事。一种方法是使用空白密码调用LogonUser,如果失败,则将bad_pw_count重置为尝试之前的密码。无论如何,我向您保证,任何声称知道Windows用户密码长度的程序都是胡扯。