韩小明@xiammy的专栏

没水的地方挖井,有水的地方修渠

韩小明ID:xiammy
436562次访问,排名107好友9人,关注者63
毕业后一直在广联达工作
xiammy的文章
原创 174 篇
翻译 0 篇
转载 22 篇
评论 1131 篇
韩小明的公告
作者毕业于浙江大学,非常热爱体育运动。现在尤其热爱羽毛球运动。在休息时间非常热爱技术文章写作。
最近垃圾评论泛滥,为了不污染大家的视听,暂时关闭评论,请大家理解。
欢迎转载,但请注意,除非特别声明,本站采用Creative Commons License许可:署名,非商业。

最近评论
liquankun:瑞星还是不咋地!
白花了几个月的钱
外国的杀软不一定比国产的好!
但是国产的就是比不上国外的!
没办法!技术赶不上人家 还竟搞内讧
不经历大灾难 就不知道什么是团结!



正真的高手是不用杀毒软件的,没什么好不好的,是你自己技术不行而已
wangdei:http://www.bt285.cn BT下载 有300W部BT种子.
http://www.yaonba.com.cn NBA中文网 有200W条NBA直播
http://www.5a520.cn 小说520网 有300W部小说
http://www.bt285.cn/yazhou/ 亚洲BT 有BT亚洲
http://www.bjxlz.cn p……
hemir:不但不知道团结提高,倒是会找枪手到处胡闹。弄的整个环境乌烟瘴气的。
hemir:不但不知道团结提高,倒是会找枪手到处胡闹。弄的整个环境乌烟瘴气的。
hemir:枪手太多,大家都还是相信自己的眼睛吧。个人认为360做的不错。国内的杀毒软件确实不怎么地……
文章分类
收藏
    相册
    图书
    链接
    宗刚的专栏(RSS)
    快乐学习(RSS)
    陈亮亮的专栏(RSS)
    朋友
    张恂论 OO
    言之有李(RSS)
    赵伟的小家
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 HOOK启思录---第三章 HOOK的应用模式收藏

    新一篇: 原来汉语的思路更接近计算机语言 | 旧一篇: 也谈西直门桥的设计

     
    观察模式
    在HOOK很多应用中,有一类应用最为常用,那就是观察模式。对于信息获取的要求,在很多时候都是非常的重要的功能。在很多时候,我们都需要根据一定量的信息去判断如何决策。正如打仗一样,没有一定量的有意义的数据,就是摸黑,只能死路一条。
    像Windows提供的SetWindowHook就是典型地为这类应用准备的。而且这也是最普遍的用法。
    这个模式的特点是,在事情发生的时候,发出一个通知信息。观察者只可以查看过程中的信息,根据自己关心的内容处理自己的业务,但是不可以更改原来的流程。
    如全局钩子中,经常使用的鼠标消息、键盘消息的监视等应用。金山词霸屏幕取词的功能是一个典型的应用(具体技术可以参考此类文章)。
    注入模式
    这个模式和观察模式最大的不一样的地方在于,注入的代码是为了扩展原始代码的功能业务。插件模式是此类模式的典型案例。
    不管瘦核心的插件系统(如Eclipse)还是胖核心的插件系统(如Delphi、Visual Studio等IDE环境),其对外提供的插件接口都是为了扩展本身系统的功能的。
    这种扩展的应用方式的典型特点,就是新的扩展代码和原来的代码会协调处理同类业务。
    还有一些好的例子。我们曾经有一个应用,就是替换ReadFile和WriteFile,用以做到对所有文件操作的加密工作。这种应用和插件的差异在于被注入方是主动还是被动的。但是都是在完成同一类业务。
    替换模式
    如果针对应用目的不同,可以叫修复模式或破解模式。前者是为了修改系统中的BUG,后者是为了破解原有系统的限制。
    比如我在前言中提到的,Delphi的VCL中,TObject并没有提供从接口到对象的转换服务,如果我们使用了此类模式,就可以让我们获得这种非常好的服务。对于一个设计或实现上有缺陷的原有系统(一般不能直接修改代码)来说,HOOK机制往往是很好的选择。
    这类称之为修复模式非常好。
    很多黑客也使用此种模式,必然替换访问加密锁的DLL中的导出表,替换成自己的函数,这样跳过对软件的控制代码。我们这里不是重点讲述软件破解,所以不继续深究其破解原理。但是,可以强调的是,这类应用的难点是,找出函数的参数。
    这类模式的特点是,原有的代码会被新的代码所替换。
     
    前面三个是基本模式,还有很多和实际应用相关的模式。
    集权模式
    此类模式的出现,大都是为了在全部系统中,统一处理某类事情。它的特点不在于注入的方式,而在于处理的模式。
    这个模式,大都应用到某类服务上,比如键盘服务,鼠标服务,打印机服务等等特定服务上。通过统一接管此类服务的访问,限制或者协调对服务的访问。
    比如键盘锁功能的实现,就是暂时关闭键盘的所有应用。
    这类模式的特点主要会和特点服务有关联。
    修复模式
    替换模式的一种,这里强调的是其应用的目的是为了修复或扩展原有系统的功能。
    破解模式
    替换模式的一种,这里强调的是其应用的目的是为了跳过原有系统的一部分代码。如加密检测代码,网络检测代码等等。
    插件模式
    注入模式的一种,在系统的内部直接依靠HOOK机制进行扩展业务功能。
    共享模式
    这类应用中,经常是为了获取对方的数据。必然我希望获取对方系统中,所有字符串的值。可以通过替换对方的内存管理器,导出所有字符串。
    这个应用比较特殊。不过其特点在于,目的是达到系统之间的数据共享。
    其实现,可能是观察模式,也可能是替换模式。
     
    其他不能一一详述,欢迎大家一起补充。
     

    发表于 @ 2006年11月27日 23:18:00|评论(loading...)|编辑

    新一篇: 原来汉语的思路更接近计算机语言 | 旧一篇: 也谈西直门桥的设计

    评论

    #FLYSNOWRAIN 发表于2007-05-24 10:47:09  IP: 60.214.248.*
    看看
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 韩小明