钩子程序是什么东西
木马钩子其实也是一个dll文件,这个东东讲起来比较麻烦。
我尽量说简单点。
dll文件叫动态链接库文件,系统正常运行需要调用一些程序就是通过dll文件里的函数来执行的,一个正常运行的系统进程会调用许多的dll文件,而这些dll文件在系统用到某些功能时还会调用其它的dll文件。
木马钩子就是这样一种dll文件,通过其内置的函数,使系统进程认为这个dll文件是个正常的需要调用的dll,然后再通过这个dll来启动木马。
这就有点象使用钩子一样,先钩住挂靠再贴上去。
------说得不是很贴切。
关于VB编程中钩子代码?
最上面添加两个api声明
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
另外
Address of 改为Addressof
Call Unhook WindowsHookEx(hHook) 改为Call UnhookWindowsHookEx(hHook)c#写钩子程序
C#写HOOK还是延续WINDOWS HOOK的思路的,使用标准的API :SetWindowHookEx....思路很简单:写个类自己定义一个钩子事件然后再自己程序中调用,下面是我以前写的一个NET HOOK框架,网上相关资源也是很多的======================================写多了其他语言实现的HOOK,突然很想写个不一样的,想来想去Net HOOK是最合适的了使用的方法还是传统的 Gui‘Thread Hook : SetWindowsHookEx/CallNextHookExHOOK -- 拦截,一种改变程序执行流程的技术手段,这里我不想过多的去谈如果去改变
一个程序的执行流程只是简单的演示下,如何实现一个HOOK在Net里面实现挂钩和在其他语言实现虽然在本质上是相同的,但细节上却是有点不同的
NET 采用的是事件驱动(消息机制的封装版),所有要实现一个消息的拦截,你必须实现
一个事件,而该事件的作用就是接受和处理
=======================================
1。
开始我们定义一个基础类,实现一些基本的方法和变量
namespace Mr.Krcl.BaseHookLibrary
{
/*
hook library
by Mr.krcl 283018011
2010-5-12 BMD
: 这里给出的只是一个NET HOOK 模型 并未完全实现功能 */
// =================================================================
// 事件参数类
public class HookEventArgs: EventArgs
{
//根据需要你可以添加变量或函数实现功能的扩展
}
// ==================================================================
// 挂钩的消息类型,具体查阅MSDN
public enum HookType : int
{
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
}
// ====================================================================
// 导出API : 最烦人的工作了,不像C/C++其他语言直接调用头文件就OK
[DllImport("user32.dll")]
protected static extern IntPtr SetWindowsHookEx(HookType code,
HookProc func,
IntPtr hInstance,
int threadID);
[DllImport("user32.dll")]
protected static extern int UnhookWindowsHookEx(IntPtr hhook);
[DllImport("user32.dll")]
protected static extern int CallNextHookEx(IntPtr hhook,
int code, IntPtr wParam, IntPtr lParam);
// ====================================================================
// HOOK基类
public abstract class BaseHookLib:IDisposable{
// 事件委托 + 回调函数委托
public delegate CallBackHookProc(int nCode , IntPtr wparam ,IntPtr lparam) ;
public delegate HookEventHandler(object sender , HookEventArgs e);
public event HookEventHandler InvokeHook ;
// 构造函数
public BaseHookLib(HookType hType)
{
_hookType = hType ;
}
public BaseHookLib(HookType hType , CallBaseHookProc proc)
{
_hookType = hType ;
callBackFun = proc ;
}
// 内部变量
protected IntPtr _hhook = IntPtr.Zero;
// 判断系统是否已经加载HOOK
protected bool _isHook = false ;
// 回调函数
protected CallBackHookProc callBackFun ;
// 挂钩消息的类型
protected HookType _hookType ;
public bool IsHook{
get {
return _isHook;
}
}
// 引发时间
protected void OnHook(HookEventArgs e)
{
if(InvokeHook != null) InvokeHook(this , e);
}
// 钩子回调函数
protected int CallBackFunction(int nCode ,IntPtr wParam , IntPtr lparam)
{
if( nCode < 0) return CallNextHookEx(_hhook , nCode , wParam ,lparam);
// 事件参数类实例化
HookEventArgs e = new HookEventArgs(....) ;
OnHook(e) ;
// ...............
// 这里可以做你想做的,作为基类我们总是直接返回
// ................
return CallNextHookEx(_hhook,nCode ,wParam ,lparam);
}
// 安装钩子
protected void InstallHook()
{
_hhook = SetWindowsHookEx(_hookType ,callbackFun ,
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),,
0/*(int) AppDomain.GetCurrentThreadId()*/);
_hook = true ;
}
// 卸载钩子
protected void UnInstallHook()
{
UnhookWindowsHookEx(_hhook);
_hhook = IntPtr.Zero;
_hook = false ;
}
// =============================================================================
//
// 继承IDisposable接口的目的在于实现Dispose方法 ,该接口继承可在派生类中实现继承
//
// =============================================================================
}现在我们需要做的就是关键步骤的了实现一个鼠标的HOOK类,该类从BaseHookLib中派生
namespace Mr.Krcl.BaseHookLibrary
{
// 鼠标时间参数类
public class MouseHookEventArgs{
/*
这里你可以通过添加任何可用的成员变量或方法来实现该类的扩展
当然你也可以同对MouseEventArgs类的继承来扩展,例如:
public class MouseHookEventArgs : MouseEventArgs{
...
}
*/
}
// =================================================================================
// 定义鼠标时间委托
// 委托的形式是可变的,这里我们遵循原始的鼠标委托写法
// public delegate void MouseEventHandler(object sender ,MouseEventArgs e)
public delegate void MouseHookEventHandler(object sender,MouseHookEventArgs e);
// =================================================================================
// 主打类 MouseHookLib
// 因为我们要继承BaseHookLib所有我们这里就不需要在进程IDISxxx接口了
public class MouseHookLib
{
// 构造函数
// HOOK鼠标消息的类型由基类负责传递,利用C#构造函数层分布特点
public MouseHookLib():base(HookType.WH_MOUSE_LL){
callBackFun = new CallBackHookProc(MouseHookCallBackFunction);
}
public MouseHookLib():base(HookType.WH_MOUSE_LL,new CallBackHookProc(MouseHookCallBackFunction){
}
// 析构函数
// 作用通过调用重载的Dispose函数卸载钩钩
~MouseHookLib(){
Dispose(false);
}
// 实现Dispose方法
// 如果你在基类已经实现了改方法那么,这里你需要采用重载方式实现,或者直接基类该方法
// 这里假设积累没有实现该方法
protected void Dispose( bool disposing )
{
if ( IsInstalled )
Uninstall(); if ( disposing )
GC.SuppressFinalize( this );
}
public void Dispose()
{
Dispose( true );
}
/* 积累实现该方法后本类的重载实现
public override void Dispose( bool disposing )
{
if ( IsInstalled )
Uninstall(); if ( disposing )
GC.SuppressFinalize( this );
}
*/
// 事件
// 定义了时间和事件的触发方法
// 单独的定义事件是毫无意义的
// 这里我们以定义两个事件MouseDown ,MouseMove为例,具体根据自己的需要,方法是相同
public event MouseHookEventHander MouseMove ;
public void OnMouseMove(MouseHookEventArgs e)
{
if(MouseMove != null){
MouseMove(this , e);
}
}
public event MouseHookEventHander MouseDown ;
public void OnMouseMove(MouseHookEventArgs e)
{
if(MouseDown != null){
MouseDown(this , e);
}
}
// 鼠标钩子回调函数
public IntPtr MouseHookCallBackFunction(int nCode , IntPtr wParam , IntPtr lparam)
{
if( nCode < 0 ) return CallNextHookEx(_hhook , nCode ,wParam ,lParam);
MouseHookEventArgs e = new MouseHookEventArgs(.....) ;
/*
这里可以根据你自己的需要对拦截的消息进行过滤或者获取你自己需要的信息
例如:
if ( code == Win32.HC_ACTION ){
switch ( wParam.ToInt32() )
{
case Win32.WM_MOUSEMOVE:
OnMouseMove( e );
break;
case Win32.WM_LBUTTONDOWN:
case Win32.WM_RBUTTONDOWN:
case Win32.WM_MBUTTONDOWN:
case Win32.WM_XBUTTONDOWN:
OnMouseDown( e );
break;
}
}
这里只是一个模型 ,具体需要具体实现,关键就是根据lparam和wparam参数来实现事件的激活
从而调用事件,对目标消息进行拦截
*/
return CallNextHookEx(_hhook , nCode ,wParam ,lParam);
}
}
}SVN钩子程序如何写,新手入门,完全不懂,从零开始
如果服务器端是windows环境的话,那么钩子实际就是批处理文件(扩展名bat)
这些钩子都存放在服务器端的hooks文件夹内,比较常用的钩子包括mit.tmpl、mit.tmpl等,mit.tmpl是当服务器端接收mit请求的时候自动调用这个钩子,mit.tmpl是当完mit操作的时候服务器端自动调用这个钩子,在windows环境下钩子程序的扩展名要改成bat,而不能用tmpl
至于钩子的内容,就看自己的发挥了,你需要熟悉DOS批处理文件的编写技巧,常见的应用比如:mit完成后,自动调用钩子程序,通过svn update命令,将最新版本发布到服务器上的测试环境中钩子程序的常用类型
WH_CALLWNDPROC
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks
WH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。
系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子程。
WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子程。
CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。
WH_CBT Hook
在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:
1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
2. 完成系统指令;
3. 来自系统消息队列中的移动鼠标,键盘事件;
4. 设置输入焦点事件;
5. 同步系统消息队列事件。
Hook子程的返回值确定系统是否允许或者防止这些操作中的一个。
WH_DEBUG Hook
在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUG Hook子程。
你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程。
WH_FOREGROUNDIDLE Hook
当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。
当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子程。
WH_GETMESSAGE Hook
应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。
你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息。
WH_JOURNALPLAYBACK Hook
WH_JOURNALPLAYBACK Hook使应用程序可以插入消息到系统消息队列。
可以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。
只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。
WH_JOURNALPLAYBACK Hook是全局Hook,它不能象线程特定Hook一样使用。
WH_JOURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。
这就使Hook可以控制实时事件的回放。
WH_JOURNALPLAYBACK是system-wide local hooks,它们不会被注射到任何行程位址空间。
(估计按键精灵是用这个hook做的)
WH_JOURNALRECORD Hook
WH_JOURNALRECORD Hook用来监视和记录输入事件。
典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。
WH_JOURNALRECORD Hook是全局Hook,它不能象线程特定Hook一样使用。
WH_JOURNALRECORD是system-wide local hooks,它们不会被注射到任何行程位址空间。
WH_KEYBOARD Hook
在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息,这些消息通过GetMessage or PeekMessage function返回。
可以使用这个Hook来监视输入到消息队列中的键盘消息。
WH_KEYBOARD_LL Hook
WH_KEYBOARD_LL Hook监视输入到线程消息队列中的键盘消息。
WH_MOUSE Hook
WH_MOUSE Hook监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息。
使用这个Hook监视输入到消息队列中的鼠标消息。
WH_MOUSE_LL Hook
WH_MOUSE_LL Hook监视输入到线程消息队列中的鼠标消息。
WH_MSGFILTER / hooks
WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks
WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。
WH_MSGFILTER Hook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子程的应用程序建立的对话框的消息。
WH_SYSMSGFILTER Hook监视所有应用程序消息。
WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息。
通过调用CallMsgFilter function可以直接的调用WH_MSGFILTER Hook。
通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。
WH_SHELL Hook
外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。
当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL Hook子程。
WH_SHELL 共有5钟情况:
1. 只要有-level、unowned 窗口被产生、起作用、或是被摧毁;
2. 当Taskbar需要重画某个按钮;
3. 当系统需要显示关于Taskbar的一个程序的最小化形式;
4. 当目前的键盘布局状态改变;
5. 当使用者按Ctrl+Esc去执行Task Manager(或相同级别的程序)。
按照惯例,外壳应用程序都不接收WH_SHELL消息。
所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo function注册它自己。
vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。致力于全球服务器租用、托管及云计算、DDOS安 全防护、数据实时存储、 高防服务器加速、域名、智能高防服务器、网络安全服务解决方案等领域的智 能化、规范化的体验服务。所有购买年付产品免费更换香港原生IP(支持解锁奈飞),商家承诺,支持3天内无条件退款(原路退回)!点击进入:vollclo...
百纵科技官网:https://www.baizon.cn/百纵科技:美国云服务器活动重磅来袭,洛杉矶C3机房 带金盾高防,会员后台可自助管理防火墙,添加黑白名单 CC策略开启低中高.CPU全系列E52680v3 DDR4内存 三星固态盘列阵。另有高防清洗!美国洛杉矶 CN2 云服务器CPU内存带宽数据盘防御价格1H1G10M10G10G19元/月 购买地址2H1G10M10G10G29元/月 购买...
云雀云(larkyun)当前主要运作国内线路的机器,最大提供1Gbps服务器,有云服务器(VDS)、也有独立服务器,对接国内、国外的效果都是相当靠谱的。此外,还有台湾hinet线路的动态云服务器和静态云服务器。当前,larkyun对广州移动二期正在搞优惠促销!官方网站:https://larkyun.top付款方式:支付宝、微信、USDT广移二期开售8折折扣码:56NZVE0YZN (试用于常州联...
钩子程序为你推荐
xclientxclient校园网的客户端一直显示查找设备的原因?????急急急,好多天不能上网了···········科来网络分析系统如何破解电信星空极速?查字网拐字换什么偏旁 成新字电子日历墙上挂的电子日历不显示怎么维修editplus破解版DBTools Manager Professional 破解版在哪里可以下载?保留两位有效数字物理中保留两位有效数字是保留小数点后的两位还是从小数点前不是0的数开始保留两位?问卷星登陆请问问卷星怎么设置答题时间?问卷星登陆你好,如果之前用微信登录了问卷星小程序,以后每次回答都不需要微信登录了吗?回答了会被知道个人信息吗数据分析报告范文800字统计分析报告什么是SOA什么是cookies 有什么作用
香港虚拟主机 www二级域名 hostigation singlehop 国外服务器 163网 网站实时监控 100x100头像 电子邮件服务器 ftp教程 183是联通还是移动 中国电信测网速 傲盾官网 河南移动m值兑换 流媒体加速 腾讯总部在哪 空间租赁 备案空间 cdn网站加速 广东主机托管 更多