开发一个密码查看器

原创 2004年05月24日 09:58:00

现在有很多软件都有密码输入对话框。上面显示的是*标识符。如果想查看其字符串并不难。下面我们就用delphi使用API函数来开发一个查看其密码字符的程序吧。

功能:当鼠标移动到密码处就会在程序的指定地方显示其字符串。

问题一:当鼠标移动到密码对话框处时查找出此处的控件句柄。这样才可以对这个对象进行操作.具体实现如下:

function gethwnd(): thandle;
var
  hwnd: thandle;
  wndpoint: tpoint;
begin
  try
    GetCursorPos(wndpoint); //获取鼠标指针
    hwnd:=WindowFromPoint(wndpoint);
    Result:=wndpoint
  except
    Result:=0;
  end;
end;

问题二: 根据获取的句柄得到此对象的密码字符。具体实现如下:

function getpass(var hwnd: thandle): string;
var
  passbuf: integer;
  passlong: longint;
  passText: PChar;
begin
  passlong:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0)+1; //获取此对象的长度
  GetMem(passText,passlong); //开辟一个内存区。存放数据长度为passlong
  passbuf:=LongInt(passtext); //获取此数据区的首地址
  SendMessage(hwnd,WM_GETTEXT,passlong,passbuf); //发送消息让此对象将密码数据存入首地址为passbuf的数据区。存入长度为passlong
  result:=passtext;
end;

这样主要问题都解决了。还可以使用GetClassName,GetWindowText等API函数将此对象的类、标题等都读出来。以下是源代码,在delphi6.0+winXP测试通过,仅供参考。


{-----------------------------pas内容--------------------------------------}
unit getwnd;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    Label5: TLabel;
    Label6: TLabel;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    N2: TMenuItem;
    procedure Timer1Timer(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
     procedure Createparams(Var Params:TCreateParams);override;
    { Public declarations }
  end;

var
  Form1: TForm1;
  hwnd,htemp:THandle;
  point,mouse:TPoint;
  wndcaption:array[0..255] of char;
  wndclass:array[0..255] of char;
  fmove: boolean;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
  buf: integer;
  ret: longint;
  mText:PChar;
begin
   GetCursorPos(point);
   htemp:=WindowFromPoint(point);
   if hwnd<>htemp then
   begin
      hwnd:=htemp;
      GetClassName(hwnd,wndclass,256);
      GetWindowText(hwnd,wndcaption,256);
      if wndcaption='' then
      begin
         Ret:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0)+1;
         GetMem(mText,Ret);
         buf:=LongInt(mtext);
         SendMessage(hwnd,WM_GETTEXT,ret,buf);
         label4.Caption:=mText;
      end else
         label4.Caption:=wndcaption;
      label3.Caption:=inttostr(hwnd);
      label6.Caption:=wndclass;
   end;

end;

procedure TForm1.N1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fmove:=true;
  mouse.X:=x;
  mouse.Y:=y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fmove:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if fmove then
   begin
      top:=top+y-mouse.Y;
      left:=left+x-mouse.X;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   left:=screen.Width-width-3;
   top :=screen.Height-height-34;
end;

procedure TForm1.Createparams(var Params: TCreateParams);
var
  wndParnet: THandle;
begin
  Inherited CreateParams(Params);
  With Params do
  begin
   EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES;
   wndParnet:=GetDesktopWindow;
  end;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
   timer1.Enabled:=not timer1.Enabled;
   if timer1.Enabled then
      n2.Caption:='暂停'
   else
      n2.Caption:='开始';
end;

end.
{-------------------------------------------------------------------------}


{----------------------------dfm内容--------------------------------------}
object Form1: TForm1
  Left = 308
  Top = 302
  BorderStyle = bsNone
  Caption = 'xiewh_open'
  ClientHeight = 59
  ClientWidth = 179
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PopupMenu = PopupMenu1
  OnCreate = FormCreate
  OnMouseDown = FormMouseDown
  OnMouseMove = FormMouseMove
  OnMouseUp = FormMouseUp
  PixelsPerInch = 96
  TextHeight = 13
  object Shape1: TShape
    Left = 0
    Top = 0
    Width = 179
    Height = 2
    Align = alTop
    Pen.Color = clBlue
    OnMouseDown = FormMouseDown
    OnMouseMove = FormMouseMove
    OnMouseUp = FormMouseUp
  end
  object Label1: TLabel
    Left = 8
    Top = 11
    Width = 57
    Height = 13
    AutoSize = False
    Caption = #21477#26564#21495#65306
    Transparent = True
  end
  object Label2: TLabel
    Left = 8
    Top = 26
    Width = 64
    Height = 13
    AutoSize = False
    Caption = #26631#39064#21517#65306
    Transparent = True
  end
  object Label3: TLabel
    Left = 56
    Top = 12
    Width = 117
    Height = 13
    AutoSize = False
    Transparent = True
  end
  object Label4: TLabel
    Left = 56
    Top = 25
    Width = 117
    Height = 13
    AutoSize = False
    Transparent = True
  end
  object Label5: TLabel
    Left = 8
    Top = 40
    Width = 56
    Height = 13
    Caption = #31867#12288#21517#65306
    Transparent = True
  end
  object Label6: TLabel
    Left = 56
    Top = 39
    Width = 117
    Height = 13
    AutoSize = False
    Transparent = True
  end
  object Shape2: TShape
    Left = 0
    Top = 0
    Width = 2
    Height = 73
    Pen.Color = clActiveCaption
    Pen.Width = 2
  end
  object Shape3: TShape
    Left = 0
    Top = 57
    Width = 179
    Height = 2
    Align = alBottom
    Pen.Color = clBlue
    Pen.Width = 2
  end
  object Shape4: TShape
    Left = 177
    Top = -1
    Width = 2
    Height = 71
    Pen.Color = clBlue
    Pen.Width = 2
  end
  object Timer1: TTimer
    Interval = 100
    OnTimer = Timer1Timer
    Left = 120
    Top = 32
  end
  object PopupMenu1: TPopupMenu
    Left = 88
    Top = 32
    object N2: TMenuItem
      Caption = #26242#20572
      OnClick = N2Click
    end
    object N1: TMenuItem
      Caption = #36864#20986
      OnClick = N1Click
    end
  end
end

{--------------------------------------------------------------------------}

 

 

 

 

 

 

星号密码查看器原理

星号密码查看器原理     网上很多人写了叫做星号密码查看器的东西,今天大体研究了下,原理很简单,写个测试例子,在说下怎么防护。 原理:    平时编程可能会拖拽这么一个控件,text或者别的类...
  • u013761036
  • u013761036
  • 2017年05月31日 22:20
  • 806

最全各种浏览器网页星号点号密码查看最简方法(技术小白也能看懂使用)

查看密码分IE内核的浏览器和非IE内核的浏览器密码查看 1.IE浏览器的密码查看。 方法①:按F12——找到密码元素 或 找到你要查看的密码元素——右键——检查元素——把type="password"...
  • superit401
  • superit401
  • 2017年09月08日 11:58
  • 6751

简易的星号密码查看器(对话框版+网页版)

基本都是别人写的,我居然有脸写原创。玩路路解密破解游戏的时候用到过一个工具,可以用来查看窗口的星号密码以及网页中的星号密码,顿觉得很牛x,找了一下它们的原理,依葫芦画瓢也自娱自乐了一番。就当是验证一下...
  • reggiekiller
  • reggiekiller
  • 2010年10月18日 15:10
  • 6200

锐捷密码忘了!->锐捷密码查看器

(0408更新)   由于我们锐捷大多数都是记住密码的,时间一久,都把密码给忘掉啦!!还要到网络中心去该密码,多麻烦啊!呜呜~~ 于是自己花了点时间写了一个《锐捷密码破解器》——《读@锐捷》!!...
  • wangwanfeng512
  • wangwanfeng512
  • 2012年04月09日 14:56
  • 21710

支持Win7的星号密码查看器的实现

支持Win7的星号密码查看器的实现 支持Win7的星号密码查看器的实现 星号密码查看器大家肯定不陌生吧,但是在Win7下要想不用注入DLL,不用W...
  • lenovo455
  • lenovo455
  • 2013年11月29日 15:04
  • 1191

linux忘记密码,使用星号密码查看器,查看SSH工具记录的密码

前言 菜鸟(我)的学习笔记 Linux忘记了密码,ssh工具保存着 今天在登录Linux时,发现密码忘记了,但是XshellPortable还保存记录着密码。发现一款小工具,星号密码查看器...
  • u012848709
  • u012848709
  • 2018年02月06日 16:49
  • 39

【破解作品】Access密码查看器 破解版 注册码

Access密码查看器 破解版 注册码 注册名: onebody 注册码: 3EE979B937FBD4C1 功能介绍: Access数据库密码破解器可以破解目前已知的...
  • fcjg
  • fcjg
  • 2011年08月21日 16:26
  • 1223

做一个自己的WiFi密码查看器——Android

原文地址:http://www.jianshu.com/p/b368b4d9554b WiFi密码查看器 配合 WiFi万能钥匙 太爽了。 有时候用万能钥匙破解了密码之后想要让...
  • chenhuakang
  • chenhuakang
  • 2017年08月24日 17:19
  • 277

VC星号密码查看器源码

UINT g_timer = 0; void CGetPwdDlg::StartDeteck() {     // TODO: 在此添加控件通知处理程序代码     //g_hHook=SetWind...
  • liujiayu2
  • liujiayu2
  • 2014年10月24日 19:35
  • 1047

VB.Net程序设计:密码查看器

网上许多密码查看器,但要注册。要钱。自己要用到。所以自己用VB.Net写了一个。很简单的几十行代码。在win2000+vs2005测试通过。可以看密码框里*号下是什么内容。对于简单的密码框有效。软件界...
  • linjimu
  • linjimu
  • 2009年01月16日 15:13
  • 1753
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发一个密码查看器
举报原因:
原因补充:

(最多只允许输入30个字)