當前位置:編程學習大全網 - 源碼下載 - 如何防止Edit框中的密碼不被非法獲取

如何防止Edit框中的密碼不被非法獲取

筆者最近發現了壹個很流行的專門獲取Edit框Password的工具,甚至其源代碼已在某報紙發表,這無疑是對Edit的Password功能的完全否定。本文將首先分析非法獲取Password的原理,然後給出用VisualC++來實現保護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表明消息發送者的身份:

BOOLg_bAuthorIdentity;

 然後響應CWnd的虛函數DefWindowProc,在這個回調函數中進行身份驗證:

LRESULTCPasswordEdit::DefWindowProc(UINTmessage,

WPARAMwParam,LPARAMlParam){//對Edit的內容獲取必須通過以下兩個消息之壹

if((message==WM_GETTEXT)||(message==EM_GETLINE)){//檢查是否為合法

if(!g_bAuthorIdentity){//非法獲取,顯示信息

AfxMessageBox(_T("我的密碼,可不能讓妳看哦!"));//return0;}//合法獲取g_bAuthorIdentity=FALSE;}returnCEdit::DefWindowProc(message,wParam,lParam);} 2)在數據輸入對話框中做處理

 在對話框中申明壹個類成員m_edtPassword:

CPasswordEditm_edtPassword;

 然後在對話框的OnInitDialog()中加入下列代碼:

m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD,this);

 其目的是將控制與新類做關聯。

 之後在對話框的數據交換中將身份設為合法:

voidCDlgInput::DoDataExchange(CDataExchange*pDX){//如果獲取數據

//註意:對於CPropertyPage類這裏不需要

if(pDX-m_bSaveAndValidate)//條件

if(pDX-m_bSaveAndValidate){g_bAuthorIdentity=TRUE;}CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CDlgInput)

DDX_Text(pDX,IDC_EDIT_PASSWORD,m_sPassword);

//}}AFX_DATA_MAP} 這樣,Password輸入框就會受到保護。

 (三)需要註意的問題

 以上的方法僅針對VC程序,對於VB程序,需要借助VC做壹個Password的ActiveX控件,實現方法與上類似。

  • 上一篇:關於java和unix
  • 下一篇:有哪些比較厲害的社交電商平臺?
  • copyright 2024編程學習大全網