|
|
|
|
|
|
|
Windows内核
帖子发起人: Thomson 发起时间: 2010-01-29 00:20 上午 回复: 6
|
帖子排序:
|
|
|
|
2010-01-29, 00:20 上午
|
Thomson
注册: 2008-07-03
发 贴: 211
|
Global low level hook 为什么需要inject DLL?
|
|
|
|
要注册一个global的键盘和鼠标 low level hook, 为什么一定要把callback写在dll里面,dll又是被怎么inject到其它process里面的呢?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-01-29, 14:05 下午
|
sPhinX
注册: 2008-06-28
发 贴: 50
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
正好我这两天也在想这个问题,随便乱说一下。
其实你的第二个问题可以算是回答了第一个问题,因为需要能够让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
其他的你可以自己去搜索一下
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-01-29, 14:37 下午
|
Thomson
注册: 2008-07-03
发 贴: 211
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
谢谢...嗯,有道理.
对于除了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的实现方面的资料.
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-01-30, 11:35 上午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
上调试器,一切就都清楚了。:-)
从学习的角度看,了解一下各种hook挺好的,但是从软件安全和开发实践的角度来看,hook已经是不鼓励使用的方法了。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-01-31, 19:57 下午
|
MJ0011
注册: 2008-04-24
发 贴: 112
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
low level的应是在原始进程context下执行的,不用DLL也可以。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-01-31, 21:44 下午
|
Thomson
注册: 2008-07-03
发 贴: 211
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
谢谢MJ0011, 如果是在原始的context下面执行的,那么是在哪个地方发message给这个原始线程的呢?RIT里面吗?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2010-02-05, 16:39 下午
|
Oak
注册: 2009-10-19
发 贴: 14
|
Re: Global low level hook 为什么需要inject DLL?
|
|
|
|
NAT垫,替换原始汇编命令,跳转到你的函数。自己hook差不多就是这个原理。
如果前方没NAT,就把前五个字节命令 move ebp, esp; push ebp; 替换掉。跳到你的函数里。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 内核探秘 » Windows内核 » Global low level hook 为什么需要inject DLL?
|
|
|
|
|
|