龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++中非法探取密码的原理及其防范(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
然后重载CWnd类的虚函数DefWindowProc(),在这个回调函数中进行具体的身份验证处理: LRESULTCPasswordEdit::DefWindowProc (UINTmessage,WPARAMwParam,LPARAMlParam) { //对Edit的内

  然后重载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);
}

  接下来在密码输入对话框中做些处理。在对话框中申明一个类成员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编译通过。

精彩图集

赞助商链接