Messages

melissa:2YJaA7 http://google.com sdf http://google.com http://google.com sdfgwq

melissa:YhmI00 http://google.com sdf http://google.com http://google.com sdfgwq

melissa:N5ppGb http://google.com sdf http://google.com http://google.com sdfgwq

Oyuduaod:comment6

Fgmaebwo:comment2

User Name:

Content:

Tags:

gae(3)    css(3)    日志(3)    python(3)    svn(3)    weblogic(2)    ie(2)    ftp(2)    c++(2)    原则(2)    bugfree(2)    jira(2)    turbolinux(2)    tinyMCE(1)    南京(1)    static_dir(1)    django(1)   

 

 Categories:   All    管理 (27)    GAE (7)    杂谈 (14)    网站 (7)    Python (6)    Java (8)    c++ (1)    生活 (8)    我的儿子 (4)    Database (4)    骗局 (2)    source code (1)

密码破解小程序的编写

2008-09-12 14:29:46   Category:c++   Comments:0   Reference:0   Tags: 破解 , c++

对于一些没有对密码输入次数进行限制的程序,可以通过简单的重复尝试密码来进行暴力破解。更加优秀的方法是对其密码算法进行破解,当然这个方法的难度比较大。我在这里介绍的就是一种暴力破解的方法,实现也比较简单,为大家提供一些帮助。
这种破解方式一般有三个步骤:输入新密码、点击确定按钮和检测是否密码正确。
1) 输入密码
查找密码校验的对话框,通过系统的FindWindow方法查找对应的窗口。
FindWindow("TForm4",NULL);
该API的第一个参数是需要查找的对话框的类名,第二个参数是对话框的标题。如果第二个参数为空,该API不对标题进行匹配。
然后通过GetWindow方法获取到密码的输入框。
GetWindow(MyHandle,GW_CHILD);
该API的第一个参数是原始窗口的句柄,第二个参数为需要找的窗口与原始窗口的关系,其值包括GW_CHILD, GW_HWNDFIRST, GW_HWNDLAST, GW_HWNDNEXT, GW_HWNDPREV,GW_OWNER等。
最后我们就可以对该密码的输入框进行操作,可以通过向该句柄发送事件,输入新的密码和清除密码。
SendMessage(MyHandle1,WM_CHAR,0x8,0); //输入回退键,清楚密码字符
SendMessage(MyHandle1,WM_CHAR,’a’,0) ;//输入密码字符
通过循环调用SendMessage可以输入需要的字符串。
2) 点击按钮
获取按钮的句柄的方法和获取密码输入框的方法相同。获取按钮的句柄后,我们需要重新定位鼠标,然后发送鼠标点击事件到该按钮
定位鼠标的API是SetCursorPos,它的两个参数就是你需要定位的鼠标的位置。
SetCursorPos(x,y);
当然这个位置是整个屏幕的位置,可以通过ClientToScreen把窗口的相对坐标转换为屏幕的坐标。
ClientToScreen(MyHandle,&aa);
第一个参数为窗口的句柄,第二个参数为LPPOINT类型的坐标,处理结果在该LPPOINT中返回。
然后发送点击按钮事件,点击按钮事件由两个事件组成。
SendMessage(MyHandle,WM_LBUTTONDOWN,MK_LBUTTON,param);
SendMessage(MyHandle,WM_LBUTTONUP,0,param);
其中param是鼠标的X和Y坐标的值。
param=(x<<16)+y;
3) 检测结果
由于各个程序对密码正确的处理方式各不相同,大家可以根据事件情况来进行密码的正确性校验。
当然前面介绍的这些技巧我们也可以用来完成其他功能的程序,比如一个鼠标自动点击程序、文本自动输入等。
注:
对于窗口的类名、相关信息和各个窗口间的关系,我们可以通过VC带的SPY++的工具方便的进行查看。

TrackBack URL:http://jum.appspot.com/feeds/trackBack/1666/