ITEEDU

拾取密码框中的密码

概述:

其实早有所闻 Windows 的马虎,Windows打星号的密码框中的密码实际上是很容易得到的,我以前看到过的资料说是检索屏幕上的窗口,找到有 ES_PASSWORD 风格的就向它发送取消 ES_PASSWORD 的消息,然后刷新它,密码就在原来的地方显示出来了,这儿还有另一个办法,就是找到密码框,直接取得中间的文本。
程序的结构如下: 初始化的时候设置一个定时器,定时时间为0.1秒,然后在定时器消息中利用 GetCursorPos 取得当前鼠标的位置,再利用 WindowFromPoint 取得该位置的窗口句柄,如果成功的话,利用 GetWindowLong 取得窗口的风格,如果窗口有 ES_PASSWORD 风格的话,那么这肯定是个密码框,然后我们向它发送 WM_GETTEXT 消息取得中间的文本就万事大吉了,简单吗?下面是源程序,结合上面的介绍是很好懂的。
最后,如果你的163密码泄密了可不是我的错喔! :-)

源程序:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	Programmed by 罗云彬, bigluo@telekbird.com.cn
;	Website: http://asm.yeah.net
;	LuoYunBin's Win32 ASM page (罗云彬的编程乐园)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	版本信息
;	密码查看器 - 可以查看 ES_PASSWORD 风格的编辑框中的密码
;	   V1.0 ------	2000年6月18日
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386
.MODEL        FLAT, STDCALL
		option casemap :none   ; case sensitive

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

     INCLUDE  WINDOWS.INC
     INCLUDE  USER32.INC
     INCLUDE  KERNEL32.INC
     INCLUDE  COMCTL32.INC
     INCLUDE  COMDLG32.INC

  INCLUDELIB  USER32.LIB
  INCLUDELIB  KERNEL32.LIB
  INCLUDELIB  COMCTL32.LIB
  INCLUDELIB  COMDLG32.LIB

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	Equ 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    DLG_MAIN  EQU       1000
      ID_PWD  EQU       1001

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.DATA?

   HINSTANCE  DD        ?
    SZBUFFER  DB        256 DUP	(?)

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	子程序声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain	PROTO	:DWORD,:DWORD,:DWORD,:DWORD

.DATA

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;	代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.CODE

     INCLUDE  WIN.ASM

;********************************************************************
            _PROCDLGMAIN  PROC      USES EBX EDI ESI, \
		hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
              LOCAL     @STPOINT:POINT
              LOCAL     @HWINDOW

              MOV       EAX,WMSG
.IF           EAX == WM_CLOSE
              INVOKE    ENDDIALOG,HWND,NULL
              INVOKE    KILLTIMER,HWND,1
.ELSEIF       EAX == WM_INITDIALOG
              INVOKE    _CENTERWINDOW,HWND
              INVOKE    SENDDLGITEMMESSAGE,HWND,ID_PWD,EM_SETREADONLY,TRUE,NULL
              INVOKE    SETWINDOWPOS,HWND,HWND_TOPMOST,0,0,0,0,\
  SWP_NOMOVE  OR        SWP_NOSIZE
              INVOKE    SETTIMER,HWND,1,100,NULL
.ELSEIF       EAX == WM_TIMER
              INVOKE    GETCURSORPOS,ADDR @STPOINT
              INVOKE    WINDOWFROMPOINT,@STPOINT.X,@STPOINT.Y
              MOV       @HWINDOW,EAX
.IF           EAX !=	NULL
              INVOKE    GETWINDOWLONG,@HWINDOW,GWL_STYLE
.IF           (EAX & ES_PASSWORD)
              INVOKE    SENDMESSAGE,@HWINDOW,WM_GETTEXT,255,OFFSET SZBUFFER
              INVOKE    SETDLGITEMTEXT,HWND,ID_PWD,OFFSET SZBUFFER
.ENDIF
.ENDIF
.ELSE
;********************************************************************
;	注意:对话框的消息处理后,要返回 TRUE,对没有处理的消息
;	要返回 FALSE
;********************************************************************
              MOV       EAX,FALSE
              RET
.ENDIF
              MOV       EAX,TRUE
              RET
		
            _PROCDLGMAIN  ENDP
;********************************************************************
      START:
              INVOKE    GETMODULEHANDLE,NULL
              MOV       HINSTANCE,EAX
              INVOKE    DIALOGBOXPARAM,HINSTANCE,DLG_MAIN,NULL,OFFSET _PROCDLGMAIN,0
              INVOKE    EXITPROCESS,NULL

              END       START