怎样探测空密码帐号

这篇文章描述怎样在windows NT 环境下使用Visual C++ 6来检测空密码帐号,这种方法会用到平台SDK
所以确保你安装了MSDN

必备知识

读者应该熟悉c++语言以及Windows Api编程,这篇文章非常简单即使你所学还不是那么的专业,:-)


空密码帐号:我们为何检测它

空密码帐号可以破换我们的系统,因为蠕虫病毒可以利用这些帐号来达到传播自己的目的,当你不需要

密码开启一个系统,你的系统就有可能在一分钟之内被感染。基于这些原因,如果你能检测到空密码,

你就可以建议用户去设置一个密码。在过去我通过在google上搜索找解决的方法,但是很遗憾我没有找

到,所以我决定自己写程序去搞定它,程序运行在NT以上系统,不支持Windows9x.


问题

想解决这个问题的第一个想法是使用LogonUser API,这个api可以提供一个用户名它给出返回值
代码:

 

HANDLE hToken  =  NULL;
BOOL bLoggedOn 
=  ::LogonUser(pszUserName, pszPassword, NULL, 
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
& hToken);

if (bLoggedOn) 
{
    printf(
"Logged On! ");
}
 
else  
{
    printf(
"Failed ");
}

然而,这段代码有个问题,pszPassword不能为空,我们不能传递一个空指针给它,在这种情况下,我们

怎样去检测呢?其实很简单,如果pszPassword就是为空那么程序必定出错,我们可以检测错误原因就行

了,还记得GetLastError这个函数么,^_^下面这段代码是获取错误信息的

 

HANDLE hToken  =  NULL; 
BOOL bLoggedOn 
=  ::LogonUser(pszUserName,  "" , NULL, 
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
& hToken);
DWORD dwError 
=  GetLastError();

dwError 包含错误信息,所以我们只要检测它就行了
当pszPassword为空的时候LogonUser会返回1327,下面的这段代码在我的Windows XP 上运行良好

 

HANDLE hToken  =  NULL; 
BOOL bLoggedOn 
=  ::LogonUser(pszUserName,  ""
    NULL, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
& hToken);
DWORD dwError 
=  GetLastError();

if (bLoggedOn  ||  dwError  ==   1327 )
{
    printf(
"Empty Password Logon User: %s ", pszUserName);
}

 

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值