马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 类人猿 于 2017-8-28 14:20 编辑
<<<<<<<<技术探讨,欢迎大神指导!<<<<技术Q:578052137 技术群:128262077 |
HOOK是以后我们写辅助必须用到的一个技术,TC里面有了回调函数指针的支持更加方便我们运用HOOK。HOOK这个概念其实很多人是比较模糊的。下面通过不同的分类让大家了解。
1、HOOK权限分类: 对于 Hook 技术,可以分为两块:1. 1.第一块是在 Ring3 层的 Hook,俗称应用层 Hook 技术 2.另外一块自然是在 Ring0 层得 Hook,俗称为内核层 Hook 技术。(这里暂时不讨论驱动层的)
2、应用层 Hook 技术分类: Ring3 层的 Hook 基本上可以分为两种大的类型, 第一类即是 Windows 消息的 Hook, 第二类则是 Windows API 的 Hook。
第一类消息 Hook 按照范围分类 (1)消息HOOK:
消息 Hook,消息 Hook 是通过 SetWindowsHookEx 可以实现将自己的钩子插入到钩子链的最前端, 而对于发送给被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都会被我们的钩子处理函数所捕获到, 也就是我们可以优先于窗体先捕获到这些消息,Windows 消息 Hook 可以实现为进程内消息 Hook 和全局消息 Hook, 对于进程内消息 Hook,则可以简单的将 Hook 处理函数直接写在这个进程内,即是自己 Hook 自己。 下面是官方的例子: - 变量 h
- 功能 hookProc(code,w,l)
- 如果(w == 256)//w参数 表示是 键盘按下或者弹起
- 调试输出("键码:"&地址取值(l,"long"))
- 结束
- 返回 动态库调用("user32.dll","long","CallNextHookEx","long",hook,"long",code,"long",w,"long",l)//当code小于0的时候一定要把消息传递给他一个子程
- 结束
- 变量 hook
- 功能 设置钩子_点击()
- //这里添加你要执行的代码
- 变量 hmod = 动态库调用("kernel32.dll","long","GetModuleHandleA","long",0)
- h = 回调函数申请("hookProc","hookproc")
- hook = 动态库调用("user32.dll","long","SetWindowsHookExA","long",13,"callback",h,"long",hmod,"long",0)//执行setwindowhook函数 挂起全局钩子,13全局钩子
- 调试输出(获取错误信息(1))//这里获取dllcall执行后是否有错误信息
- 调试输出(hook)//输出钩子是否设置成功
- 结束
- 功能 卸载钩子_点击()
- //这里添加你要执行的代码
- 变量 ret = 动态库调用("user32.dll","long","UnhookWindowsHookExA","long",hook)//删除钩子句柄 当hook不需要的时候记得一定要删除
- 回调函数释放(h)//删除钩子句柄之后 不要忘了 释放我们的回调函数,否则TC对应的函数里面一直会输出信息
- 结束
复制代码
(2)全局消息HOOK:
需要将 Hook 处理函数写在一个 DLL 中,这样才可以让你的处理函数被所有的进程所加载(进程自动加载包含 Hook 消息处理函数的 DLL)。 对于 Windows 消息 Hook 呢,可以有个简单的邪恶应用,就是记录键盘按键消息, 从而达到监视用户输入的键值信息的目的,这样,对于一些简单的用户通过键盘输入的密码就可以被 Hook 获取到, 因为没当用户按下一个键时,Windows 都会产生一个按键消息(当然有按下,弹起等消息的区分), 然后我们可以 Hook 到这个按键消息,这样就可以在 Hook 的消息处理函数中获取到用户按下的是什么键了。
第二类则是 Windows API 的 Hook 那么到底什么是HOOK API呢?我们可以暂且简单的认为HOOK API就是一种改变原始API功能的方法。最简单的例子莫过于MessageBox(其实是MessageBoxA或MessageBoxW),我们可以通过HOOK这个API改变其功能,比如换个标题。目的很明确,就是改变原始API的行为,但是方法有多种。再继续讨论之前我们先要搞清楚一个问题,HOOK API是HOOK谁的API调用?当然你可以自己写一个程序,然后在这个程序里HOOK所有本程序MessageBoxA/W的调用,但是更多的用途是HOOK其他进程的。比如你可以HOOK一个进程的winsock函数从而监视其网络行为。 API hook简单举个例子:就是在函数开头5个字节改成jmp xxxx,当然hook的方法很多。
<<<<<<<<<<<< 期待大牛的加入,技术唯一Q号:578052137 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|