木马编程DIY (Delphi版) - 第3篇 星号密码查看工具

2016-08-22 10:17:53来源:http://suguiyang.blog.51cto.com/1035725/272191作者:su_guiyang人点击


星号密码查看工具大家都用过吧,现在我们自己来写个超级简单的。其实密码框是一个Window子窗体,显示星号是因为密码框设置了EM_SETPASSWORDCHAR属性,只要我们把密码框的EM_SETPASSWORDCHAR属性给去掉了,那么密码就会以明文显示出来。我们可以给程序发送消息去掉EM_SETPASSWORDCHAR属性。通过安装鼠标钩子监视鼠标动作,如果用户单击的是密码框那么就发送一个去除密码属性的消息。
本文使用的编程工具为RAD Studio 2007,具体实现步骤和代码如下:
1. 创建一个VCL Application工程,打开Form1.pas文件,加入下面的全局变量和鼠标钩子函数。var
HookHandle: HHOOK;
function HookProc(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
MousePoint: TPoint;
WindowHandle: THandle;
WindowStyle: Longint;
begin
// 获取鼠标位置
GetCursorPos(MousePoint);
// 获取包含鼠标的窗口句柄
WindowHandle := WindowFromPoint(MousePoint);
// 获取窗口风格
WindowStyle := GetWindowLong(WindowHandle, GWL_STYLE);
if TEventMsg(PEventMsg(lParam)^).message = WM_LBUTTONDOWN then
begin
// 是否为密码框
if WindowStyle and ES_PASSWORD <> 0 then
begin
// 去掉密码属性
PostMessage(WindowHandle, EM_SETPASSWORDCHAR, 0, 0);
end;
end;
Result := CallNextHookEx(HookHandle, code, wParam, lParam);
end;
需要注意的是,程序中PostMessage(WindowHandle, EM_SETPASSWORDCHAR, 0, 0);只能使用PostMessage,而不能使用SendMessage代替。
2. 在Form1窗体上放下两个Button控件。并在他的单击事件中加入如下代码:procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, hInstance, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnhookWindowsHookEx(HookHandle);
end;
现在就完工了,打开我们的程序,按下"Button1",再打开需要输入密码的程序试试,是不是以明文显示了?用这个小程序可以搞定系统的密码设置,outlook或防范不严的程序密码,但对有专门防范的程序就不行了,比如新版QQ。
注:如果就“查看星号密码明文”来说,大可不必如此兴师动众。Visual Studio自带的Spy++就可以胜任这个工作。不过文中的HOOK实现还是值得大家一看的。^__^

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台