• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何防止Edit框中的Password不被非法獲取

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    文/郝峰 Windows 雖然是一個功能強大的操作系統,但其存在的一些先天性不足,給黑客留下了許多可乘之機,著名的BO程序就是利用Windows的這些漏洞來危害計算機的 安全 。筆者最近發現了一個很流行的專門獲取Edit框Password的工具,甚至其源代碼已在某報紙發表
    文/郝峰

        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://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>