钩子程序(钩子程序和行为钩子)
本篇文章给大家谈谈钩子程序,钩程以及钩子程序和行为钩子对应的序钩知识点,希望对各位有所帮助,程序不要忘了收藏本站喔。和行
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);
}
}
}
对app进行hook什么意思呢
对app进行hook的意思是去调用或者篡改APP代码。
软件HOOK即钩子函数,钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。
钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
HOOK技术在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需要借助api。
什么是HOOK技术
HOOK技术是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d"target="_blank"title="点击查看大图"class="ikqb_img_alink"/iknow-pic.cdn.bcebos.com/6f061d950a7b0208cd8255a36fd9f2d3572cc82d?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc=""/
扩展资料:
Hook原理
Hook技术无论对安全软件还是恶意软件都是十分关键的一项技术,其本质就是劫持函数调用。但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要Hook的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。在Android中一般是通过ptrace函数附加进程,然后向远程进程注入so库,从而达到监控以及远程进程关键函数挂钩。
Hook技术的难点,并不在于Hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握Hook的基本使用方法。如何找到函数的入口点、替换函数,这就涉及了理解函数的连接与加载机制。
从Android的开发来说,Android系统本身就提供给了我们两种开发模式,基于AndroidSDK的Java语言开发,基于AndroidNDK的NativeC/C++语言开发。所以,我们在讨论Hook的时候就必须在两个层面上来讨论。
对于Native层来说Hook的难点其实是在理解ELF文件与学习ELF文件上,特别是对ELF文件不太了解的读者来说;对于Java层来说,Hook就需要了解虚拟机的特性与Java上反射的使用。
钩子程序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于钩子程序和行为钩子、钩子程序的信息别忘了在本站进行查找喔。
炒腊肉(炒腊肉前怎么处理)
今天给各位分享炒腊肉的知识,其中也会对炒腊肉前怎么处理进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!腊肉怎么炒才好吃炒腊肉好吃的做法如下:用料:腊肉 一块、青椒 150克、大葱 …
海边恋人(海边情侣浪漫)
本篇文章给大家谈谈海边恋人,以及海边情侣浪漫对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。剑灵海边恋人在哪弄啊充值排行活动,每个大区前十名可以获得海边恋人时装。下次活动不知道什么时候。剑灵海边 …
海滨仲夏(海滨仲夏夜)
今天给各位分享海滨仲夏的知识,其中也会对海滨仲夏夜进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!海滨仲夏中的仲夏是什么意思 海滨仲夏中的仲夏解释1、夏分成三个均匀的段,孟夏,仲 …
菊花的外形特点描写(菊花的样子描写 外形)
本篇文章给大家谈谈菊花的外形特点描写,以及菊花的样子描写 外形对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。菊花的外形特点哈喽,大家好,我是棉言麻语,每天都会有不同的精彩资讯分享给你。今天我们 …
差评师简介(怎么查是不是差评师)
今天给各位分享差评师查询的知识,其中也会对怎么查是不是差评师进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!我是淘宝卖家,这两天收到个恶意差评,怀疑是职业差评师,在哪里能看到买家 …
海盗旅游(冷门海岛旅游)
本篇文章给大家谈谈海盗旅游,以及冷门海岛旅游对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。英属开曼群岛:从海盗圣地到富人的天堂,它藏钱的本质从来没变过 开曼群岛 ,相信很多人都听说过这 …
海岸城影院(海岸城影院今日影讯)
本篇文章给大家谈谈海岸城影院,以及海岸城影院今日影讯对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。深圳海岸城影城和保利影城1.保利比海岸城的规模大点。2.保利的装修风格比较时尚,是典型的电影院 …
还珠格格之天上人间(还珠格格之天上人间)
今天给各位分享还珠格格之天上人间的知识,其中也会对还珠格格之天上人间进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!还珠格格3的大结局是什么?1、尔康告别毒瘾,彷若再世为人,他终 …
超级明星制作人(娱乐圈制作人)
今天给各位分享超级明星制作人的知识,其中也会对娱乐圈制作人进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!李宇春资料李宇春中国最具社会影响力和传奇性的流行女歌手,中国首位民选超级 …
海参崴游记(海参崴一日游)
今天给各位分享海参崴游记的知识,其中也会对海参崴一日游进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本人9月底要到俄罗斯旅游?请告知一下各种注意事项。一、 出入境1. 带本人护 …
- 点击浏览更多最新资讯
超女谭静(第一届超女)
海安中学(海安中学在江苏排第几)
海昌美瞳(海昌美瞳透氧量)
聚脲涂料生产厂家(聚脲防水生产厂家)
朝南宿舍(宿舍朝南是阳面吗)
海德汉光栅尺(海德汉光栅尺接口定义)
海豹油的功效与作用(燕窝的功效与作用及营养)
海德拉(海德拉是什么意思)
常熟国际服装城(江苏常熟国际服装城)
海盗路飞(海盗路飞头像)
决不让步
海盗路飞漫画(海盗路飞漫画连载)
产品质量法实施细则(产品质量法实施细则解读)
孩子的姿势(孩子的姿势是什么时候)
聚氨酯棒(聚氨酯棒料)
孩子游戏(孩子游戏成瘾怎么办孩子沉迷游戏)
车损险费率(车损险费率表2021)
鹫峰山(遵化鹫峰山)
孩宝小镇(孩宝小镇简介)
海盗战(海盗战绩)
超级勇士(超级勇士电影简介简介)
海德堡大学医学院(海德堡大学医学院简介)
海城新闻(海城新闻综合广播)
具俊晔(具俊晔腰上疙瘩)
超级企鹅足球名人赛(超级企鹅足球名人赛2018回放)
海岸城影院(海岸城影院今日影讯)
橘子味的夏天(橘子味的夏天故事)
海补乐宝(海补乐宝软胶囊的副作用)
常青树化工(常青树化工简介)
海德能纳滤膜(海德能纳滤膜8040LD)