找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 21340|回复: 21

[原创]关于VB与全局HOOK的看法

[复制链接]

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2005-4-22 12:20:24 | 显示全部楼层 |阅读模式
<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> 1zywFcK1.rar (16.03 KB, 下载次数: 32544)
</P>
[此贴子已经被作者于2005-4-22 12:29:15编辑过]
我就是嗷嗷叫的老马了......

54

主题

345

回帖

0

精华

铂金会员

天马行空

积分
2205
发表于 2005-4-22 12:27:22 | 显示全部楼层
<P>哎 !</P><P>我刚学vb几个星期基本的东西才有个了解</P><P>这么高深的东东 怕是还没能力弄懂,但我相信不久就可以自己弄了!</P><P>对了 </P><P>这个联接地址好象下不了 </P><P>老是提示服务器忙 下不来!</P><P>是不是网站有些东西还没弄好啊???????</P>
爱情是狗屁,不如好好去努力, 享受生活才是快乐的真谛! 本人比较菜,多多指教!

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-4-22 12:29:52 | 显示全部楼层
<P>不好意思,那台电脑今天没有开机,我现在上传到空间里了~~</P><P>可以正常下载! </P>
我就是嗷嗷叫的老马了......

54

主题

345

回帖

0

精华

铂金会员

天马行空

积分
2205
发表于 2005-4-22 13:06:15 | 显示全部楼层
恩 好  谢谢马哥 哈!
爱情是狗屁,不如好好去努力, 享受生活才是快乐的真谛! 本人比较菜,多多指教!

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-4-26 14:58:32 | 显示全部楼层
楼上的朋友,有问题可以单独发帖,不用在这里跟的-----------我们不会嫌帖子多的........
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-5-20 15:13:50 | 显示全部楼层

我是新来的报个到~~~~

<P>但却是很有用的东西。</P>
我就是嗷嗷叫的老马了......

54

主题

345

回帖

0

精华

铂金会员

天马行空

积分
2205
发表于 2005-5-20 18:04:01 | 显示全部楼层
<P>我也不太明白,呵呵~!</P>
爱情是狗屁,不如好好去努力, 享受生活才是快乐的真谛! 本人比较菜,多多指教!

54

主题

345

回帖

0

精华

铂金会员

天马行空

积分
2205
发表于 2005-6-13 03:05:16 | 显示全部楼层
<P>这两天再看这个东西,也在看你的那个包里所谓的钩子  呵呵 </P><P>早日揭开他神秘的面纱!!!!!!</P>
爱情是狗屁,不如好好去努力, 享受生活才是快乐的真谛! 本人比较菜,多多指教!

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-6-24 22:48:10 | 显示全部楼层
<P>这个也是全局的吗?</P><P>以前只是知道可以用HOOK而已.</P><P>其实我也是在想做木马时才去学习HOOK的,呵呵.做完那个木马,我的代码水平提高了不少.</P><P>最后的木马是可以用了,但我最终还是把它收藏起来了.</P>
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-6-28 19:50:33 | 显示全部楼层
<P>我大概查了一下这个函数,觉得使用上还是有问题.</P><P>它的用处其实是用于判断指定的键是否按下,比如在程序启动时如果用户按着F8就会出现启动菜单....(只是个例子....WINDOWS当然不会在那时用这个函数实现此功能的)</P><P>如果用它来记录键盘,我觉得会有CPU占用太高的问题-----毕竟是用的TIMER来拼命地循环.</P>
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-7-23 20:59:10 | 显示全部楼层
<P>呵呵,就怪我太菜了!</P><P>谢谢指点!!</P>
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2005-10-27 16:46:11 | 显示全部楼层
好象不行.....那个组合键的优先级太高了.......
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2006-1-4 20:52:10 | 显示全部楼层
既然你有时间回3个帖子,为什么就没时间看公告或置顶帖呢?????

如果你只是想下载东西,并不需要注册!!

我不想论坛里僵尸账号太多!!!
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2006-1-6 18:57:21 | 显示全部楼层
你怎么不好好看看代码结构呢?
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2006-1-19 19:18:52 | 显示全部楼层
不用向我致敬....应该向代码作者.

其实VB很多东西都可以办到,只是在某些方面,需要使用者拥有更高的水平(比如本例,目前为止我都还不会)

这也是一些人放弃VB的原因.

但我不会放弃VB,同时也会把其它语言学好.

毕竟在一些VB下很不容易实现的东西,使用其它语言也许会有更简单的解决方式.
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2006-3-16 12:11:27 | 显示全部楼层
你也许可以试试系统日志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过程
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2006-12-29 21:28:01 | 显示全部楼层
<p>你要先卸载HOOK</p><p></p><p>另外,调试前最好保存工程</p><p></p><p>点方块是很不好的习惯,最好在程序的代码里处理好,让程序能正常退出.</p>
我就是嗷嗷叫的老马了......

0

主题

4

回帖

0

精华

核心会员

积分
2027
发表于 2007-1-25 08:44:50 | 显示全部楼层
呵呵说的不错

0

主题

4

回帖

0

精华

核心会员

积分
2027
发表于 2007-1-25 08:45:56 | 显示全部楼层
<p>下载不了</p>

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2007-1-25 08:48:36 | 显示全部楼层
<p><strong><font face="Verdana" color="#61b713">chenhui530???</font></strong></p><p>CSDN里的那位朋友吗?</p><p>&nbsp;</p><p>水平很不错的说!!!!欢迎来到寒舍~~~[em01]</p>[em53][em53][em53][em65]
我就是嗷嗷叫的老马了......

0

主题

2

回帖

0

精华

初来乍到

积分
228
发表于 2009-1-20 14:47:02 | 显示全部楼层
<p>学习学习...</p>
前清时期坐过堂,北洋军中扛过枪。武昌城里落过荒,北伐战争帮过忙,南昌外围受过伤,万里长城征翻过墙,敌后战争偷过羊,还有谁能比我强.

6

主题

84

回帖

2

精华

钻石会员

积分
2923
发表于 2011-12-13 16:05:29 | 显示全部楼层
挖坟来了,WH_JOURNALRECORD与WH_JOURNALPLAYBACK很经典,可以做到消息记录与回放,这2个好像是唯一不用做全局dll来实现的全局钩子汗。。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表