Global low level hook 为什么需要inject DLL?
Windows内核
Global low level hook 为什么需要inject DLL?
Thomson
2010-01-29, 00:20 上午
要注册一个global的键盘和鼠标 low level hook, 为什么一定要把callback写在dll里面,dll又是被怎么inject到其它process里面的呢?
Re: Global low level hook 为什么需要inject DLL?
sPhinX
2010-01-29, 14:05 下午
正好我这两天也在想这个问题,随便乱说一下。
其实你的第二个问题可以算是回答了第一个问题,因为需要能够让callback被回调,就需要让它在目标进程里面,而让callback进入目标进程最简单的办法就是Inject dll,我个人理解理论上来说可以自己写一套机制,来只插入代码到目标进程中,但是系统既然提供dll这种相对简单稳定的机制,自然是拿来用就好。
至于第二个问题,codeproject上一大堆讨论hook,inject的文章,我推荐一篇
Three Ways to Inject Your Code into Another Process,
http://www.codeproject.com/KB/threads/winspy.aspx
其他的你可以自己去搜索一下
Re: Global low level hook 为什么需要inject DLL?
Thomson
2010-01-29, 14:37 下午
谢谢...嗯,有道理.
对于除了keyboard和mouse的low level hook, 其它的hook确实是要inject dll, 我觉得是不是因为其它的message hook都是在处理相应message 前面或者后面触发,所以要把hook procedure所在的dll inject过去.. 但是low level由于是不任何的thread拿到message 前的处理,所以,放在原先注册hook的thread里面处理就行. 所以keyboard和mouse的low level hook是不需要inject dll的.
不知道有没有关于这些hook的实现方面的资料.
Re: Global low level hook 为什么需要inject DLL?
格蠹老雷
2010-01-30, 11:35 上午
上调试器,一切就都清楚了。:-)
从学习的角度看,了解一下各种hook挺好的,但是从软件安全和开发实践的角度来看,hook已经是不鼓励使用的方法了。
Re: Global low level hook 为什么需要inject DLL?
MJ0011
2010-01-31, 19:57 下午
low level的应是在原始进程context下执行的,不用DLL也可以。
Re: Global low level hook 为什么需要inject DLL?
Thomson
2010-01-31, 21:44 下午
谢谢MJ0011, 如果是在原始的context下面执行的,那么是在哪个地方发message给这个原始线程的呢?RIT里面吗?
Re: Global low level hook 为什么需要inject DLL?
Oak
2010-02-05, 16:39 下午
NAT垫,替换原始汇编命令,跳转到你的函数。自己hook差不多就是这个原理。
如果前方没NAT,就把前五个字节命令 move ebp, esp; push ebp; 替换掉。跳到你的函数里。