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

Windows网络用户登录密码的猜解,第1张

Windows网络用户登录密码的猜解,第2张

Windows密码猜测算法的主要思想是利用Windows提供的窗口枚举函数EnumWindows(),寻找网络登录窗口。使用子窗口枚举函数EnumChildWindows()或GetNext-DlgTabItem()和GetWindowLong()定位网络登录窗口上的每个控件。

使用SendDlgItemMessage()或SetDlgItemText()输入用户名和密码。SendMessage()用于发送“OK”消息。这样,利用程序完成了整个网络登录过程。使用枚举的用户名和密码重复这个过程,然后完成网络用户名和密码的枚举猜测。

首先,猜测流程:

为了说明问题,下面只写主要过程。对于关键过程,给出了用VC++实现的源代码。互斥之间的代码。锁和互斥。以下过程中的UnLock只允许单线程访问。“密码枚举完毕”表示用户指定的字符集已经枚举完毕,程序会枚举一个新的用户名,然后再次枚举这个字符集。源代码中各个函数的具体用法,请参考MSDN。多线程的用法请参考VisualC++技术内幕。

下面给出了关键过程的源代码。

1.全局变量:

结构线程

{

CWinThread * pThread

};

_Thread WindowThread[iProc],PassTread[1],user tread[1];)//iProc:窗口枚举线程的数量

CEvent gEventNextPass//取下一个密码,引入同步。

CEvent gEventPassOk//密码已经获取,引入是为了同步。

CEvent gEventNextUser//取下一个用户名,引入同步。

CEvent gEventUserOk//用户名已经获取,引入是为了同步。

CMutex gMutex//互斥,只允许单线程访问。

char cCurrentPass[MAX _ PASSWORD _ LENGTH];File://当前使用的密码。

char cCurrentUser[MAX _ USER _ LENGTH];//当前使用的用户名

2.线程启动:

{

File:// Password枚举线程

if(PassTread[0])。pThread==NULL)

{

通行证[0]。pThread = AfxBeginThread((AFX _ thread proc)GetNextPassL,NULL,

线程_优先级_最低);

通行证[0]。pThread-> m _ bauto delete = TRUE;

File://这里省略了从文件中获取密码的代码,类似于用户名枚举过程的代码。

}

File:// Username枚举线程

if(UserTread[0].pThread==NULL)

{

用户线程[0]。pThread = AfxBeginThread((AFX _ thread proc)get next userf,NULL,

线程_优先级_最低);

通行证[0]。pThread-> m _ bauto delete = TRUE;

}

File:// window枚举线程

for(int I = 0;我

{

if(WindowThread[i].pThread==NULL){

窗口线程[i]。pThread = AfxBeginThread((AFX _ thread proc)thread proc,NULL,

线程_优先级_最低);

窗口线程[i]。pThread-> m _ bauto delete = TRUE;

}

}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Windows网络用户登录密码的猜解

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情