[原创]关于VB与全局HOOK的看法
<P>大概在四五年前,偶还是一只小小菜青虫时,便在网上听说了一句"名言":VB是不可能独立做出全局HOOK的!
对于当时的我来说,HOOK是个虾米东东都不知道,所以也没去管,学!~~~
直到有一天,我决定做一个木马时,才发现,好象只用VB是无法记录键盘鼠标的....因为以上的"名言"!!!
当时的木马是使用一个别人做的DLL来工作的(是用汇编语言做的,偶自己改了一下HOOK类型).后来,木马制作相当成功,可以拦截到所有的键盘鼠标动作,并采用了本人独创的(应该是"独创"的吧??偶还没有见到过类似的木马)时间轴定位方法,使任何键盘与鼠标的操作都可以重现,并与当时的工作焦点相结合,使任何操作都难逃"法"眼("贼"眼也许合适点....).经过自己的使用,觉得相当不错!!
但在后来的某一天的某一论坛上,我发现有人使用VB本身的功能就完成了全局HOOK,于是便立刻当下来学习.
经过分析,发现程序基本是MS所说的DLL式HOOK的标准应用!只是,这些标准的应用是在ActiveX DLL上实现的!
当时偶差点晕了,不是有人说过,"VB是不可能独立做出全局HOOK"吗??-------等一下!!仔细想想,在听到那句话时,我真的从来都没有去怀疑过它的真假,因为我当时根本就不懂.现在,让我自己来找找答案吧!!
当下新建一ADLL工程,做好类的事件接口,并把HOOK过程放在一个标准模块里,编译,生成.
再建立一EXE工程,引用DLL,编写简单的代码,OK,编译,运行,按按键,动鼠标................晕,真的可以呀!!!
回头想想,其实是自己的鼻子让人牵着走了N年....不过,这下也让我知道了一句话的重要性:
<B>学习WHY,而不是学习HOW!</B>
很多东西,其实自己就可以搞明白的.
最后,也附上代码,让大家看看,VB是如何独立做到全局HOOK的:
http://m5home.vicp.net:85/pubfile/m5/Hook.rar</P>
<P>
</P>
[此贴子已经被作者于2005-4-22 12:29:15编辑过] <P>哎 !</P><P>我刚学vb几个星期基本的东西才有个了解</P><P>这么高深的东东 怕是还没能力弄懂,但我相信不久就可以自己弄了!</P><P>对了 </P><P>这个联接地址好象下不了 </P><P>老是提示服务器忙 下不来!</P><P>是不是网站有些东西还没弄好啊???????</P> <P>不好意思,那台电脑今天没有开机,我现在上传到空间里了~~</P><P>可以正常下载! </P> 恩 好谢谢马哥 哈! 楼上的朋友,有问题可以单独发帖,不用在这里跟的-----------我们不会嫌帖子多的........
我是新来的报个到~~~~
<P>但却是很有用的东西。</P> <P>我也不太明白,呵呵~!</P> <P>这两天再看这个东西,也在看你的那个包里所谓的钩子呵呵 </P><P>早日揭开他神秘的面纱!!!!!!</P> <P>这个也是全局的吗?</P><P>以前只是知道可以用HOOK而已.</P><P>其实我也是在想做木马时才去学习HOOK的,呵呵.做完那个木马,我的代码水平提高了不少.</P><P>最后的木马是可以用了,但我最终还是把它收藏起来了.</P> <P>我大概查了一下这个函数,觉得使用上还是有问题.</P><P>它的用处其实是用于判断指定的键是否按下,比如在程序启动时如果用户按着F8就会出现启动菜单....(只是个例子....WINDOWS当然不会在那时用这个函数实现此功能的)</P><P>如果用它来记录键盘,我觉得会有CPU占用太高的问题-----毕竟是用的TIMER来拼命地循环.</P> <P>呵呵,就怪我太菜了!</P><P>谢谢指点!!</P> 好象不行.....那个组合键的优先级太高了....... 既然你有时间回3个帖子,为什么就没时间看公告或置顶帖呢?????如果你只是想下载东西,并不需要注册!!
我不想论坛里僵尸账号太多!!! 你怎么不好好看看代码结构呢? 不用向我致敬....应该向代码作者.
其实VB很多东西都可以办到,只是在某些方面,需要使用者拥有更高的水平(比如本例,目前为止我都还不会)
这也是一些人放弃VB的原因.
但我不会放弃VB,同时也会把其它语言学好.
毕竟在一些VB下很不容易实现的东西,使用其它语言也许会有更简单的解决方式. 你也许可以试试系统日志HOOK,它会把当前活动窗口,及此窗口的一些信息都拦截下来(比如创建,激活,销毁等),这样你就可以处理了.
以下是我转的HOOK类型,你可以参考一下:
HOOK类型
WH_CALLWNDPROC 和 WH_CALLWNDPROCRET HOOK
WH_C ALLWNDPROC 和WH_CALLWNDPROCRET HOOK可以监视SendMessage发送的消息。系统在向窗体过程发送消息前,将调用WH_CALLWNDPROC;在窗体过程处理完该消息后系统将调用WH_CALLWNDPROCRET。
WH_CALLWNDPROCRET HOOK会向HOOK过程传送一个CWPRETSTRUCT结构的地址。该结构包含了窗体过程处理系统消息后的一些信息。
WH_CBT Hook
系统在激活,创建,消毁,最小化,最大化,移动,改变窗体前;在完成一条系统命令前;在从系统消息队列中移去鼠标或键盘事件前;在设置输入焦点前,或同步系统消息队列前,将调用WH_CBT HOOK。你可以在你的HOOK 过程拦截该类HOOK,并返回一个值,告诉系统,是否继续执行上面的操作。
WH_DEBUG HOOK
系统在调用与某种HOOK类型联系的HOOK过程前,将调用WH_DEBUG ,应用程序可以使用该HOOK决定是否让系统执行某种类型的HOOK。
WH_FOREGROUNDIDLE Hook
系统在空闲时调用该HOOK,在后台执行优先权较低的应用程序。
WH_GETMESSAGE Hook
WH_GETMESSAGE Hook使应用程序可以拦截GetMessage 或 PeekMessage的消息。应用程序使用WH_GETMESSAGE HOOK监视鼠标、键盘输入和发送到队列中的其它消息。
WH_JOURNALRECORD Hook
WH_JOURNALRECORD Hook使应用程序可以监视输入事件。典型地,应用程序使用该HOOK记录鼠标、键盘输入事件以供以后回放。该HOOK是全局HOOK,并且不能在指定线程中使用。
WH_JOURNALPLAYBACK Hook
WH_JOURNALPLAYBACK Hook使应用程序可以向系统消息队列中插入消息。该HOOK可以回放以前由WH_JOURNALRECORD HOOK录制的鼠标、键盘输入事件。在WH_JOURNALPLAYBACK Hook安装到系统时,鼠标、键盘输入事件将被屏蔽。该HOOK同样是一个全局HOOK,不能在指定线程中使用。
WH_JOURNALPLAYBACK Hook返回一个时间暂停值,它告诉系统,在处理当前回放的消息时,系统等待百分之几秒。这使得此HOOK可以控制在回放时的时间事件。
WH_KEYBOARD Hook
WH_KEYBOARD Hook使应用程序可以监视由GetMessage和PeekMessage返回的WM_KEYDOWN 及WM_KEYUP消息。应用程序使用该HOOK监视发送到消息队列中的键盘输入。
WH_MOUSE Hook
WH_MOUSE Hook 使应用程序可以监视由GetMessage和PeekMessage返回的消息。应用程序使用该HOOK监视发送到消息队列中的鼠标输入。
WH_MSGFILTER and WH_SYSMSGFILTER Hooks
WH_MSGFILTER 和WH_SYSMSGFILTER Hooks使应用程序可以监视菜单、滚动条、消息框、对话框,当用户使用ALT+TAB或ALT+ESC来切换窗体时,该HOOK也可以拦截到消息。WH_MSGFILTER仅在应用程序内部监视菜单、滚动条、消息框、对话框,而WH_SYSMSGFILTER则可以在系统内监视所有应用程序的这些事件。
WH_SHELL Hook
一个SHELL程序可以使用WH_SHELL Hook来接收重要的信息。当一个SHELL程序被激活前或当前窗体被创建、消毁时,系统会调用WH_SHELL Hook过程 <p>你要先卸载HOOK</p><p></p><p>另外,调试前最好保存工程</p><p></p><p>点方块是很不好的习惯,最好在程序的代码里处理好,让程序能正常退出.</p> 呵呵说的不错 <p>下载不了</p> <p><strong><font face="Verdana" color="#61b713">chenhui530???</font></strong></p><p>CSDN里的那位朋友吗?</p><p> </p><p>水平很不错的说!!!!欢迎来到寒舍~~~</p> <p>学习学习...</p> 挖坟来了,WH_JOURNALRECORD与WH_JOURNALPLAYBACK很经典,可以做到消息记录与回放,这2个好像是唯一不用做全局dll来实现的全局钩子汗。。。
页:
[1]