VB6的HOOK技术

代码背景,自身程序的窗口上有一个TextBox,Hook住WH_CALLWNDPROC用来截获EN_CHNAGE即文本变更的消息。

*这个其实用SetWindowLong和CallWindowProc也能做到,原理是一样的就是预处理窗口消息。

Form1.frm

Private Sub Command1_Click()
    hHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf CallBackHookProc, App.hInstance, App.ThreadID)
    Debug.Print hHook
End Sub

Private Sub Command2_Click()
    Call UnhookWindowsHookEx(hHook)
End Sub

Module1.bas

Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
    ByVal nCode As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, _
    Source As Any, _
    ByVal Length As Long)
Public Const WH_CALLWNDPROC = 4
Public Const WM_COMMAND = &H111
Public Const EN_CHANGE = &H300
Public Type CWPSTRUCT
        lParam As Long
        wParam As Long
        message As Long
        hwnd As Long
End Type
Public Const HC_ACTION = 0
Public hHook As Long

Public Function CallBackHookProc(ByVal nCode As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

    If nCode = HC_ACTION Then
        Dim Msg As CWPSTRUCT
        Call CopyMemory(Msg, ByVal lParam, Len(Msg))
        If Msg.message = WM_COMMAND Then
            If (Msg.wParam And &HFFFF0000) / &H10000 = EN_CHANGE Then
                Debug.Print "GOTCHA"
            End If
        End If
    End If

    CallBackHookProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function

运行代码,点击Command1后挂载HOOK,当TextBox里的文本改变时,会打印出“GOTCHA”。

由于,我窗体上只有一个TextBox是Edit控件,所以我在代码中就没有判断消息源(hwnd)是不是TextBox。

时间: 2024-08-29 13:10:26

VB6的HOOK技术的相关文章

API HOOK技术

API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技术,但是计算机病毒经常使用这个技术来达到隐藏自己的目的. 外文名 API HOOK      用于 改变API执行结果的技术 应用 如Windows兼容模式等  目的 计算机病毒隐藏自己的技术                                                      

Hook技术

[Hook技术] 1.Inline Hook. 2.IAT(导入表) Hook. 3.windows钩子函数. 常用函数包括:SetWindowsHookEx().CallNextHookEx().UnhookWindowsHookEx(). Hook技术,码迷,mamicode.com

Android Art Hook 技术方案

Android Art Hook 技术方案 by 低端码农 at 2015.4.13 www.im-boy.net 0x1 开始 Anddroid上的ART从5.0之后变成默认的选择,可见ART的重要性,目前关于Dalvik Hook方面研究的文章很多,但我在网上却找不到关于ART Hook相关的文章,甚至连鼎鼎大名的XPosed和Cydia Substrate到目前为止也不支持ART的Hook.当然我相信,技术方案他们肯定是的,估计卡在机型适配上的了. 既然网上找不到相关的资料,于是我决定自己

程序破解之 API HOOK技术 z

API HOOK,就是截获API调用的技术,在程序对一个API调用之前先执行你的函数,然后根据你的需要可以执行缺省的API调用或者进行其他处理,假设如果想截获一个进程对网络的访问,一般是几个socket API : recv,recvfrom, send, sendto等等,当然你可以用网络抓包工具,这里只介绍通过API HOOK的方式来实现, 主要原理是在程序运行中动态修改目标函数地址的内存数据,使用jmp语句跳转到你的函数地址,执行完后再恢复内存数据, 汇编代码是: mov eax, pNe

HOOK技术演示

一.首先创建一个dll工程,取名为KeyboardHookDll,代码如下: // KeyboardHookDll.cpp : 定义 DLL 应用程序的导出函数.//#include "stdafx.h"#include <iostream>using namespace std;#define MYAPI extern "C" _declspec(dllexport)  //导出函数声明HHOOK hHook = NULL;LRESULT CALLBA

android 5 HOOK 技术研究之 ADBI 项目

简介 adbi 是一个android平台的二进制注入框架,源码开放在github上 :  ADBI 项目 ,从hook技术的分类来说,其属于so注入+inline hook, 这种方式的套路是:基于linux系统的ptrace机制,attach一个目标进程,注入一个动态链接库进入目标进程的地址空间,然后用so里边的函数地址替换目标进程地址空间里原有的函数地址(老的函数地址一般也需要保存起来). 源码目录 hijack:  可执行程序,用于注入一个so到目标进程 libbase:  注入库,提供h

Android逆向分析之Xposed的hook技术

Android逆向工程里常用到的工具除了的dex2jar,jd-gui,  Apktool之外还有一个Xposed. 这个工具是一个在不修改APK的情况下,影响其运行过程的服务框架.可以根据自己的需求编写模块,让模块控制目标应用的运行. 因为本人也是新手,对于Xposed用法还有很多的不熟悉,所以只对其hook技术进行简单的介绍,并让hook技术应用到以后的逆向分析工程中. 至于什么是hook,不了解的话就先去百度一下,这里基于菜鸟有限的经验,我只能说是一种函数拦截技术~ 首先,下载Xposed

HOOK技术2_Detour+API拦截技术

最近公司做一个远程桌面控制的软件,其中用到了API hook的技术,由于之前没有接触过此类技术,刚刚开始的时候就想按照<Windows核心编程>中介绍的修改IAT表的方法实现API hook,但是项目中的一个工程中需要创建第三方的工具的进程,此种方法可以注入现有的工程,但是第三方工具我没有源代码,由于时间仓促对此种方法的hook理解不深,发现此种方法不能够实现注入CreateProccess启动的进程,有天下班和同事吃饭,给他说起这方面的问题,他正好以前做过此类的项目,他给我推荐了微软的det

HOOK技术1_注入

拦截win32 API 调用对于多数w indows开发人员来说都一直是很有挑战性的课题,我承认,这也是我感兴趣的一个课题.钩子机制就是用一种底层 技术控制特定代码段的执行,它同时提供了一种直观的方法,很容易就能改变操作系统的行为,而并不需要涉及到代码.这跟一些第三方产品类似.     许多系统都通过拦截技术(spying techniques)利用现有windows应用程序.而拦截的一个重要目的,并不只是为应用程序提供更高级功能,而是为完成调试.     与 老式操作系统(如dos,win3.