一 BHO和浏览器劫持
BHO
Browser Helper Objects (也被称为 BHOs) 是com组件,扮演着ie插件的角色。BHOs可以在某种程度上定制IE,如:用户交互的修改,网页过滤的及下载管理。
BHO(Browser Help Objects),是实现了特定接口的COM组件。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的工程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等;BHO可以在这些事件的响应中实现与浏览器的交互。
浏览器劫持
BHO的出现帮助程序员更好的打造个性化浏览器或者为自己的程序实现了方便简洁的交互功能,可以说,如果没有BHO接口的诞生,我们今天就不能用一些工具实现个性化IE的功能了。从某一方面来看,BHO的确是各种缤纷网络互动功能的幕后功臣,但是一切事物都是有两面性的,这个恒古不变的真理同样对BHO有效,于是就有了今天让安全界头痛的“浏览器劫持”的攻击手段诞生。
看看前面我提到的BHO接口特性,你想到了什么?BHO可以获知和实现浏览器的大部分事件和功能,也就是说,它可以利用少量的代码控制浏览器行为。程序员可以设计出一个BHO按钮以实现用户点击时通知浏览器跳转到某个页面完成交互功能,当然就可以进一步写出控制浏览器跳转到他想让用户去的页面,这就是最初的“浏览器劫持”的成因:BHO劫持。
IE如何加载BHO
当BHO将被IE加载的时候,它调用一个叫做CoCreateInstance的COM函数,传给它我们BHO的类ID和叫做IObjectWithSite的接口ID。
BHOs被要求实现IObjectWithSite接口,是IE用来和BHO交互的。
二 查找BHO模块
看360极速浏览器的所引入的模块;
看下这个afe.dll的介绍,也许是BHO;
用dll查看器看下,它只实现了两个函数,不是BHO;
再找另一个DLL查看工具看下,也许前一个看的不准;
这个工具查看模块导出的函数要麻烦一些;
结果是一样的,afe.dll仅导出2个函数,不是BHO;
再看这个dll,介绍说是“插件”;那么可能是BHO;
用dll查看器查看,导出3个函数,非BHO;
看下360极速浏览器导入的这堆dll,看上去似乎都不是BHO;good,很好;
三 在注册表中查找BHO
可以找到所有的BHO
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\
中可以找到BHO对应的注册项
其中的InprocServer32的默认值为BHO所对应的dll文件.
再看CLSID里,一堆,根本不知道谁是谁;
用搜索功能搜索注册表;
原来64位系统该键在另外的位置;
搜到3个BHO,如下;看上去都是微软自带的;
看下360极速的模块,没有导入上面3个dll;看来360极速浏览器是没有使用BHO插件的了,good。
结束此次研究。