VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
深入浅出HOOKS(之叁)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

访问《化境编程界》| * Email:[email protected]

   化境编程界 -> 技术文章 -> C/C++/VC 

  

 

关于 HOOK

 

[ 作者: 陆麟   添加时间: 2001-6-2 0:04:44 ]

 

 

 

 

来源:lu0.126.com

 

大家讨论HOOK太多了.在网络中,概凡谈论到进程控制,十有八九最后会得到一句话:HOOK.

嘿嘿,知道HOOK运作机理的有几个呢?下面,本人就MSDN文档中没有写到的一点东西稍微讲几句.

以下讲述乃针对全局HOOK而发.

1.设置HOOK过程时返回的前一HOOK地址必须被保存到一个全局共享的内存地址段中.这个共享段的地址不是什么本进程的全局变量,而是所有进程都可以看见的变量.因为,进程级变量进在本进程内可见.当其他进程加载HOOK DLL,HOOK DLL里的所有变量都会被RESET.这也就是说:

HHOOK hk;

//set and get HHOOK here

return hk();

这样的描述是不能跳转到前一HOOK.这一点,甚至在Jeffrey Richter的经典书籍<<Advance Windows>>里都描述错了.

正确的做法是:

#pragma data_seg("dt")

HHOOK prehook=0;

#pragma data_seg()

然后到VCLINK OPITION里加上:

-SECTION:dt,RWS

这样,prehook就被搞到系统中被共享了.记住,一定要给prehook初始化.否则,MS编译器的编译器会LINK错误.

 

2.只有使用USER32.DLL的进程才会被INJECT.所以,HOOK并不是万能的.而且,用了USER32.DLL,也不一定会被INJECT.这里有个很好的例子就是整个OS启动中第一个被启动的WIN32进程:KERNEL32.DLL.大家很奇怪,KERNEL32.DLL是个DLL,怎么也会被作为进程加载?但是事实的确是这样的,顺便给大家再上一节98启动课吧.KERNEL32.DLL作为一个独立的进程,启动时加载了MSGSRV32.EXE.MSGSRV32.EXE又启动了SPOOL32.EXE, SPOOL32.EXE启动了MPREXE.EXE.MPREXE.EXE可不能小看.我敢担保全中国没几个人真正知道它的作用的.MPREXE.EXE不仅是网络客户端部件启动的核心,更是WIN98SERVICESCM.所有的WIN98SERVICE都是由MPREXE.EXE启动的.WIN98SERVICE都在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices里呆者哩.大家都傻眼了吧.:DDD 有一点很令人奇怪, 那就是如果MPREXE.EXE运作不正常,那么SHELL绝对起不来.SHELL却是有MSGSRV32.EXE启动的.看来MPREXEMSGSRV32有一套内部沟通机制啊.有了SHELL,就什么都有了.其他的东西被SHELL启动就难说准了.反正80%的程序是由SHELL启动的.好了,WIN98启动暂且讲到这里.我们继续原先的话题.KERNEL32.DLL居然就无法用HOOK入侵.大家如果不信的话,就试试看吧.

 

3.尽管使用USER32.DLL的进程会被INJECT. 但是这里还有一个技巧,那就是HOOK DLL是在进程第一次发出USER32调用的时候才被加载. 大家又目瞪口呆了吧.:) 这也就是说,在你发出USER32调用之前, HOOK DLL根本拿你没办法. ,真够幽默啊.:)))由于在启动HOOK前的进程绝对都是在调用GetMessage(...)/PeekMessage(...),那么HOOK DLL一下子满足了加载条件了.

 

4.加载HOOK,HMODULE一定要正确,否则,系统就无法正确加载HOOK过程.千万不要用0代替HMODULE,因为0代表的是EXE映象的HINSTANCE(其实就是HMODULE).

 

好了.今天就写到这里.此文该算本主页里又一篇经典了吧.:)

 

 

 

 

   

 

相关内容:

 

 

- 怎样用程序取得CPU信息

- 详析VC中坐标系的建立

- OOP: 理解类和对象

- 后入为主-虚函数

- 实现网络蚂蚁在IE中右键菜单的xxxxxx下载功能

 

  

 

--------------------------------------------------------------------------------

 

 

申明: 本站 所有内容均是从网上收集,若有侵范你版权的请指出,本站马上删除。

 

© Copyright By 稻香老农 2000.3 - Now | 站务联系: [email protected] | OICQ:593737 (只用于站务联系,不做它用)

 

 




相关文章

相关软件