阅读:3398回复:20
WINDOWS api 全局钩子的实现过程是什么?
如果想做一个WINDOWS api 全局钩子,那么实现步骤是什么?
|
|
沙发#
发布于:2005-04-05 16:02
是你自己做一个,还是利用系统提供的全局钩子
|
|
|
板凳#
发布于:2005-04-05 19:57
这个???很简单呀?是不是没问清楚?再详细些!
|
|
地板#
发布于:2005-04-05 21:50
就是挂钩windows的API函数,在应用层做的。比如挂钩CreateProcess,实现的步骤是什么呢?
|
|
地下室#
发布于:2005-04-06 09:24
就是挂钩windows的API函数,在应用层做的。比如挂钩CreateProcess,实现的步骤是什么呢? 其实就是远程注入DLL,或者直接改DLL文件 |
|
|
5楼#
发布于:2005-04-06 09:28
顺便看一下
http://www.luocong.com/articles/show_article.asp?Article_ID=25 |
|
|
6楼#
发布于:2005-04-07 16:49
谢谢。不过老罗的只能修改自己程序的API,如果我想劫持系统全局的MessageBoxIndirectA如何实现呢?我只想知道步骤。
|
|
7楼#
发布于:2005-04-07 17:53
谢谢。不过老罗的只能修改自己程序的API,如果我想劫持系统全局的MessageBoxIndirectA如何实现呢?我只想知道步骤。 那直接修改user32.dll文件,或者在核心修改user32.dll页面的属性,否则会遭遇copy on write |
|
|
8楼#
发布于:2005-04-07 19:54
能详细一点么?比如我的劫持代码是一个dll还是一个exe,劫持代码如何插入到MessageBoxIndirectA前执行呢?这个文件好像是系统保护的啊
|
|
9楼#
发布于:2005-04-08 10:00
能详细一点么?比如我的劫持代码是一个dll还是一个exe,劫持代码如何插入到MessageBoxIndirectA前执行呢?这个文件好像是系统保护的啊 看看这个帖子,对你会有启发 http://www.driverdevelop.com/forum/viewthread.php?tid=88342 由于有重定位的问题,你要通用的话,建议你直接修改磁盘上的DLL文件 |
|
|
10楼#
发布于:2005-04-10 16:39
我看了一下,是不是要想劫持系统全局的函数就只有修改系统dll一种办法了呢?
|
|
11楼#
发布于:2005-04-11 09:32
我看了一下,是不是要想劫持系统全局的函数就只有修改系统dll一种办法了呢? 或者是HOOK Loadlibrary, LoadlibraryEx |
|
|
12楼#
发布于:2005-04-12 09:13
[quote]我看了一下,是不是要想劫持系统全局的函数就只有修改系统dll一种办法了呢? 或者是HOOK Loadlibrary, LoadlibraryEx [/quote] 这是API函数,那又回到老问题了,如何Hook呢?只有修改user32.ddl了吧。 |
|
13楼#
发布于:2005-04-12 10:09
一般Hook其实都有个默认,即Kernel32.dll,user32.dll都会家载到默认地址,在不同进程中的虚拟地址是相同的。而且这个默认也确实在起作用。所以在这样的前提下,实现全局hook,可以在核心中找到Kernel32.dll,user32.dll模块占用的页面,将其属性改为可写,这样可以避免COW,通过更改要Hook函数入口,这样便实现了Hook
|
|
|
14楼#
发布于:2005-04-12 19:54
谢谢!
...所以在这样的前提下,实现全局hook,可以在核心中找到Kernel32.dll,user32.dll模块占用的页面,... 从应用层能不能找到其占用的页面? |
|
15楼#
发布于:2005-04-13 10:57
谢谢! 从应用层能不能找到其占用的页面? [/quote] 可以找到,其实在Windows调用我们应用程序时都事先压入堆栈中一个Kernel32.dll的函数的地址,我们其实可以不用ExitProcess返回Windows的,可以用ret.这个你可以看一下Windows的SEH例外处理。然后找到这个地址后,由于Kernel32.dll肯定以整页面开头,于是在内存中按整页面在这个地址前面搜,找到有名的在DOS中就声名显赫的MZ,嘿嘿。。。 |
|
|
16楼#
发布于:2005-04-13 18:46
最后一个问题:应用层API的全局挂钩和驱动层的NativeAPI的Hook在功能上有什么区别?各自的优缺点是什么?
总结一下吧!谢谢。 |
|
17楼#
发布于:2005-04-14 10:10
最后一个问题:应用层API的全局挂钩和驱动层的NativeAPI的Hook在功能上有什么区别?各自的优缺点是什么? 其实我上面是个歪门邪道,正经的方法是用GetProcAddress,但有时我觉得歪门邪道有时必不可少,DOS下我就用这个来搜索PSP,对付各版本差异 这个 最后一个问题:应用层API的全局挂钩和驱动层的NativeAPI的Hook在功能上有什么区别?各自的优缺点是什么? 问题太大,非我一个能回答,我觉得应用层Hook和驱动层的NativeAPI的Hook在功能上是看个人需求,如果能在应用层做,尽量不要在核心去做,这样不用带驱动,因为hook的重入是非常要注意的问题 这个问题请tiamo进来总结一下 |
|
|
18楼#
发布于:2005-04-14 10:43
谈谈自己的看法也可以啊!
我没有做过应用层API的挂钩,只是实验了Native API的hook,现在在想为何要在驱动做,如果能在应用层完成的功能,在应用层不是更好么?驱动时不时的蓝屏。而应用层则比较稳定。 |
|
19楼#
发布于:2005-04-14 15:15
谈谈自己的看法也可以啊! 我也觉得能在应用层做,最好不要到核心里去做,但核心去作可以控制得更底层,我做的Native API Hook,跟系统倒不冲突,但更防毒软件老冲突,因为防毒软件必须这样做,才能更有特权,更低级.我们大可不必凡是都要到核心实现. |
|
|
上一页
下一页