一、非法獲取password的原理:
edit控制項是windows的乙個標準控制項,當把其password屬性設為true時,就會將輸入的內容遮蔽為星號,從而達到保護的目的。雖然我們看來都是星號,但程式中的edit控制項實際仍是使用者輸入的密碼,應用程式可以獲取該控制項中的密碼,其他應用程式也可以通過向其傳送wm_gettext或em_getline訊息來獲取edit控制項中的內容。黑客程式正是利用edit控制項的這個特性,當發現當前探測的視窗是edit控制項並且具有es_password屬性時,則通過sendmessage向此視窗傳送wm_gettext或em_getline訊息,這樣edit框中的內容就一目了然了。
二、黑客軟體工作方法
首先要取得當前的視窗,並判斷是否是edit控制項,一般多通過滑鼠來指定要探測的視窗,例如在wm_mousemove訊息的響應函式中進行判斷,現列舉**片段如下:
//將客戶座標轉換成螢幕座標
clienttoscreen(&point);
//返回乙個包含指定螢幕座標點的視窗
cwnd* pwnd = cwnd::windowfrompoint(point);
if (pwnd) }
} }
} 上述**中值得注意的有以下幾個關鍵地方:
clienttoscreen(&point);
cwnd* pwnd = cwnd::windowfrompoint(point);
hwnd hwndcurr = pwnd->getsafehwnd();
這三句**可以獲取當前滑鼠位置所在視窗的視窗控制代碼,在sendmessage中要用到的。
::sendmessage(hwndcurr, wm_gettext, 255, (lparam)sztext);
這便是真正起作用的sendmessage了,其第乙個引數指定了要接收訊息的視窗控制代碼,我們已經通過上面的**獲取到了,第二個引數就是讓edit控制項返回字元的wm_gettext訊息了,並將得到的內容儲存在sztext中。
三、防範措施
既然我們搞清除了黑客軟體普遍採取的手法,那我們自然能制訂出一套防範其攻擊的措施來。下面我們就要對password進行保護。
從以上分析我們可以看出:edit控制項的漏洞主要在於沒有對傳送wm_gettext或em_getline訊息者的身份進行檢查,只要能找到edit視窗控制代碼,任何程序都可獲取其內容。所以必須要對傳送訊息者的身份進行驗證,這裡給出一種方法來驗證傳送訊息者的身份是否合法:
1.建立新cedit類
從cedit繼承乙個子類cpasswordedit,申明全域性變數g_bsenderidentity表明訊息傳送者的身份: bool g_bsenderidentity;
然後響應cwnd的虛函式defwindowproc,在這個**函式中進行身份驗證:
lresultcpasswordedit:efwindowproc (uintmessage,wparamwparam,lparamlparam)
//合法獲取
g_bsenderidentity=false;
} return cedit:efwindowproc (message,wparam,lparam);
} 2.在資料輸入對話方塊中做些處理
在對話方塊中申明乙個類成員m_edtpassword:
cpasswordedit m_edtpassword;
然後在對話方塊的oninitdialog()中加入下列**:
m_edtpassword.subclassdlgitem(idc_edit_password,this);
將控制與新類做關聯。
之後要在對話方塊的資料交換函式中將身份設為合法:
void cdlginput:odataexchange (cdataexchange*pdx)
cdialog:odataexchange(pdx);
//}afx_data_map
} 這樣,password輸入框就擁有了合法身份,會受到保護。
結論:
以上的方法僅針對vc程式,對於其他語言如vb、delphi等語言,需要借助vc做乙個password的activex控制項,實現方法與上述方法基本類似。以上程式均用visualc++6.0編制除錯通過。
VC 中非法探取密碼的原理及其防範
引言 在windows下輸入密碼時,為了安全起見通常都以星號來遮蔽使用者輸入的密碼。如果需要在自己編寫的應用程式中需要使用者輸入密碼,通常的選擇就是選用edit控制項並設定其password屬性。雖然edit控制項的password屬性在一定程度上可以保護使用者的密碼不被視覺 但在許多窺探密碼的黑客...
VC 中非法探取密碼的原理及其防範
引言 在windows下輸入密碼時,為了安全起見通常都以星號來遮蔽使用者輸入的密碼。如果需要在自己編寫的應用程式中需要使用者輸入密碼,通常的選擇就是選用edit控制項並設定其password屬性。雖然edit控制項的password屬性在一定程度上可以保護使用者的密碼不被視覺 但在許多窺探密碼的黑客...
用MD5儲存密碼的安全防範
兩個不同的且均可正常執行的exe程式檔案,具有相同的md5校驗值,這不僅僅是理論上的可能,而是現實,已經有人寫出了這樣的兩個程式了,關於md5碰撞,據說是山東大學王小雲教授的一篇報告震驚國際密碼學界,他找到了一種能夠比較快速的計算md5碰撞的演算法。最早我聽到這個報道的時候還以為是忽悠呢,俺中國人被...