RSS
热门关键字:
当前位置 : 主页>嵌入式开发>VxWorks>列表

防止Edit框中的Password不保密

来源:我要研发网 作者: 时间:1970-01-01 点击:



Windows虽然是一个功能强大操作系统,但其存在一些先天性不足,给黑客留下了许多可乘之机,著名BO程序就是利用Windows这些漏洞来危害计算机安全。笔者最近发现了一个很流行专门获取Edit框Password工具,甚至其源代码已在某报纸发表,这无疑是对EditPassword功能完全否定。本文将首先分析非法获取Password原理,然后给出用Visual C 来实现保护Edit框中Password不被非法获取对策。

  (一) 非法获取Password原理

  Edit是Windows一个标准控件,当把其Password属性设为True时,就会将输入内容屏蔽为星号(*),从而达到保护。而Edit框中内容可通过发WM_GETTEXT,EM_GETLINE消息来获取。黑客程序就是利用Edit这个特性,首先枚举当前程序所有子窗口,当发现枚举窗口是EDIT并且具有ES_PASSWORD属性时,则通过SendMessage向此窗口发送WM_GETTEXT或EM_GETLINE消息,这样Edit框中内容就一目了然了。

  (二) 对Password进行保护

  由上述分析可看出,Edit漏洞在于没有检查发送WM_GETTEXT或EM_GETLINE消息者身份,只要找到Edit窗口句柄,任何进程都可获取其内容。这里给出一种简单方法来验证发送消息者身份是否合法。

  1) 创建新CEdit类

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

 BOOL g_bAuthorIdentity;
  

字串2

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

LRESULT CPasswordEdit::DefWindowProc(UINT message,
 WPARAM wParam, LPARAM lParam) 
 {
 // 对Edit内容获取必须通过以下两个消息之一
 if(( message == WM_GETTEXT) || 
 ( message == EM_GETLINE))
 {
 // 检查是否为合法
 if( !g_bAuthorIdentity)
 {
 // 非法获取,显示信息
 AfxMessageBox(_T("我密码,可不能让你看哦!"));
 // 
 return 0;
 }
 // 合法获取
 g_bAuthorIdentity = FALSE;
 }
 return CEdit::DefWindowProc(message, wParam, lParam);
 }
 
字串7

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

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

 CPasswordEdit m_edtPassword;
 
字串4

  然后在对话框OnInitDialog()中加入下列代码:

 m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD, this);
 字串2 

  其目是将控制与新类做关联。

  之后在对话框数据? 中将身份设为合法:

 void CDlgInput::DoDataExchange(CDataExchange* pDX)
 {
 // 如果获取数据
		// 注意:对于CPropertyPage类这里不需要 
 if( pDX- $#@62;m_bSaveAndValidate) 条件
 if( pDX- $#@62;m_bSaveAndValidate)
 {
 g_bAuthorIdentity = TRUE;
 }		
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CDlgInput)
 DDX_Text(pDX, IDC_EDIT_PASSWORD, m_sPassword);
 //}}AFX_DATA_MAP
}
 字串3 

  这样,Password输入框就会受到保护。

  (三) 需要注意问题

  以上方法仅针对VC程序,对于VB程序,需要借助VC做一个PasswordActiveX 控件,实现方法与上类似。同时以上程序在Visual C 6.0上通过,并且用黑客程序 PWBTool测试通过。

字串2

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章