防 止 密 碼 被 非 法 獲 取
郝 峰
----windows 雖 然 是 一 個 功 能 強 大 的 操 作 系 統, 但 其 存 在 的 一 些 先 天 性 不 足 給 黑 客
留 下 了 許 多 可 乘 之 機, 著 名 的bo 程 序 就 是 利 用windows 的 這 些 漏 洞 來 危 害 計 算 機 的
安 全。 筆 者 最 近 發 現 了 一 個 很 流 行 的 專 門 獲 取edit 框password 的 工 具, 甚 至 其 源 代
碼 已 在 某 報 紙 上 發 表 了, 這 無 疑 是 對edit 的password 功 能 的 完 全 否 定。 本 文 將 首 先
分 析 非 法 獲 取password 的 原 理, 然 後 給 出 用visual c + + 來 實 現 保 護edit 框 中 的
password 不 被 非 法 獲 取 的 對 策。
一、 非 法 獲 取password 的 原 理
----edit 是windows 的 一 個 標 準 控 件, 當 把 其 password 屬 性 設 為true 時, 就 會 將 輸 入 的
內 容 屏 蔽 為 星 號( *), 從 而 達 到 保 護 的 目 的。 而edit 框 中 的 內 容 可 通 過 發
wm_gettext,em_getline 消 息 來 獲 取。 黑 客 程 序 就 是 利 用edit 的 這 個 特 性, 首 先 枚 舉 當
前 程 序 的 所 有 子 窗 口, 當 發 現 枚 舉 的 窗 口 是edit 並 且 具 有es_password 屬 性 時, 則 通
過sendmessage 向 此 窗 口 發 送wm_gettext 或em_getline 消 息, 這 樣edit 框 中 的 內 容 就 一 目 了
然 了。
二、 對password 進 行 保 護
----由 上 述 分 析 可 看 出,edit 的 漏 洞 在 於 沒 有 檢 查 發 送wm_gettext 或em_getline 消 息 者
的 身 份, 只 要 找 到edit 窗 口 句 柄, 任 何 進 程 都 可 獲 取 其 內 容。 這 裡 給 出 一 種 簡 單
的 方 法 來 驗 證 發 送 消 息 者 的 身 份 是 否 合 法。
----1. 創 建 新cedit 類
----從cedit 繼 承 一 個 子 類cpasswordedit, 申 明 全 局 變 量g_bauthoridentity 表 明 消 息 發 送 者
的 身 份:
bool g_bauthoridentity;
----然 後 響 應cwnd 的 虛 函 數defwindowproc, 在 這 個 回 調 函 數 中 進 行 身 份 驗 證:
lresult cpasswordedit::defwindowproc
(uint message, wparam wparam, lparam lparam)
// 合 法 獲 取
g_bauthoridentity = false;
}
return cedit::defwindowproc
(message, wparam, lparam);
}
----2. 在 數 據 輸 入 對 話 框 中 做 處 理
----在 對 話 框 中 申 明 一 個 類 成 員m_edtpassword:
cpasswordedit m_edtpassword;
----然 後 在 對 話 框 的oninitdialog() 中 加 入 下 列 代 碼:
m_edtpassword.subclassdlgitem(idc_edit_ password, this);
----其 目 的 是 將 控 制 與 新 類 做 關 聯。
----之 後 在 對 話 框 的 數 據 交 換 中 將 身 份 設 為 合 法:
void cdlginput::dodataexchange
(cdataexchange * pdx)
cdialog::dodataexchange(pdx);
//}afx_data_map
}
----這 樣,password 輸 入 框 就 會 受 到 保 護。
三、 需 要 注 意 的 問 題
----以 上 的 方 法 僅 針 對vc 程 序, 對 於vb 程 序, 需 要 借 助vc 做 一 個password 的activex 控
件, 實 現 方 法 與 上 類 似。 以 上 程 序 在visual c + +6.0 上 通 過, 並 且 用 黑 客 程 序
pwbtool 測 試 通 過。 完 整 演 示 代 碼 請 到 的「 編 程 技 巧」 下 載。
如何防止密碼被非法獲取
問題提出 這兩天大家比較專注在獲取edit 密碼框的密碼 在盜取時 我們如何防範呢?解決方法 此方法針對於通過sendmessage 向此視窗傳送 wm gettext 或em getline 訊息來取得密碼 跟我來.程式實現 方法很簡單,用cwnd defwindowproc 函式攔截得到的訊息 ...
如何防止webservice被非法呼叫
為了使.a x控制代碼有可能反序列化soap頭,首先你需要定義乙個.net類,它代表了暗含的xml schema類。在此例中相應的類如下 然後你需要在webmethod類中定義乙個成員變數來控制乙個頭類的例項,同樣要為webmethods標記 soapheader 屬性。見如下 using syst...
防止非法訪問
正常的我們應該訪問html檔案,但有些人會直接訪問php檔案,如果直接訪問php檔案會出現錯誤,所以我們要防止直接訪問php檔案。如何防止直接來訪問呢?我們需要先判斷使用者輸入的是否為空陣列 boolempty mixed var 如果var是非空或非零的值,則empty 返回false。換句話說,...