?? 如何防止edit框中的password不被非法獲取 (2000年8.txt
字號:
如何防止Edit框中的Password不被非法獲取 (2000年8月24日)
本站更新 分類: 作者:郝峰 推薦: 閱讀次數(shù):852
(http://www.codesky.net)
--------------------------------------------------------------------------------
----Windows雖然是一個功能強大的操作系統(tǒng),但其存在的一些先天性不足,給黑客留下了
許多可乘之機(jī),著名的BO程序就是利用Windows的這些漏洞來危害計算機(jī)的安全。筆者
最近發(fā)現(xiàn)了一個很流行的專門獲取Edit框Password的工具,甚至其源代碼已在某報紙發(fā)表,
這無疑是對Edit的Password功能的完全否定。本文將首先分析非法獲取Password的原理,
然后給出用VisualC++來實現(xiàn)保護(hù)Edit框中的Password不被非法獲取的對策。
----(一)非法獲取Password的原理
----Edit是Windows的一個標(biāo)準(zhǔn)控件,當(dāng)把其Password屬性設(shè)為True時,就會將輸入的內(nèi)容
屏蔽為星號(*),從而達(dá)到保護(hù)的目的。
而Edit框中的內(nèi)容可通過發(fā)WM_GETTEXT,EM_GETLINE消息來獲取。黑客程序就是利
用Edit的這個特性,首先枚舉當(dāng)前程序的所有子窗口,當(dāng)發(fā)現(xiàn)枚舉的窗口是EDIT并且具
有ES_PASSWORD屬性時,則通過SendMessage向此窗口發(fā)送WM_GETTEXT或
EM_GETLINE消息,這樣Edit框中的內(nèi)容就一目了然了。
----(二)對Password進(jìn)行保護(hù)
----由上述分析可看出,Edit的漏洞在于沒有檢查發(fā)送WM_GETTEXT或EM_GETLINE消
息者的身份,只要找到Edit窗口句柄,任何進(jìn)程都可獲取其內(nèi)容。這里給出一種簡單的方
法來驗證發(fā)送消息者的身份是否合法。
----1)創(chuàng)建新CEdit類
----從CEdit繼承一個子類CPasswordEdit,申明全局變量g_bAuthorIdentity表明消息發(fā)送者的身份:
BOOLg_bAuthorIdentity;
----然后響應(yīng)CWnd的虛函數(shù)DefWindowProc,在這個回調(diào)函數(shù)中進(jìn)行身份驗證:
LRESULTCPasswordEdit::DefWindowProc(UINTmessage,WPARAMwParam,LPARAMlParam)
{//對Edit的內(nèi)容獲取必須通過以下兩個消息之一
if((message==WM_GETTEXT)||
(message==EM_GETLINE))
{//檢查是否為合法
if(!g_bAuthorIdentity)
{//非法獲取,顯示信息
AfxMessageBox(_T("我的密碼,可不能讓你看哦!"));
//
return0;
}
//合法獲取
g_bAuthorIdentity=FALSE;
}
returnCEdit::DefWindowProc(message,wParam,lParam);
}
----2)在數(shù)據(jù)輸入對話框中做處理
----在對話框中申明一個類成員m_edtPassword:
CPasswordEditm_edtPassword;
----然后在對話框的OnInitDialog()中加入下列代碼:
m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD,this);
----其目的是將控制與新類做關(guān)聯(lián)。
----之后在對話框的數(shù)據(jù)交換中將身份設(shè)為合法:
voidCDlgInput::DoDataExchange(CDataExchange*pDX)
{//如果獲取數(shù)據(jù)
//注意:對于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輸入框就會受到保護(hù)。
----(三)需要注意的問題
----以上的方法僅針對VC程序,對于VB程序,需要借助VC做一個Password的ActiveX
控件,實現(xiàn)方法與上類似。同時以上程序在VisualC++6.0上通過,并且用黑客程序PWBTool
測試通過。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -