当前位置:主页>科 研>学术交流>

密码控件安全技术浅析及攻击实例(2)

对于保护WM_CHAR消息的做法,必然是要在得到WM_KEYDOWN这个消息的时候就进行,因为只要有了WM_KEYDWON这个消息就可以绕过系统后续的处理先于系统计算出用户按下的Virtual Key,然后保存这个案件对应的Char,然后再返回一个修改过的WM_KEYDOWN消息,后面的数据都不用再管了,WM_KEYDOWN被修改,Virtual Key被修改,导致后续调用TranselateMessage消息时产生的WM_CHAR也不正确,所以攻击者就算截获到WM_CHAR也是徒劳的。

产生假WM_CHAR的的方法各个厂商迥异,比如QQ的就是(此处过滤5000字)。再比如支x宝,如果一个用户的密码是mypasswordisaccess,那么按照这个键序列输入后,控件返回的char序列会是1234556789054qqw55,也就是说在支x宝安全控件每次初始化之后,当用户输入一个键,控件就会为这个键设置一个映射char,如果下次用户再输入这个键,那就不用设置直接返回上次设置的char,策略就是用户输入键之后控件负责生成映射关系,这个映射的值的产生方式很简单:



 

如上图的四行键位,从上到下从左到右排列。

上面说了原理,要实现的话,必然用到Windows的一种技术,那就是基于消息的Hook机制了(此Hook跟inline,IAT,SSDT等Hook完全不是一回事),因为要处理在系统生成WM_CHAR之前就处理WM_KEYDWON并且修改,就必须要使用低级键盘钩子,WH_KEYBOARD_LL。

  2.3 支x宝安全密码控件原理分析实践

好了,不纸上谈兵了,找个靶子分析分析吧,为了避免律师函,还是选择支x宝吧宝,支x宝的密码控件用在了登陆和支付密码的输入过程中,两处使用的都是同一个密码控件,先来调试下吧。

按照前面的讲到的,该密码控件使用了windows hook机制,那就先从SetWindowsHookEx这个函数入手吧。

代码:



 

然后操作网页,让控件获取焦点,触发断点,看下堆栈:

代码:



 

然后看一下动态的设置两个断点:

代码:



 

然后就来来回回操作让控件获取和失去焦点:

代码:



 

然后看一下调用SetWindowsHookExW的时候,设置的Hook处理函数所在模块以及偏移

代码:



(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

容器是如何让“一切都是代码”成为现实的

容器是如何让“一切都是代码”成为现实的

现代应用的发展在很大程度上要归功于DevOps运动的蓬勃兴起以及该运动所产生的各种自动...[详细]

如何快速掌握一门新技术/语言/框架

如何快速掌握一门新技术/语言/框架

IT行业中的企业特点是都属于知识密集型企业。这种企业的核心竞争力与员工的知识和技能...[详细]

建高效数据中心有径可循

建高效数据中心有径可循

能耗问题一直是各大数据中心的心头之痛。有数据表明,2015年我国数据中心能耗预计将高...[详细]

2015黑帽大会:网络灾难后 重建IT安全

2015黑帽大会:网络灾难后 重建IT安全

在遭遇网络灾难后重建IT安全似乎是不可能完成的任务,但根据安全专家Christina Kubeck...[详细]

面对DNS劫持 企业移动应用该如何防护?

面对DNS劫持 企业移动应用该如何防护?

DNS(Domain Name System)劫持又称域名劫持,是指对正常的域名解析请求加以拦截,转而...[详细]

返回首页 返回顶部