(message==EM_GETLINE))
{
//检查是否为合法
if(!g_bSenderIdentity)
{
//非法获取,显示信息
AfxMessageBox(_T ("报告:正在试图窃取密码!"));
return 0;
}
//合法获取
g_bSenderIdentity=FALSE;
}
return CEdit::DefWindowProc (message,wParam,lParam);
}
接下来在密码输入对话框中做些处理。在对话框中申明一个类成员m_edtPassword:
CPasswordEdit m_edtPassword;
并在对话框的初始化函数OnInitDialog()中加入下列代码,以完成子类化:
m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD,this);
这将控制与新类做关联。之后要在对话框的数据交换函数中将身份设为合法:
void CDlgInput::DoDataExchange (CDataExchange*pDX)
{
//如果获取数据
//注意:对于CPropertyPage类这里不需要 if (pDX->m_bSaveAndValidate)条件
if(pDX->m_bSaveAndValidate)
{
g_bSenderIdentity=TRUE;
}
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgInput)
DDX_Text (pDX,IDC_EDIT_PASSWORD,m_sPassword);
//}}AFX_DATA_MAP
}
经过这样的处理,Password输入框就拥有了合法身份并受到保护。只有本应用程序能够提取用户输入的密码内容,而其他任何一个黑客软件也都会因为没有合法身份而不能获取其中的任何信息。
结论:
以上的方法仅针对VC程序,对于其他语言如VB、Delphi等语言,需要借助VC做一个Password的ActiveX控件,实现方法与上述方法基本类似。文中给出的全部代码在Windows 2000 Professional + SP4下由Microsoft VisualC++ 6.0编译通过。
关键词:VC++中非法探取密码的原理及其防范