首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

獲取網頁密碼框密碼的兩種 COM 接口方案

     編輯:VC 教學

問題背景

IE 自動完成保存的密碼無法直接導出。網頁密碼框(``)並非標準 EDIT 控件,無法通過 `FindWindow`/`GetWindowText` 獲取。必須通過 WebBrowser 控件的 COM 接口 訪問 DOM 解析表單元素。

方案一:腳本注入 + IE 右鍵菜單擴展

原理

利用註冊表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\ 添加自定義右鍵菜單項。菜單項指向一個 HTML/HTA 文件,包含腳本代碼。用戶右鍵點擊密碼框選擇菜單,腳本在隱藏窗口運行,可訪問當前文檔 DOM。

註冊表結構

  • 默認值(字符串):菜單觸發的 URL(指向本地 .htm 文件)。
  • Contexts (DWORD):顯示條件位掩碼:
    0x1  DEFAULT      0x2  IMAGE      0x4  CONTROL  (表單元素)
    0x8  TABLE       0x10 TEXTSELECT  0x20 ANCHOR   0x40 UNKNOWN
    
    密碼框屬於 CONTROL,設置 Contexts = 0x4。

腳本核心代碼 (GetPwd.htm)

var win = external.menuArguments; // 獲取當前 IE 窗口
var doc = win.document;
var frames = doc.frames;
var pwd = "";

// 遍歷所有框架及表單元素
for (var i = 0; i < frames.length; i++) {
    var fDoc = frames[i].document;
    var inputs = fDoc.all.tags("INPUT");
    for (var j = 0; j < inputs.length; j++) {
        if (inputs[j].type == "password") {
            pwd += "Frame " + i + ": " + inputs[j].name + " = " + inputs[j].value + "\n";
        }
    }
}
// 主文檔
var inputs = doc.all.tags("INPUT");
for (var j = 0; j < inputs.length; j++) {
    if (inputs[j].type == "password") {
        pwd += "Main: " + inputs[j].name + " = " + inputs[j].value + "\n";
    }
}

if (pwd != "") {
    // 發送給宿主應用(需配合註冊表 COM 服務器或寫文件/剪貼板)
    alert("找到密碼:\n" + pwd);
    // clipboardData.setData("Text", pwd); // 或寫入文件
}


方案二:BHO (Browser Helper Object) 直接掛鉤

開發 COM DLL 實現 IObjectWithSite,註冊為 BHO。在 SetSite 獲取 IWebBrowser2,掛鉤 DWebBrowserEvents2::DocumentComplete,遍歷 DOM 獲取密碼框值。此法無需用戶交互,適合自動化導出工具。

關鍵 COM 接口

  • IWebBrowser2:控制 IE 導航、獲取文檔。
  • IHTMLDocument2:DOM 根接口,all 集合訪問元素。
  • IHTMLElement / IHTMLInputElement:元素屬性(type、name、value)。

安全性提示

  • 現代 IE/Edge 已棄用 BHO、MenuExt,改用擴展模型。
  • 獲取密碼屬敏感操作,需用戶明確授權,勿用於惡意竊取。
  • 企業環境建議使用組策略禁用自動完成或部署密碼管理器。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved