hook编程
㈠ 请问前辈,要学习hook编程,必须看C++对吧,要看什么书呢
多线程和注册表编程都不算难,关键是要熟悉下,对于新手,还是看基础的语法,
注册表编程无非是调用几个API,所以看看基础吧.
我自己是学vc的QQ540433263.
㈡ 计算机编程术语解释什么是:API函数;hook技术;rootkit技术
API就是应用程序接口,也就是别人的程序向你提供的预定义的程序接口
HOOK,是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。
RootKIt,简单地说就是一个内核级后门/木马.
㈢ 学VC++HOOK编程的经历
写hook的程序如果只是挂到自己程序内的钩,也可以不必写dll,挂在外部程序上才需要DLL.
别把hook的作用看得无所不能.其实没什么了不起的.windows系统通过消息实现多进程,所有的中断通过系统捕获后分析并发消息到个进程的消息队列,hook其实就是改变了原本消息到程序的钩子.
相必你是要挂在外部程序上,你就需要解决以下问题.
1.dll的编写.可以直接开个纯dll工程,HOOK的DLL使用标准接口.就是最简单dll调用方法.COM,ATL,等等可以不看了
2.dll和你的程序通信问题.dll工作在外部程序的程序空间,你的在DLL内部实现的消息到你的传递(可以用通道).或者把你的地址直接转交给DLL所有操作在DLL中完成(普遍这样做)
MSDN里提供了SPY示例,可以按上面说的把工程拆开思考.你回很快掌握的.
我没特意去掌握一个方法或函数的用法,winApi函数在用时查查MSDN就可以了.那么多我也不可能都记住,只需要知道API接口怎么声明,怎么封送数据.毕竟API要封送的函数也好,变量也好,等等,都比较固定.MSDN也对这些做了一一介绍.如果还不太明白那么按示例写个简单的API调用程序多使用,多尝试不同的申明就能明白API的使用规则.
至于DLL的理解很多地方没有提,因为那实在太基本了,基本的没有必要说明,DLL只是一种文件存储方式.它能让系统认识,并能变为可执行的代码段.是程序的一组成部分.可以拆开存储的一个部分.在DLL的使用上和普通函数没什么不一样,可以把DLL看做工程中编译了的cpp程序.我们使用DLL只要把他装载进程序空间,声明对函数方法就行.至于COM,ATL等等的dll,他门是具有有标准定义接口的dll.根本使用和普通使用一样.只是开发环境会自动实现一些繁琐的工作.本意是提高效率,以至于新手初见这些时对程序流程理解上跨度比较大难免变的混乱.
㈣ 有关hook的,参数lParam!!召唤编程高手!
如果是个键盘钩子程序的话,那八成应该是WM_SYSKEYDOWN的消息。
有一定英语基础的话,推荐看原文:
http://msdn.microsoft.com/zh-cn/library/ms646286(en-us,VS.85).aspx
看不懂的话……我大概翻译一下(水平较烂~_~)
0-15位:指明当前消息的重复次数。其值就是用户按下该键后自动重复的次数。
16-23位:指明其扫描码,其值依赖于OEM
24位:指明该按键是否为扩展按键,所谓扩展按键就是Ctrl,Alt之类的,如果是扩展按键,其值为1,否则为0
25-28位:保留段,不可用
29位:指明按键时的上下文,其值为1时表示在按键时Alt键被按下,其值为0表示WM_SYSKEYDOWN消息因没有任何窗口有键盘焦点而被发送到当前活动窗口。
30位:指明该按键之前的状态,其值为1时表示该消息发送前,该按键是被按下的,其值为0表示该消息发送前该按键是抬起的。
31位:指明其转换状态,对WM_SYSKEYDOWN消息而言,其值总为0。
结合程序你再研究研究吧~~
哦对,类似的还有WM_KEYDOWN等等,结束你的调用环境去MSDN上查吧,主方面中文资料貌似比较少的样子~~
㈤ 编程中常说的hook是什么意思
就是钩子,用于劫持消息,在windows中是这样的,因为win32程序是以消息机制为基础的,比如你点击鼠标,会给窗口传递一个消息,移动鼠标,会给窗口一个消息,用钩子可以比你的窗口先检测到这个消息,从而得到这个消息进行处理,你的窗口可能就处理不到这个消息了,要看你的钩子处理程序是否把这个消息传给窗口,具体看WIN32应用程序开发吧,
㈥ 什么是驱动、内核开发HOOK 又是什么又有什么用呢
你多看点win系统编程自然就会懂这些.
驱动开发就是为windows的设备编写驱动程序.所谓的游戏保护驱动应该不是属于这类范畴;内核开发的含义比较含糊,不知道你看到的内核指得什么?hook是windows的托盘程序.这个托盘程序使用了windows的钩子技术,hook了api就是hook拿到了这个api的执行链的控制权,ring0是芯片执行的最高优先权.看你问问题,是不是打算写个外挂啊.呵呵.
㈦ C语言求HOOK编程的完整教程
给个地址吧
http://hi..com/bok9/blog/item/7b0cc02dba2cd55d4ec22666.html
㈧ 编程里说的 钩子和勺子是什么
Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截、监视、处理。这种技术可以广泛应用于各种软件,尤其是需要有监控、自动记录等对系统进行监测功能的软件。
VB编程中钩子的实现
(一)钩子函数(HOOK Function)的格式。Hook Function实际上是一个函数,如果是系统钩子,该函数必须放在动态链接库中。该函数有一定的参数格式,在VB中如下:
Private Function HookFunc(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
其中,nCode代表是什么情况之下所产生的钩子,随钩子的不同而有不同组的可能值;参数wParam,lParam传回值包括了所监视到的消息内容,它随Hook所监视消息的种类和nCode的值不同而不同。对于用VB所设置的钩子函数,一般的框架形式如下:
Private Function HookFunc(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
Select case of nCode
case ncode<0:hookfunc=callnexthookex(hHookFunc,nCode,wParam,lParam)
case值1:处理过程1:HookFunc=X1
case2:处理过程2:HookFunc=X1
……
end select
end Function
函数的传回值,如果消息要被处理,则传0,否则传1,吃掉消息。
(二)钩子的安装及执行。钩子的安装要用到几个API函数:可以使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx()函数的声明如下:
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
idHook值为它处理的消息类型;lpfn值为钩子子程序的地址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。除此以外,lpfn可以指向当前进程的一段钩子子程代码。hMod值为应用程序的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为0。dwThreadId值为与安装的钩子子程相关联的线程的标识符,如果为0,钩子子程与所有的线程关联。钩子安装成功则返回钩子子程的句柄,失败返回0。
另外,一般应在钩子子程中调用CallNextHookEx()函数以执行钩子链表所指的下一个钩子子程,否则安装了别的钩子的应用程序就会收不到钩子通知,从而产生错误的结果。CallNextHookEx()函数的声明如下:
Declare Function CallNextHookEx Lib"user32" Alias "CallNextHookEx"(ByVal hHook As Long,ByVal ncode As Lonog, ByVal wParam As Long,lParam As Any)As Long
hHook值是SetWindowsHookEx()的传回值,nCode、wParam、lParam则是Hook函数中的三个参数。在程序终止之前,必须调用UnhookWindowsHookEx()函数释放与钩子关联的系统资源。UnhookWindowsEx()函数声明如下:
Declare Function Unhook WindowsHookEx Lib "user32" Alias "Unhook WindowsHookEx(ByVal hHook As Long)As Long
hHook为安装钩子时的返回值,即钩子子程的句柄。
㈨ 是不是在MFC中hook编程中只能有一个hook的句柄是类成员,另一个只能是全局hook句柄
不是这样的啊,没有这种规定的。你从哪里看到的?
都是根据实际编程中的需求来确定的。
㈩ 利用C++编程,将hook(钩子)加到程序每一个函数,其中hook后跳转到自己自定义函数代码,实现函数打印功能
用SetWindowsHookEx拦截QQ密码框,这个我也试过,拦截的是乱码。
原因据说是QQ用了nKey键盘保护。
QQ2011版的我没有试过,10版的我试过,用WinIO可以拦截密码。
不过WinIO加载了驱动,360会有提示,用DirectX监视键盘也拦截不下来。
谁知道11版的WinIO还管事不?,你可以从网上下一个WinIO。
WinIO包含一个库文件,一个动态链接库文件,一个驱动文件。
我告诉你个天下最好的办法吧:
1.将Kernel32.dll或者user32.dll替换成你的。
2.在键盘这个硬件上做手脚。