本文介紹一款名為 SuperPasswordSpy++ 的工具,能夠偵測並顯示桌面應用程式與 Internet Explorer 網頁中的密碼編輯框內容。文章詳細剖析其架構設計、鉤子注入機制、IE COM 介面操作、反偵測對抗技術等核心實現細節,並提供完整原始碼參考。
工具採用「放大鏡」追蹤滑鼠位置,識別目標視窗類別名與樣式,判斷是否為密碼編輯框或 IE 控件(Internet Explorer_Server 類別)。若為 IE,需將鉤子 DLL 注入目標進程以枚舉網頁密碼欄位。
WM_COPYDATA 回傳資料缺點:非同步特性導致視窗切換時舊進程的 WM_COPYDATA 可能遲到,需在資料中攜帶視窗句柄以辨識來源。
流程類似,但第 2 步改用 SendMessage 發送訊息,DLL 內部以 SendMessage(WM_COPYDATA) 回傳。阻塞特性保證資料回傳完成才繼續,邏輯更簡單,類似阻塞式 Socket 編程。雖同一視窗多密碼框會重複注入,但開銷可忽略。
BOOL HWnd2HtmlDocument() {
CoUninitialize();
HINSTANCE hInst = LoadLibrary(_T("OLEACC.DLL"));
UINT nMsg = RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
LRESULT lRes;
SendMessageTimeout(g_hTarget, nMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes);
LPFNOBJECTFROMLRESULT pf = (LPFNOBJECTFROMLRESULT)GetProcAddress(hInst, "ObjectFromLresult");
CLSID uuidDoc; CLSIDFromString(L"{626fc520-a41e-11cf-a731-00a0c9082637}", &uuidDoc); // IID_IHTMLDocument2
HRESULT hr = (*pf)(lRes, uuidDoc, 0, (void**)&g_lpHTMLDocument2);
FreeLibrary(hInst); CoUninitialize();
return SUCCEEDED(hr);
}
注意:未導航的 WebBrowser ActiveX 控件不會建立 Internet Explorer_Server 視窗,需特別處理。
DWORD CheckHtmlDocument() {
IHTMLElementCollection* pAll; g_lpHTMLDocument2->get_all(&pAll);
long len; pAll->get_length(&len);
DWORD cnt = 0;
for (int i=0; iitem(CComVariant(i), CComVariant(i));
IHTMLInputElementPtr pInput; if (FAILED(pItem->QueryInterface(&pInput))) { pItem->Release(); continue; }
if (pInput->Gettype() == _bstr_t("password")) ++cnt;
pItem->Release();
}
pAll->Release(); return cnt;
}
_bstr_t val = pInput->Getvalue(); LPCTSTR pwd = (LPCTSTR)val; // 即可取得明文密碼
BOOL IsPasswordEdit(HWND hWnd) {
TCHAR cls[64]; GetClassName(hWnd, cls, 64);
if (lstrcmp(cls,_T("Edit")) && lstrcmp(cls,_T("TEdit")) && lstrcmp(cls,_T("ThunderTextBox"))) return FALSE;
return (GetWindowLong(hWnd, GWL_STYLE) & ES_PASSWORD) == ES_PASSWORD;
}
涵蓋標準 Edit、Borland TEdit、VB ThunderTextBox 三大常見類別,但未來新類別需自行擴充。
GUI-RunAs 類工具),可讀取「變更密碼」對話框內容。Win2003 以上失效。CAntiPeekEdit 覆寫 WindowProc,攔截 WM_GETTEXT,僅允許特定緩衝區長度(如 1024)讀取真實內容,否則回傳假資料。GWLP_WNDPROC,暫時替換目標視窗程序,呼叫 WM_GETTEXT 後還原。SuperPasswordSpy++ 整合 Windows 鉤子、COM 介面、跨進程記憶體操作等技術,展示了密碼框偵測的完整攻防體系。開發者可參考其架構設計鉤子工具,亦可研究反偵測機制強化自家軟體安全性。