看流星社区

 找回密码
 注册账号
查看: 1987|回复: 0

支持Win7的星号密码查看器的实现

[复制链接]

该用户从未签到

发表于 2013-4-2 08:56:14 | 显示全部楼层 |阅读模式
星号密码查看器大家肯定不陌生吧,但是在Win7下要想不用注入DLL,不用Windows钩子的确有点困难,最近简单了逆向了一下"Win7星号密码查看器",终于把原理搞清楚了,希望发出来能对大家有帮助

大家都知道在本进程内调用WM_GETTEXT和GetWindowText就能获取密码框的文本,而如果要跨进程WM_GETTEXT和GetWindowText就不管用了
在xp我们可以这样做,这也算微软的一个漏洞吧,没有判断是不是本进程发送的EM_SETPASSWORDCHAR消息

代码:
chPassChar = (TCHAR)SendMessage (hwndPoint, EM_GETPASSWORDCHAR, 0, 0);//获取密码字符
         
SendMessage(hwndPoint, EM_SETPASSWORDCHAR, 0, 0);//取消密码属性
SendMessage(hwndPoint, WM_GETTEXT, sizeof(szTitle) / sizeof(TCHAR), (LPARAM)szTitle);//获取密码文本
SendMessage(hwndPoint, EM_SETPASSWORDCHAR, 0, chPassChar);//设置密码字符
但在Win7上,上面的代码已经不能使用了,即使你用SetWindowLong取消掉ES_PASSWORD样式也行不通。虽然SetWindowLong不行,我们还有其它方法,这也算微软太马虎的吧
事实证明只要文本框包含ES_PASSWORD样式,SetWindowLong就取消不了ES_PASSWORD,但SetWindowWord可以

代码:
dwStyle = GetWindowLong(hwndPoint, GWL_STYLE);//获取密码框原来样式
SetWindowWord(hwndPoint, GWL_STYLE, 0);//取消所有样式
SetWindowLong(hwndPoint, GWL_STYLE, dwStyle & ~ES_PASSWORD);//去掉密码属性
         
SendMessage(hwndPoint, WM_GETTEXT, sizeof(szTitle) / sizeof(TCHAR), (LPARAM)szTitle);//没有了ES_PASSWORD属性WM_GETTEXT可以成功
                    
SetWindowLong(hwndPoint, GWL_STYLE, dwStyle);//还原密码框原来样式
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-30 09:44

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表