个人产品
企业产品
安全信息
病毒专栏 | 漏洞专栏 | 木马专栏 | 防护专栏 | 安全业界 | 毒霸活动 | 热点专题 | 漫画安全 | 期刊订阅
[an error occurred while processing this directive]
告诉您的位置:首页 > 资讯中心 > 安全信息 > 正文
非法探取密码的原理及其防范
2001年08月15日09:40:03 作者:信息产业部电子第二十二研究所 
[an error occurred while processing this directive]

一、非法获取Password的原理: 

Edit控件是Windows的一个标准控件,当把其Password属性设为True时,就会将输入的内容屏蔽为星号,从而达到保护的目的。虽然我们看来都是星号,但程序中的Edit控件实际仍是用户输入的Frethem/index.htm" target="_blank" style='text-decoration: underline;color: #0000FF'>密码,应用程序可以获取该控件中的密码,其他应用程序也可以通过向其发送WM_GETTEXT或EM_GETLINE消息来获取Edit控件中的内容。黑客程序正是利用Edit控件的这个特性,当发现当前探测的窗口是Edit控件并且具有ES_PASSWORD属性时,则通过SendMessage向此窗口发送WM_GETTEXT或EM_GETLINE消息,这样Edit框中的内容就一目了然了。 


二、黑客软件工作方法: 

首先要取得当前的窗口,并判断是否是Edit控件,一般多通过鼠标来指定要探测的窗口,例如在WM_MOUSEMOVE消息的响应函数中进行判断,现列举代码片段如下: 

//将客户坐标转换成屏幕坐标 
ClientToScreen(&point); 

//返回一个包含指定屏幕坐标点的窗口 
CWnd* pWnd = CWnd::WindowFromPoint(point); 

if (pWnd) 

//获取窗口句柄 
HWND hwndCurr = pWnd->GetSafeHwnd(); 

if ((::GetWindowThreadProcessId (GetSafeHwnd(), NULL)) != (::GetWindowThreadProcessId (hwndCurr, NULL))) 

char lpClassName[255]; 

//获取类名 
if (::GetClassName(hwndCurr, lpClassName, 255)) 

//判断是否是Edit控件 
if (0 == m_strWndClass.CompareNoCase("EDIT")) 


//获取窗口风格 
LONG lStyle = ::GetWindowLong(hwndCurr, GWL_STYLE); 

//如果设置了ES_PASSWORD属性 
if (lStyle & ES_PASSWORD) 

char szText[255]; 

//通过掌握的句柄hwndCurr向此控件发送WM_GETTEXT消息 
::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText); //密码已保存在szText中 
m_strPassword = szText; 





上述代码中值得注意的有以下几个关键地方: 

ClientToScreen(&point); 
CWnd* pWnd = CWnd::WindowFromPoint(point); 
HWND hwndCurr = pWnd->GetSafeHwnd(); 

这三句代码可以获取当前鼠标位置所在窗口的窗口句柄,在SendMessage中要用到的。 

::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText); 

这便是真正起作用的SendMessage了,其第一个参数指定了要接收消息的窗口句柄,我们已经通过上面的代码获取到了,第二个参数就是让Edit控件返回字符的WM_GETTEXT消息了,并将得到的内容保存在szText中。 


三、防范措施 

既然我们搞清除了黑客软件普遍采取的手法,那我们自然能制订出一套防范其攻击的措施来。下面我们就要对Password进行保护。 

从以上分析我们可以看出:Edit控件的漏洞主要在于没有对发送WM_GETTEXT或EM_GETLINE消息者的身份进行检查,只要能找到Edit窗口句柄,任何进程都可获取其内容。所以必须要对发送消息者的身份进行验证,这里给出一种方法来验证发送消息者的身份是否合法: 

1.创建新CEdit类 

从CEdit继承一个子类CPasswordEdit,申明全局变量g_bSenderIdentity表明消息发送者的身份: 

BOOL g_bSenderIdentity; 

然后响应CWnd的虚函数DefWindowProc,在这个回调函数中进行身份验证: 

LRESULTCPasswordEdit::DefWindowProc (UINTmessage,WPARAMwParam,LPARAMlParam) 

//对Edit的内容获取必须通过以下两个消息之一 
if((message==WM_GETTEXT) ||(message==EM_GETLINE)) 

//检查是否为合法 
if(!g_bSenderIdentity) 

//非法获取,显示信息 
AfxMessageBox(_T ("报告:正在试图窃取密码!")); 
return 0; 

//合法获取 
g_bSenderIdentity=FALSE; 

return CEdit::DefWindowProc (message,wParam,lParam); 


2.在数据输入对话框中做些处理 

在对话框中申明一个类成员m_edtPassword: 

CpasswordEdit m_ed
    【】
【我要发表评论】【内容指正】【论坛】【推荐给好友】·【 】【打印】·【顶部】【关闭窗口
【相关文章】 【去论坛】
· 德国学生黑客盗人账号 2小时消费8500万英镑 2003-12-15 15:57
· Windows漏洞还活着 微软与黑客大战还未结束 2003-12-11 10:50
· 深度报道:黑客开始瞄上Linux预发起攻击事件 2003-12-11 10:41
· IE存在潜在缺陷 黑客可建虚假网站进行诈骗 2003-12-11 10:32
· 安全基础:黑客扫描特征 十种最易受攻击端口 2003-12-05 16:41
· 前两日互联网中断 黑客DoS攻击疑是罪魁祸首 2003-11-28 16:46
· 网络银行出现漏洞 黑客入侵造成百万元损失 2003-11-27 15:55
· 境内外黑客/病毒肆虐 中国信息疆域面临威胁 2003-11-27 15:37
· 赛迪网:谨防黑客通过“端口扫描”进行攻击 2003-11-27 13:47
· 与黑客斗智 美高科技企业组建安全官智囊团 2003-11-18 14:47
·金山毒霸单机版讨论区
·毒霸6测试专区
·金山网镖讨论区
·金山毒霸网络版讨论区
·毒霸在线业务专题讨论区
·安全软件讨论区
·病毒救援
【相关专题】
· 全球黑客攻击专题 2003-07-07 14:34
· 新业务—黑客保险专题 2003-02-12 15:50
· “密码”病毒(Frethem)专题 2002-07-17 10:38
· 中国黑客病毒专题 2002-06-06 22:04
· 盗QQ密码-木马GOP专题 2001-12-31 23:15
[an error occurred while processing this directive]
[an error occurred while processing this directive]
·全民围剿 新春无毒 
·
毒霸、网镖新功能体验版 
·
毒霸网络版2.0 sp1发布 
·
毒霸6新禧礼包惊喜登场
·
毒霸网络版 人人有礼
·毒霸网络版“租用服务”
·
金山毒霸网络版大事件
·第三次缉毒万里行专题
·JPEG图片病毒专题
·金山引爆“双响炮”计划
·金山毒霸6增强版介绍
·
十面埋伏围剿木马发布会
·
6.12北京用户产品座谈会
·
金山"网游防火墙"产品
·
反电子垃圾新功略专题
·“金山毒霸再获桂冠”
·金山“安全体验风暴”
·“冲击波”病毒之罪?
·全球黑客攻击专题
·金山毒霸V金山网镖V介绍
·金山V攻略详解专题
·金山毒霸&智冠捆绑销售
·金山软件爱心服务活动
·2003年病毒疫情调查专题
更多...
[an error occurred while processing this directive]
·病毒短信 ·在线杀毒
·病毒上报 ·专杀工具
·产品答疑 ·
媒体合作
金山简介 | 业务合作 | 广告服务 | 招聘信息 | 客服中心 | 网页报错 | 添加毒霸到QQ上
© 2007 Kingsoft Corp. 增值电信业务经营许可证B2-20040288号