⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 防止密码被非法获取 .txt

📁 防止密码被非法获取防止密码被非法获取防止密码被非法获取
💻 TXT
字号:
防 止 密 码 被 非 法 获 取 
郝 峰 
 
----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) 
    {
        // 对Edit 的 内 容 获 取 必 须 通 过 
          以 下 两 个 消 息 之 一
        if(( message == WM_GETTEXT) 
        || ( message == EM_GETLINE))
        {
            // 检 查 是 否 为 合 法
            if( !g_bAuthorIdentity)
            {
                // 非 法 获 取, 显 示 信 息
                AfxMessageBox(_T
        (“ 我 的 密 码, 可 不 能 让 你 看!"));
                // 
                return 0;
            }
            // 合 法 获 取
            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)
    {
     // 如 果 获 取 数 据
     // 注 意: 对 于CPropertyPage 类 这 里 不 需 要if
     ( pDX ->m_bSaveAndValidate) 条 件
        if( pDX ->m_bSaveAndValidate)
        {
            g_bAuthorIdentity = TRUE;
        }         
        CDialog::DoDataExchange(pDX);
      //{{AFX_DATA_MAP(CDlgInput)
      DDX_Text
     (pDX, IDC_EDIT_PASSWORD, m_sPassword);
      //}}AFX_DATA_MAP
    }
----这 样,Password 输 入 框 就 会 受 到 保 护。 
三、 需 要 注 意 的 问 题
----以 上 的 方 法 仅 针 对VC 程 序, 对 于VB 程 序, 需 要 借 助VC 做 一 个Password 的ActiveX 控 
件, 实 现 方 法 与 上 类 似。 以 上 程 序 在Visual C + +6.0 上 通 过, 并 且 用 黑 客 程 序
PWBTool 测 试 通 过。 完 整 演 示 代 码 请 到http://myhelper.yeah.net 的“ 编 程 技 巧” 下 载。
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -