Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Windows XP系統教程 >> XP系統基礎知識 >> Win2000/XP/2003下的密碼探測器

Win2000/XP/2003下的密碼探測器

日期:2017/2/7 16:14:21      編輯:XP系統基礎知識

在Win98下,對於別的程序的密碼框,我們可以用SendMessage函數可以對這個密碼框下一個WM_GETTEXT 的命令獲取這個密碼框的內容。但自2000以後,微軟的安全意識似乎強了一點,用這個命令對普通的窗口管用,但對於密碼框已經不起作用了。

  有不少類似的程序是通過建立動態鏈接庫的方式來獲取,但是那樣做太麻煩了,其實我們有更簡便的作法。那就是對它先下一個命令,去除它的密碼框的屬性,然後再獲取它的內容,最後恢復它密碼框的屬性。

{
 項目 :Win2000/XP/2003 下*號密碼探測器
 作者 :黃濤 [email protected]
 日期 :2004年1月18日
}
unit uPassword;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TfrmPassword = class(TForm)
  edPassword: TEdit;       //顯示密碼的文本框
  Timer1: TTimer;       //定時器
  procedure Timer1Timer(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
 end;

var
 frmPassword: TfrmPassword;

implementation

{$R *.dfm}

procedure TfrmPassword.Timer1Timer(Sender: TObject);
var s:pchar;
 i,n:integer;
 p:Tpoint;h:integer;
 c:integer;
begin
 getcursorpos(p);     //得到當前光標的位置
 h:=windowfrompoint(p);   //當到光標處窗口的句柄
 n:=getwindowlong(h ,GWL_STYLE ); //取窗口的屬性
 if (n and $20) <>0 then begin    //判斷是否為密碼框
  c:=sendMessage(h, EM_GETPASSWORDCHAR,0, 0);
  //得到密碼框當前的字符 如''*''等
  PostMessage(h,EM_SETPASSWORDCHAR,0,0);
  //設置密碼框的字符為空,即去除密碼框的密碼屬性,

   //此處一定要用PostMessage,而不能用 SendMessage,用後者無效
  i:= sendmessage(h,WM_GETTEXTLENGTH,0,0);inc(i);
  //取得密碼串的長度
  getmem(s,i);   //分配內存
  sendmessage(h,WM_GETTEXT,i,longint(s)); //獲取密碼字符串
  edPassword.Text := s;    //將密碼放入文本框中
  postMessage(h,EM_SETPASSWORDCHAR,c,0); //恢復原來的密碼屬性
  freemem(s); //釋放內存
 end;
end;

end.

  本程序在 Window Server 2003 ,Delphi 7.0 Enterprise 下編譯通過。但這個程序只對那些沒有防范的程序有效,如QQ ganme 等,但對有些防范的程序來說還是無能為力的,如QQ2004 Beta的密碼框是沒用的。可見Win2000/XP/2003密碼框的安全也是相對的,要想安全還要自己想辦法。

Copyright © Windows教程網 All Rights Reserved