VB.net中HOOK的应用(一)

原创 2002年09月24日 09:34:00

VB.netHOOK的应用(一)

 

vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法。小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨。本人水平有限,不免错误与遗漏多多,请朋友们批评指正。

基本的想法是,写一系列的文章,讲解一下vb.netvb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法。如果时间允许,我希望自己能快快开展这个工作。更重要的是网友们的支持与鼓励会是我继续的源动力。

今天是第一次写,不知道从哪开始,权衡再三,决定从API调用问题开始入手。Vb的爱好者经常给我写信或发贴,询问vb.netAPI的变化,那么今天我们就一起来探讨一下。虽然微软推出vs.net的目的是要用于跨平台,那么Windows API是不被推荐使用的,但从此入手,能让我们更方便地理解vb.net所做的改变,所以:

Let’s GO………………………………………………

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.netAPI使用的变化问题。

由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析。

一、先来看一下在vb中是如何实现的。截的是空格键。表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:“HOOK成功!”

1.在一个Module中写入下列代码:

调用的API的申明:

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

函数说明:本函数是用于启动Hook设置。

idHookHook的类型,即处理的消息类型

LpfnHook子程(函数或过程)的地址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的Hook子程。除此以外,lpfn可以指向当前进程的一段Hook子程代码(我们利用的就是这个性质)。

hMod应用程序实例的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL

dwThreadId与安装Hook子程相关联的线程的标识符,如果为0Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的句柄,失败返回NULL

 

Declare Function UnHookWindowsHookEx Lib "user32"  (ByVal hHook As Long) As Long

函数说明:    本函数是解除Hook之用。hHookHook函数的句柄。

 

Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

函数说明:本函数的作用是将当前Hook链中的Hook信息传递给下一个Hook

hHook是当前Hook的句柄,一个应用程序接收这个句柄,作为先前调用SetWindowsHookEx函数的结果。

nCode指的是传递到当前Hook过程的Hook代码,下一个Hook过程使用这段代码去决定如何处理Hook信息。

wParam指传递给当前Hook过程的wParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

lParam指传递给当前Hook过程的lParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

 

2. 定义的常量是:

Public hnextHookproc As Long

Public Const WH_KEYBOARD = 2 这个是表明Hook的种类是键盘Hook

Public Const PM_KEY_SPACE = &H20 空格键

 

3.代码段

Public Sub UnHookKBD()  解键盘HOOK函数

    If hnextHookproc <> 0 Then

       UnHookWindowsHookEx hnextHookproc

       hnextHookproc = 0

    End If

End Sub

 

Public Function EnableKBDHook() 设置键盘HOOK

    If hnextHookproc <> 0 Then

       Exit Function

    End If

    hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _

                MyKBHFunc, App.hInstance, 0)

    If hnextHookproc <> 0 Then

       EnableKBDHook = hnextHookproc

    End If

End Function

 

Public Function MyKBHFunc(ByVal iCode As Long, _

    ByVal wParam As Long, ByVal lParam As Long) As Long

   MyKBHFunc = 0

   If iCode < 0 Then

    MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)

    Exit Function

  End If

If wParam = PM_KEY_SPACE Then  ''偵測 有沒有按到空格鍵

       MyKBHFunc = 1

       加入自己的代码,用于表明响应

    form1.text1.text=”Hook成功!

   End If

End Function

4.Form中的代码很简单:

Private Sub Form_Load()

    Call EnableKBDHook

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

   Call UnHookKBD

End Sub

打完收工!现在在form窗体状态下,敲空格键,就会响应你在MyKBHFunc函数中写的代码了。

(未完待续)

[Win32] API Hook(1)在32位系统上的实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: API Hook技术,虽然很老了,但是依旧是很有用的技术,同时网上的资料往往不能直接拿过...
  • zuishikonghuan
  • zuishikonghuan
  • 2015年08月25日 14:57
  • 3544

HOOK所有程序的MessageBox

这篇文章用到的HOOK代码,跟我的前一篇文章【HOOK API入门之Hook自己程序的MessageBoxW】差不多, 其地址是:http://blog.csdn.net/friendan/artic...
  • friendan
  • friendan
  • 2013年10月01日 22:31
  • 11082

IAT Hook的原理

(PE文件不熟悉,dll注入了,用IAT拦截了,可是具体原理还是不熟悉,收藏资料以备来日复习…… 转载自:http://www.cnblogs.com/71dao/archive/2008/12...
  • BetaBin
  • BetaBin
  • 2013年03月13日 17:06
  • 4376

HOOK钩子机制

最近在看一些编程相关的书籍和资料,知识碰见了,就想把它记下来,以便日后能用的上,也可能只是浅显的概念!可能有错,但是有值得参考的地方,慢慢充电吧! 一、理解:钩子,顾名思义就是钩东西的,...
  • gogoky
  • gogoky
  • 2016年05月03日 20:44
  • 1707

Hook钩子C#实例

一。写在最前 本文的内容只想以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址: http://www.microsoft.com/china/community/p...
  • qq452626100
  • qq452626100
  • 2016年09月01日 13:32
  • 3072

VB与VB.net的区别

概述: VB.NET是基于微软.NET Framework之上的面向对象的编程语言。其在调试时是以解释型语言方式运作,而输出为EXE程序是是以编译型语言方式运作。可以看作是VB在.NetFramewo...
  • wxr15732623310
  • wxr15732623310
  • 2016年01月28日 21:27
  • 1141

vb Hook比较详细的讲解 ---> vb获取按键消息(钩子方式)

Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截、监视、处理。这种技术可以广泛应用于各种软件,尤其是需要有监控、自动记录等对系统进行监测功能...
  • yuli1234147
  • yuli1234147
  • 2016年12月23日 22:31
  • 1759

iOS 逆向-非越狱手机Hook App

引子由于对iOS逆向分析很感兴趣,所以也花了很长一段时间学习了iOS逆向相关知识,并积累了一些相关经验,在越狱设备上成功让我爽了一把,前段时间比较火的微信抢红包功能也是一步一脚印让自己给弄出来了。后来...
  • ChSaDiN
  • ChSaDiN
  • 2016年06月13日 13:52
  • 9115

Android平台的 Ptrace, 注入, Hook 全攻略

Android平台上的Ptrace已经流行很久了,我记得最早的时候是LBE开始使用Ptrace在Android上做拦截,大概三年前我原来的同事yuki (看雪上的古河) 写了一个利用Ptrace注入的...
  • heikefangxian23
  • heikefangxian23
  • 2016年06月03日 16:25
  • 2992

Android so注入( inject)和Hook(挂钩)的实现思路讨论

前面的博客中分析一些Android的so注入和Hook目标函数的代码,它们的实现思路基本是一致的只是在一些细节实现的地方稍有不同。下面的文章中,将前面学习的别人的Android的so注入和目标函数的H...
  • QQ1084283172
  • QQ1084283172
  • 2017年01月07日 22:59
  • 2364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB.net中HOOK的应用(一)
举报原因:
原因补充:

(最多只允许输入30个字)