文章转自:http://blog.csdn.net/reggiekiller/article/details/5948830
===================================
基本都是别人写的,我居然有脸写原创。
玩路路解密破解游戏的时候用到过一个工具,可以用来查看窗口的星号密码以及网页中的星号密码,顿觉得很牛x,找了一下它们的原理,依葫芦画瓢也自娱自乐了一番。就当是验证一下实践一下快活一下悲哀一下吧。
对话框的星号密码查看原理是基于密码框都有个EM_SETPASSWORDCHAR属性。通过安装鼠标钩子监视鼠标动作,如果用户单击的是密码框那么就发送一个去除密码属性的消息。
mfc工程,对话框
- HHOOK g_hMouse;
- //鼠标钩子函数
- LRESULT CALLBACK HookProc( int code, WPARAM wParam,LPARAM lParam )
- {
- HWND hwnd;
- POINT point;
- GetCursorPos(&point);//得到鼠标位置
- hwnd=::WindowFromPoint(point);//得到包含鼠标的窗口句柄
- long nStyle=::GetWindowLong(hwnd,GWL_STYLE);// 得到窗口风格
- EVENTMSG *event=(EVENTMSG *)lParam;
- if(event->message==WM_LBUTTONDOWN)//是否为鼠标左键
- {
- if(nStyle & ES_PASSWORD)//是否为密码框
- {
- ::PostMessage(hwnd, EM_SETPASSWORDCHAR,0,0);//去掉密码属性
- }
- }
- return CallNextHookEx(g_hMouse,code,wParam,lParam);
- }
- void CGetPwdDlg::OnStart()
- {
- // TODO: Add your control notification handler code here
- g_hMouse = SetWindowsHookEx(WH_JOURNALRECORD,HookProc,GetModuleHandle(NULL),0);
- if(!g_hMouse)
- {
- MessageBox("设置钩子失败!");
- return;
- }
- MessageBox("设置成功!");
- }
- void CGetPwdDlg::OnEnd()
- {
- if(!UnhookWindowsHookEx(g_hMouse))
- {
- MessageBox("释放钩子失败!");
- return;
- }
- MessageBox("释放成功!");
- }
↑良好习惯,从我做起,哇咔咔
这个程序让我知道了不用dll也可以弄全局钩子呵呵,测试了一些基本的对话框还是可以的,qq的密码框当然是不行了。
解密这么容易那防范也同样简单,可以从TEdit派生一个新的组件,名字为TBugEyesEdit,然后修改其消息定义。那再发送取消EM_SETPASSWORDCHAR消息它就不会理你了。
网页版的需要写一个VBScript脚本,保存为htm文件
- <Script language="VBScript">
- On Error Resume Next '设置错误陷阱
- Dim ObjDocument,ObjEvent,ObjElement '声明对象
- Set ObjDocument = external.menuArguments.document
- '使用DOM方式枚举元素
- Set ObjEvent = external.menuArguments.event
- Set ObjElement=ObjDocument.elementFromPoint(ObjEvent.clientX,ObjEvent.clientY )
- '通过当前鼠标指针坐标得到网页元素
- If ObjElement.type ="password" then
- '如果网页元素类型为密码框
- If ObjElement.value="" then
- Alert("获取文本为空")
- else
- Alert("获取文本为:"+ObjElement.value) '显示密码
- End If
- End If
- </Script>
然后在注册表的“HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/MenuExt”下面的那个字串值改为脚本的路径就可以了
这样右键点击输入密码的框框,就有一个获得密码的选项了
经测试,百度、人人什么的网站全都失效。。。但是试了CSDN之后让我不淡定了。。。。。。