當前位置:編程學習大全網 - 熱門推薦 - 關於查看星號的原理

關於查看星號的原理

這個就很專業了,是軟件編程方面的問題,妳可以看看下面的東西: 幾乎所有軟件在用戶密碼輸入框都做了手腳,使得用戶輸入的密碼顯示為星號“*”,這樣就無法使得惡意用戶直接看到密碼。但是,網上有很多版本的星號密碼查看器,可以還原星號為真實的密碼。我根據自己的壹些想法寫了星號查看器的源代碼,並且根據其原理做了壹些防範手段。使用本源代碼寫的程序可以查看到很多軟件如popo、msn、qq低版本的密碼,用戶使用VC、VB、BCB編寫的軟件並且直接使用Edit或者Text組件的話,本代碼也可以還原其真實密碼。而使用本修改手法以後的軟件,使用網上盛傳的passxp以及前面的查看方法均失效。好了,進入正題。 壹、星號查看器原理 Edit或者Text組件有壹個屬性為“PasswordChar”,我們壹般就是設置這個屬性已實現把真實密碼隱藏為星號的,但它們收到EM_GETPASSWORDCHAR消息以後,會返回其PasswordChar屬性值,收到EM_SETPASSWORDCHAR消息後會修改其PasswordChar屬性值,當然就可以取消原有的“*”設置,而使其顯示真實字符,這時再向其發送WM_GETTEXT消息即可得到其真實密碼,很多星號密碼查看器都是根據這個原理寫的。關鍵代碼如下(以BCB為例):void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

POINT P;

::GetCursorPos(&P);//捕捉鼠標屏幕位置

//取得鼠標位置下窗口handle

HWND HWnd = ::WindowFromPoint(P);

//向此窗口送出"取得標題字符串"信息

char buffer[100];char Char;

Char = SendMessage (HWnd,EM_GETPASSWORDCHAR,0,0);//獲取密碼字符

PostMessage (HWnd,EM_SETPASSWORDCHAR,0,0);//取消密碼字符

Sleep (60);

SendMessage (HWnd,WM_GETTEXT,255,long(buffer));獲取真實密碼

PostMessage (HWnd,EM_SETPASSWORDCHAR,Char,0);還原密碼字符//顯現在Form1窗口的字符串對象上

Caption = buffer;

} 這裏用了壹個計時器,每隔100毫秒調用壹次上面的代碼。 我們已經看出來了,主要是幾個消息壞了我們的大事,如果我們能夠屏蔽這幾個消息,即可安全隱藏真實密碼。網上有很多屏蔽消息的方法,但都顯過於復雜,我的思路如下: 二、防範星號密碼查看器 我們可以從TEdit派生壹個新的組件,名字為TBugEyesEdit,然後修改其消息定義。在頭文件添加代碼如下: public:

__fastcall TBugEyesEdit(TComponent* Owner);

void __fastcall BugEyes(TMessage &Msg);//自定義消息處理函數

BEGIN_MESSAGE_MAP //消息影射

VCL_MESSAGE_HANDLER(EM_GETPASSWORDCHAR,TMessage,BugEyes)

VCL_MESSAGE_HANDLER(WM_GETTEXT,TMessage,BugEyes)

VCL_MESSAGE_HANDLER(EM_SETPASSWORDCHAR,TMessage,BugEyes)

END_MESSAGE_MAP(TEdit) //結束消息影射 然後在其cpp文件中添加如下代碼:void __fastcall TBugEyesEdit::BugEyes(TMessage &Msg)

{

Msg.Result =0;

} 最後安裝這個新的組件,並添加到自己的程序中,設置其PasswordChar屬性為“*”,然後運行程序,這時星號密碼查看器就失效了,無法再看到真實密碼。

  • 上一篇:無錫翔雲道橋科技有限公司怎麽樣
  • 下一篇:阿裏巴巴和淘寶網有什麽區別
  • copyright 2024編程學習大全網