`
阿尔萨斯
  • 浏览: 4200538 次
社区版块
存档分类
最新评论

Windows文本框星号密码查看器

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

Windows文本框星号密码查看器

本人2002的学习作品

作者:成晓旭

1、 设计原理:注册一个系统级鼠标挂钩,通过监测系统鼠标所在Windows窗口来获取密码,成功获取密码之后,通过发送自定义的Windows系统消息,到宿主程序。

2、 Hook动态链接库设计原理:采用Windows Hook技术[鼠标挂钩],切入远程进程内部,并监测当前系统鼠标所在位置的当然窗口句柄(通过Windows APIWindowFromPoint()),获取窗口句柄之后,判断当然窗口是否为文本框,并进一步判断是否为密码框,当发现是密码输入框时,当此窗口发送WM_GETTEXT消息,获取密码。成功获取密码之后,发现自定义的WM_COPYDATA消息到宿主程序;

具体实现步骤简介:

1. 设置系统鼠标挂钩:

hkMouseHook := SetWindowsHookEx(WH_MOUSE,@CXX_MouseHookProc,hInstance,0);

2. 注销系统鼠标挂钩:

UnHookWindowsHookEx(hkMouseHook);

3. 监测当然窗口及窗口风格判断:

MousePos := pMhs.pt;

wnd := WindowFromPoint(pmhs.pt);

style := GetWindowLong(wnd,GWL_STYLE);

if (style and ES_PASSWORD) = ES_PASSWORD then

begin

//发现密码窗口

end;

4. 向密码框获取密码串:

SendMessage(wnd,WM_GETTEXT,256,Integer(@MouseTitle[0]));

5. 发送自定义消息到宿主程序:

GetMem(pmi,sizeof(TMouseInfo));

pmi.MouseX := pt.X;

pmi.MouseY := pt.Y;

pmi.MouseTitle := pwd;

GetMem(pcds,sizeof(TCopyDataStruct));

pcds.dwData := 9910;

pcds.cbData := sizeof(TMouseInfo);

pcds.lpData := pmi;

SendMessage(hDec,WM_COPYDATA,0,LPARAM(pcds));

3、 宿主程序设计原理:我的宿主程序是自己学习Windows SDK开发时作品,采用纯SDK实现。SDK的编程不用废话了吧。在这个工具程序中,只需要在系统消息处理方法中,增加一个对WM_COPYDATA的拦截及处理过程就可能了。

case uMsg of

WM_COPYDATA:

begin

CXX_ReceiveCopyData(uMsg);

end;

……

end;

4、 应用技术提点:这个是本人在2002年学习Microsoft Windows SDK编程技术时的学习作品。当然,有兴趣的话,你完全可以将其Hook进一步进行隐藏,并为其增加“端口反弹”或者“半连接”功能,宿主程序可以是自己的远程XXXXXX,哈哈,这样发布出来的话,想知道的东西就多了……

5、 完整源码代码:

1. Hook鼠标挂钩部分:

...{
产品名称:Windows 密码工具[Window98
/NT/2000/XP]
功能描述:截取Windows密码编辑框中的密码串
采用纯粹的SDK开发
能捕捉windows98
/NT/2000/XP的密码框中的""密码
开发平台:Windows2000
+Delphi6+MSDN+SDK
开发者:成晓旭
版权所有:成晓旭
模块设计者:成晓旭
设计思路:采用WindowsHook技术[鼠标挂钩],切入远程进程内部,
再发送WM_GETTEXT消息截取密码,最后用SendMessage发送
WM_COPYDATA消息自定义的密码信息结构体到目标窗口,以
显示或处理HookDLL所截取的远程进程的密码.
开始时间:2002年3月4日
完成时间:2002年5月24日[最终实现]
备注:此工具是本人在2002年开发的第二个软件
本工具在2000年6月份左右曾实现过一个Windows98下的
密码截取工具,两年以来,我一直没有放弃过实现Windows
操作系统下的所有密码的截取,如此,终于实现了两年以来
未曾实现的截取WindowsNT系列的密码.[
2002/05/24]
以后的路还很长:WindowNT系列的当前用户登录密码、
内存长驻的其它密码等等.
}

unitMouseHook;

interface
uses
Messages,Windows;
//,SysUtils;

var

hkMouseHook:HHook;
ProcSafelyExit:Pointer;
uCXXMsg:UINT;
procedureDllEntryProc(ul_reason_for_call:DWORD);
procedureSetupHook(fSet:
boolean);stdcall;export;
functionCXX_MouseHookProc(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;export;
procedureAutoUnInstallHook();far;

implementation

usesDataStruct;


procedureCXX_SendCopyData(pt:TPoint;pwd:TMTitle);
var
pcds:PCopyDataStruct;
pmi:PMouseInfo;
hDec:THandle;
begin
hDec:
=Findwindow(Nil,'WM_COPYDATA接收端');
ifhDec=0then
begin
MessageBox(
0,'数据接收窗口没有找到,程序拒绝发送WM_COPYDATA消息!','提示',MB_OKorMB_ICONWARNING);
Exit;
end;
try
GetMem(pmi,sizeof(TMouseInfo));
pmi.MouseX:
=pt.X;
pmi.MouseY:
=pt.Y;
pmi.MouseTitle:
=pwd;
GetMem(pcds,sizeof(TCopyDataStruct));
pcds.dwData:
=9910;
pcds.cbData:
=sizeof(TMouseInfo);
pcds.lpData:
=pmi;
SendMessage(hDec,WM_COPYDATA,
0,LPARAM(pcds));
//PostMessage(hDec,WM_COPYDATA,Handle,LPARAM(pcds));
finally
FreeMem(pmi);
FreeMem(pcds);
end;
end;

functionCXX_MouseHookProc(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;export;
var
pMhs:PMOUSEHOOKSTRUCT;
wnd:HWND;
style:LongInt;
MousePos:TPoint;
MouseTitle:TMTitle;
begin
ifiCode=HC_ACTIONthen
begin
FillChar(MouseTitle,
255,0);
pMhs:
=PMOUSEHOOKSTRUCT(lParam);
MousePos:
=pMhs.pt;
wnd:
=WindowFromPoint(pmhs.pt);
style:
=GetWindowLong(wnd,GWL_STYLE);
if(styleandES_PASSWORD)=ES_PASSWORDthen
begin
SendMessage(wnd,WM_GETTEXT,
256,Integer(@MouseTitle[0]));
//发送截取的信息[]
CXX_SendCopyData(MousePos,MouseTitle);
end;
end;
Result:
=CallNextHookEx(hkMouseHook,iCode,wParam,lParam);
end;

procedureSetupHook(fSet:
boolean);stdcall;export;
begin
iffSetthen
begin
ifhkMouseHook0thenExit;
hkMouseHook:
=SetWindowsHookEx(WH_MOUSE,@CXX_MouseHookProc,hInstance,0);
//ifhkMouseHook0then
//MessageBox(0,'鼠标挂钩安装成功!!!','挂钩提示',MB_ICONINFORMATIONorMB_OK)
//else
//MessageBox(0,'鼠标挂钩安装失败!','挂钩提示',MB_ICONWARNINGorMB_OK);
end
else
begin
ifhkMouseHook0then
begin
UnHookWindowsHookEx(hkMouseHook);
hkMouseHook:
=0;
//ifhkMouseHook=0then
//MessageBox(0,'鼠标挂钩撤消成功!!!','挂钩提示',MB_ICONINFORMATIONorMB_OK)
//else
//MessageBox(0,'鼠标挂钩撤消失败!','挂钩提示',MB_ICONWARNINGorMB_OK);
end;
end;
end;

procedureDllEntryProc(ul_reason_for_call:DWORD);
begin
...{
iful_reason_for_call=DLL_PROCESS_ATTACHthen
begin
MessageBox(
0,'DLL_PROCESS_ATTACH','MouseDllHint',MB_OKorMB_ICONINFORMATION);
//uCXXMsg:=RegisterWindowMessage(SELF_MESSAGE_NAME);

end
elseiful_reason_for_call=DLL_PROCESS_DETACHthen
begin
MessageBox(
0,'DLL_PROCESS_DETACH','MouseDllHint',MB_OKorMB_ICONINFORMATION);
end;
}

end;

procedureAutoUnInstallHook();
begin
ifhkMouseHook0then
SetupHook(False);
ExitProc:
=ProcSafelyExit;
end;

end.









2. 宿主程序部分:

此程序中,还有关于Windows程序资源加载以及窗口背景绘制等技术的演示。

...{
产品名称:Windows 密码工具
功能描述:截取Windows密码编辑框中的密码串
采用纯粹的SDK开发
开发平台:Windows2000
+Delphi6+MSDN+SDK
开发者:成晓旭
版权所有:成晓旭
模块设计者:成晓旭
开始时间:2002年3月4日
完成时间:2002年3月4日
修改时间1:2002年3月4日
备注:此工具是本人在2002年开发的第二个软件,
}


programMouseExe;
uses
Windows,
SysUtils,
Messages,
Tie_In_MHookin
'Tie_In_MHook.pas',
DataStructin
'DataStruct.pas';

...{$RMouseExe.res}
const
CXX_WND_CLASS
='DC_Password';//主窗口类名
CXX_WND_CAPTION='Window2000/XP密码捕捉工具';
CXX_PASSKEY
='chenxiaoxu';
MOUSE_MOVE_TIMER
=WM_USER+9910;
SELF_MESSAGE_NAME
='CXX_Test_Window_Message';
var
hWndMain,
//程序主窗口句柄
hBtnCheck,//程序发送按钮句柄
hBtnClose,//程序关闭按钮句柄
hStcPos,//鼠标位置提示
hStcTitle,//窗口标题提示
hEdtPos,//鼠标当前位置
hEdtTitle://获取窗口标题
LongWord;
hInstMain:integer;
//程序实例句柄
hBGBmp:HBITMAP;//主窗口背景图片句柄
hCur:HICON;
uCXXMsg:UINT;
procedureCXX_SendCopyData();
var
pcds:PCopyDataStruct;
pmi:PMouseInfo;
hDec:THandle;
begin
hDec:
=Findwindow(Nil,'WM_COPYDATA接收端');
ifhDec=0then
begin
MessageBox(hWndMain,
'数据接收窗口没有找到,程序拒绝发送WM_COPYDATA消息!','

',MB_OKorMB_ICONWARNING);
Exit;
end;
//try
GetMem(pmi,sizeof(TMouseInfo));
pmi.MouseX:
=10;
pmi.MouseY:
=50;
pmi.MouseTitle:
='chenxiaoxu';
GetMem(pcds,sizeof(TCopyDataStruct));
pcds.dwData:
=9910;
pcds.cbData:
=sizeof(TMouseInfo);
pcds.lpData:
=pmi;
SendMessage(hDec,WM_COPYDATA,hWndMain,LPARAM(pcds));
//PostMessage(hDec,WM_COPYDATA,Handle,LPARAM(pcds));
//finally
FreeMem(pmi);
FreeMem(pcds);
//end;
end;
procedureCXX_ReceiveCopyData(Msg:TMessage);
var
str:string;
begin
str:
=IntToStr(PMouseInfo(PCOPYDATASTRUCT(Msg.LParam)^.lpData)^.MouseX);
str:
=str+IntToStr(PMouseInfo(PCOPYDATASTRUCT(Msg.LParam)^.lpData)^.MouseY);
end;
//绘制窗口位图背景函数
functionCXX_DrawBGBitmap(fdc:HDC;fBitmap:HBitmap):boolean;
var
hdcMem:HDC;
rect:TRect;
bmp:Bitmap;
x,y:integer;
begin
//bmp:=nil;
Result:=False;
//主窗口背景图片尚未加载,不能绘制窗口背景
iffBitmap=0thenExit;
//获取绘图区域
GetClientRect(hWndMain,rect);
//创建兼容内存设备描述表
hdcMem:=CreateCompatibleDC(fdc);
ifhdcMem=0thenExit;
//设置位图对象
if(GetObject(fBitmap,sizeof(Bitmap),@bmp)=0)thenExit;
//设置内存设备描述表内容
ifNOTBoolean(SelectObject(hdcMem,fBitmap))thenExit;
//绘制窗口背景图片
x:=0;
while(xrect.Right-rect.Left)do
begin
y:
=0;
while(yrect.Bottom-rect.Top)do
begin
BitBlt(fdc,x,y,bmp.bmWidth,bmp.bmHeight,hdcMem,
0,0,SRCCOPY);
y:
=y+bmp.bmHeight;
end;
x:
=x+bmp.bmWidth;
end;
Result:
=DeleteDC(hdcMem);
end;

...{
functionCXX_SetWinCaption():设置窗口对象标题函数
参数定义:
hWnd:窗口对象句柄
pchText:窗口对象标题
}

procedureCXX_SetWinCaption(hWnd:hWND;pchText:PChar);
begin
SendMessage(hWnd,WM_SETTEXT,
0,Integer(pchText));
//SetWindowText(hWnd,pchText);
end;
...{
functionCXX_GetWinCaption():取得按钮标题函数
参数定义:
hWnd:按钮句柄
pchText:按钮标题
}

procedureCXX_GetWinCaption(hWnd:hWND;pchText:PChar);
begin
SendMessage(hWnd,WM_GETTEXT,
255,Integer(pchText));
end;

procedureCXX_MouseMoveTimerProc(hWin:HWND;uMsg:UINT;idEvent:UINT;dwTime:DWORD);
begin
//MessageBox(hWin,'系统时间','提示',0);
end;

functionCXX_SetProgramTimer(fSetTimer:
boolean):boolean;
begin
Result:
=False;
iffSetTimerthen
begin
//ifSetTimer(hWndMain,MOUSE_MOVE_TIMER,3000,@CXX_MouseMoveTimerProc)0then
ifSetTimer(hWndMain,MOUSE_MOVE_TIMER,100,nil)0then
Result:
=True;
end
else
begin
ifKillTimer(hWndMain,MOUSE_MOVE_TIMER)then
Result:
=True;
end;
end;
//主窗口消息回调函数
//functionCXX_MainWindowProc(hWnd,uMsg,wParam,lParam:DWord):LRESULT;stdcall;
functionCXX_MainWindowProc(hWnd:DWord;uMsg:TMessage;wParam,lParam:DWord):LRESULT;stdcall;
var
//pchPassword:PCHAR;
dc:HDC;
ps:PAINTSTRUCT;
begin
...{
ifuMsg=uCXXMsgthen
begin
MessageBox(hWnd,
'自定义消息来了!!!','Hint',0);
MessageBox(hWnd,PChar(lParam),
'消息内容',0);
end;
}

caseuMsgof
WM_COPYDATA:
begin
//MessageBox(hWndMain,'窗口接收WM_COPYDATA消息!','提示',MB_OKorMB_ICONWARNING);
CXX_ReceiveCopyData(uMsg);
end;
WM_CREATE:
begin
uCXXMsg:
=RegisterWindowMessage(SELF_MESSAGE_NAME);
end;
WM_RBUTTONDBLCLK:
//$0206
PostQuitMessage(0);
WM_COMMAND:
//$0111
begin
iflParam=hBtnClosethen
begin
ifMessageBox(hWnd,PChar('确定要退出【'+CXX_WND_CAPTION+'】吗?'),'

',MB_YESNOorMB_ICONQUESTION)=IDYESthen
PostQuitMessage(0);
end
elseiflParam=hBtnCheckthen
begin
//CXX_SetProgramTimer(True);
//PostMessage(HWND_BROADCAST,uCXXMsg,0,0);
//SetupHook(True);
CXX_SendCopyData();
end;
end;
WM_PAINT:
begin
dc:
=BeginPaint(hWnd,ps);
ifNOTCXX_DrawBGBitmap(dc,hBGBmp)then
MessageBox(hWnd,
'绘制主窗口背景失败呢!','提示',MB_OKorMB_ICONWARNING);
end;
WM_DESTROY:
begin
CXX_SetProgramTimer(
false);
Halt;
//$0002:
end;
end;
//EndofCase
Result:=DefWindowProc(hWnd,uMsg,wParam,lParam);
end;

//应用程序实例化
functionCXX_InitInstance():boolean;
var
wndClass:TWndClass;
begin
hInstMain:
=hInstance;
hCur:
=LoadCursor(hInstMain,'HANDLE');
ifhCur=0then
MessageBox(hWndMain,
'加载主窗口背景图片失败!!!','提示',MB_OKor

MB_ICONWARNING)
else
SetCursor(hCur);
hBGBmp:
=LoadBitmap(hInstMain,'BACKBMP');
ifhBGBmp=0then
MessageBox(hWndMain,
'加载主窗口背景图片失败!!!','提示',MB_OKor

MB_ICONWARNING);
wndClass.cbClsExtra:
=0;
wndClass.cbWndExtra:
=0;
wndClass.hInstance:
=hInstMain;
wndClass.hIcon:
=0;
wndClass.hCursor:
=LoadCursor(0,IDC_HAND);
wndClass.hbrBackground:
=CTLCOLOR_EDIT;
wndClass.lpfnWndProc:
=@CXX_MainWindowProc;
wndClass.lpszClassName:
=CXX_WND_CLASS;
wndClass.lpszMenuName:
=nil;
wndClass.style:
=CS_DBLCLKS;
Result:
=Boolean(RegisterClassA(wndClass));
end;
//主程序函数
procedureCXX_RunMainProgram();
var
myMsg:TMsg;
begin
ifNOTCXX_InitInstance()then
Exit;
hWndMain:
=CreateWindowEx(WS_EX_CLIENTEDGEorWS_EX_TOPMOST,
CXX_WND_CLASS,CXX_WND_CAPTION,
WS_VISIBLEorWS_SYSMENUorWS_MINIMIZEBOX,
0,0,320,150,0,0,hInstMain,nil);
hStcPos:
=CreateWindowEx(0,'static','鼠标位置:',
WS_VISIBLEORWS_CHILD,
5,10,80,20,
hWndMain,
0,hInstMain,nil);
hEdtPos:
=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','',
WS_VISIBLEORWS_CHILD,
100,10,200,20,
hWndMain,
0,hInstMain,nil);
hStcTitle:
=CreateWindowEx(0,'static','获取密码:',
WS_VISIBLEORWS_CHILD,
5,50,80,20,
hWndMain,
0,hInstMain,nil);
hEdtTitle:
=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','',
WS_VISIBLEORWS_CHILD,
100,50,200,20,
hWndMain,
0,hInstMain,nil);
hBtnCheck:
=CreateWindowEx(WS_EX_STATICEDGEorWS_EX_CLIENTEDGE,'Button','发送消息',
WS_VISIBLEORWS_CHILD,
10,85,100,30,
hWndMain,
0,hInstMain,nil);
hBtnClose:
=CreateWindowEx(WS_EX_STATICEDGEorWS_EX_CLIENTEDGE,'Button','退出程序',
WS_VISIBLEORWS_CHILD,
180,85,100,30,
hWndMain,
0,hInstMain,nil);
//主程序函数循环
while(GetMessage(myMsg,hWndMain,0,0))do
begin
TranslateMessage(myMsg);
DispatchMessage(myMsg);
end;
end;

begin
CXX_RunMainProgram();
end.



分享到:
评论

相关推荐

    星号密码查看器-查看文本框中的星号密码

    星号密码查看器星号密码查看器星号密码查看器星号密码查看器

    星号密码查看器,显示星号密码

    用来查看带有PASSWORD属性的密码的文本框,好用

    Windows输入框密码查看器(支持Foxmail等各类软件,有使用教程)

    本软件支持windows大部分软件密码输入框星号密码查看 忘记密码时可以通过本软件获取明文 亲测支持Foxmail7 带使用教程,欢迎下载!

    星号密码查看器,VB开发的源程序免费放出.rar

    VB星号密码查看器的源程序,使用时只需把眼睛图标拖动到密码框 ***的地方,程序会自动获得句柄,并在主窗体中显示出密码。研究本程序你会了解到一些相关的知识点,比如将客户坐标转化为屏幕坐标并显示在PointText...

    最新最好的星号密码查看器

    最小最好的密码查看器,只需将鼠标放到文本框内,既可显示你所要的数据

    星号密码查看器

    您好 您可以使用该软件查看到任何带有星号密码的文本框的密码 欢迎使用

    VB慧眼识星,*号密码查看器的源程序

    VB慧眼识星,*号密码查看器的源程序 VB慧眼识星,*号密码查看器的源程序,使用时只需把眼睛图标拖动到密码框 ***的地方,程序会自动获得句柄,并在主窗体中显示出密码。研究本程序你会了解到一些相关的知识点,比如...

    CoralSpy 星号 密码查看器

    亲测foxmail的企业邮箱是可以识别出密码的,foxmail绑定的163邮箱查不出来。 拖动光标到密码文本框即可识别。

    星号Password查看器.rar

    可以查看星号文本框中的密码。 绝对绿色,放心使用。

    强力星号密码查看器

    下载完成后我们运行压缩包里bin文件夹中的X-Pass.exe。来到服务的登录页面,将X-Pass软件界面中的X图标用鼠标左键拖动到星号密码处,在软件下方的文本框中就会显示真实的密码了。

    *号查看器v0.11

    hwnd = CreateWindowEx(WS_EX_TOPMOST, szAppName, TEXT("*号查看器"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, ...

    便携式单文件七宝工具箱 小巧却强大 密码显示精灵 颜色查看器 分析程序缺失文件 远程登录 高速图片ACD 自动化工作 端口查询

    1.showpass.exe 密码显示精灵,运行后将鼠标移动到一些带星号密码的文本框上,本软件的标题栏上会显示出该密码。可做为忘记密码后找回的功能 2.GetColor.exe 屏幕颜色查看器,按住吸管能获得当前吸管尖端的颜色 3....

    天琼浏览器_E书制作工具_日记加密

    用此方法也能破解星号密码。(如果该文本是HTML文档则无效)如果这个办法不灵,您可以先把鼠标移到文本的最上方,然后按下鼠标左键拖到文本的最后一行,再松开鼠标,再将其拖到天琼Explorer的文本框里(需先新建一个...

    iSee视频监控 v5.2

    本系统软件属于我公司专有产品,未经同意,请勿复制,否则影响机 器稳定概不负责,并将通过有关法律渠道追究盗版责任。 功能特点(H.264压缩) 压缩方式:H.264/MPEG 4; 显示分辨率:1024_768、1280_...

    Access+2000中文版高级编程

    14.3 用ListView控件仿效Windows 95的资源管理器 443 14.3.1 查看ListView控件的不同视图 443 14.3.2 查看ListView控件的主要属性组 444 14.3.3 人工设置ListView控件 445 14.3.4 使用VBA创建和填充ListView...

    Access 2000中文版高级编程(part1)

    14.3 用ListView控件仿效Windows 95的资源管理器 443 14.3.1 查看ListView控件的不同视图 443 14.3.2 查看ListView控件的主要属性组 444 14.3.3 人工设置ListView控件 445 14.3.4 使用VBA创建和填充ListView控件...

    《程序天下:JavaScript实例自学手册》光盘源码

    3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器中是否包含特殊字符 3.10 判断文本中回车的数量...

    程序天下:JavaScript实例自学手册

    3.3 文字过长的省略号 3.4 输出26个英文字母 3.5 首字母变为大写 3.6 textarea自适应文字行数 3.7 禁止文本框的拷贝和粘贴 3.8 控制两个文本框只输其一 3.9 判断编辑器中是否包含特殊字符 3.10 判断文本中回车的数量...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例006 编程输出星号组成的等腰三角形 9 1.2 开发工具 11 实例007 下载最新的Eclipse 11 实例008 为最新的Eclipse安装中文语言包 12 实例009 活用Eclipse的工作空间 14 实例010 在Eclipse项目中编程输出字符表情 15...

Global site tag (gtag.js) - Google Analytics