为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页 改回自己的地址,可是一重启它又回来了!”、“我的系统一开机就跳出一个广告,我明明用了最新版的杀毒软件的啊!”等这类关于IE异常问题的求助,80% 的提问者都表示纳闷,他们已经安装了杀毒软件,可是IE仍然被“黑”了,这又是为什么?社区门户ug qoH8W3v l5x

Ni+`]y$G,W0   其实这些都是典型的“浏览器劫持”现象,但是受害者不是已经安装了杀毒软件吗?为什么浏览器依然躲不过这只黑手?许多用户对这个领域都存在一种误区心理:浏览器劫持?我有最新的杀毒软件,我不怕!社区门户2Z5G.`h3~9T+S

VqF7STR3_9G4R4r#Y0   于是,当他们遭遇“浏览器劫持”时,惊讶了。社区门户z*p1~4W-g/@ aT
社区门户-?nov-n|#sT
   要知道,杀毒软件自身也只是一种辅助工具,它不可能完全保护系统的安全,更何况,杀毒软件用户必须知道一个事实:“浏览器劫持”的攻击手段是可以通过被 系统认可的“合法途径”来进行的!杀毒软件只能通过“特征码”的形式来判断程序是否合法,但这是建立在人为定义以后的,而实施“浏览器劫持”的程序可以有 很多,防不胜防。社区门户m$iv_Z-VN

Y:M O k:W!W0   为什么说“浏览器劫持”可以说是合法的呢?因为大部分浏览器劫持的发起者,都是通过一种被称为“BHO”(Browser Helper Object,浏览器辅助对象)的技术手段植入系统的。社区门户 o]%C/y'B$_AE0J[

d+M!]-U[ v0    BHO是微软早在1999年推出的作为浏览器对第三方程序员开放交互接口的业界标准,它是一种可以让程序员使用简单代码进入浏览器领域的“交互接口” (INTERACTIVED Interface)。通过BHO接口,第三方程序员可以自己编写代码获取浏览器的一些行为(Action)和事件通知(Event),如“后退”、“前 进”、“当前页面”等,甚至可以获取浏览器的各个组件信息,像菜单、工具栏、坐标等。由于BHO的交互特性,程序员还可以使用代码去控制浏览器的行为,比 如常见的修改替换浏览器工具栏、在浏览器界面上添加自己的程序按钮等操作,而这些操作都被视为“合法”的,这就是一切罪恶根源的开始。
:}0ojYp_nHE0
VZ)uy N0    BHO的出现帮助程序员更好的打造个性化浏览器或者为自己的程序实现了方便简洁的交互功能,可以说,如果没有BHO接口的诞生,我们今天就不能用一些工 具实现个性化IE的功能了。从某一方面来看,BHO的确是各种缤纷网络互动功能的幕后功臣,但是一切事物都是有两面性的,这个恒古不变的真理同样对BHO 有效,于是就有了今天让安全界头痛的“浏览器劫持”的攻击手段诞生。
v a4h!Dw/,jU.g0 社区门户x,BmIuSP&]
   看看前面我提到的BHO接口特性,你想到了什么?BHO可以获知和实现浏览器的大部分事件和功能,也就是说,它可以利用少量的代码控制浏览器行为。程序 员可以设计出一个BHO按钮以实现用户点击时通知浏览器跳转到某个页面完成交互功能,当然就可以进一步写出控制浏览器跳转到他想让用户去的页面,这就是最 初的“浏览器劫持”的成因:BHO劫持。社区门户Z�C%E,O5px^ m

4p*u"Z+Q5M(F;Ntw D0 在 描述BHO劫持之前,我们先要对BHO接口的启动做个简单介绍:符合BHO接口标准的程序代码被写为DLL动态链接库形式在注册表里注册为COM对象,还 要在BHO接口的注册表入口处进行组件注册,以后每次IE启动时都会通过这里描述的注册信息调用加载这个DLL文件,而这个DLL文件就因此成为IE的一 个模块(BHO组件),与IE共享一个运行周期,直到IE被关闭。
m8WT&ZW0 社区门户;l2P'c+[Rz
  IE启动时,会加载任何BHO组件,这些组件直接进入IE领域,而IE则成为它们的父进程和载体,从此IE的每一个事件都会通过IUnknown接口传递到BHO用以提供交互的IObjectWithSite接口里,这是BHO实现与IE交互的入口函数。
?!]3x#kN6N0aD G0 社区门户-V,|)N1~6`{6CW
   BHO接收到IE接口传递来的参数后开始判断IE正在做什么,理论上BHO可以获取IE的大部分事件,然后根据程序员编写的代码,BHO持有对特定事件 做出反应的决定权,例如一个可以实现“中文网址”的BHO,就是通过GetSite方法获取到IE当前打开的站点URL(或通过 IURLSearchHook接口来获知),如果BHO发现获取到的URL和内置的判断条件匹配,该BHO就会启用SetSite方法强制IE跳转到程序 员设定的页面去,这个过程就是利用about:blank篡改主页的“浏览器劫持”方法之一,它的实现原理其实很简单,程序员编写一个恶意BHO组件,当 它获取到IE窗口的当前站点为“about:blank”时就强制IE内部跳转到指定的广告页面,于是闹出了不久之前沸沸扬扬的“IE空白页劫持事件”。社区门户hRsY*~8bL

7Nh%Rt[#{$o/A0   了解了这种类似恶作剧的作案手段,要解决它就容易了,只要找到并删除这个隐藏在系统里的BHO程序即可。社区门户$ND&c"M-e
社区门户}�s#R-}^;{"Py
   除了这类“广告软件”性质的BHO,还有一种利用IURLSearchHook接口实现的另一类更隐蔽的BHO,这种BHO从某些方面来说大概不算 BHO,因为它并不是响应IUnknown,而是等待IE创建IURLSearchHook来启动。IURLSearchHook被浏览器用来转换一个未 知的URL协议地址,当浏览器企图去打开一个未知协议的URL地址时,浏览器首先尝试从这个地址得到当前的协议,如果不成功,浏览器将寻找系统里所有注册 为“URL Search Hook”(资源搜索钩子,USH)的对象并把这个IE不能理解的地址发送过去,如果某个USH对象“认识”这个地址,它就返回一个特定的标识告诉IE它 知道怎么打开这个地址,然后IE就根据约定的方法调用它,最终打开这个地址。其实USH对象并不陌生,我们一些偷懒的用户就经常为了省事而不输入 “http://”,但是IE最终还是能认出并打开某个地址,就是USH的功劳,但是这一点又被恶意程序员拿来磨刀了,通过创建自己的USH对象,恶意程 序员能够命令IE在找不到一些网站时自动跳转到事先设置的站点里,如果这个站点带毒或者挂马,用户就完了。社区门户-r(bBTb3NX/m

cO/:I3?{Bh7rA{0 这 类BHO的解决方法和前面一样,只是它比较隐蔽,除非用户经常偷懒,否则可能直到系统崩溃也不会知道自己已经感染了这种东西。也许你会说,只要用户的输入 永远不会让IE无法识别,这种渗透不就白费了?但是事实不容乐观,我们无法得知BHO作者还会不会通过其他方法拦截IE,说不定每隔一段时间就让IE弹出 一个广告呢?社区门户's0T�ZY[

iww@/u0    上面说了这么多BHO和IE合作搞破坏的事例,可能会给读者造成一种“BHO必须在IE传递数据后才能行动”的误解,然而事实并非如此,浏览器自身也是 一个标准的可执行程序,而BHO只是借用这个程序进程启动的DLL,它并非API那种要用的时候就让你过来忙活,忙活完了就一脚踹开的奴隶形态DLL,前 面说过了,BHO是一种在浏览器加载时一同启动的例程,它相当于一种自身运行逻辑不太明确的子进程(里面都是对IE事件的响应和操作代码),这个特性就造 成了BHO DLL和API DLL本质的区别,BHO并不需要所有事件都必须依赖这个大家伙,它可以有自己决定的权利,只要适当的修改,就能用BHO实现类似DLL木马的功能,当 然,这并不是说我们就能在IE眼皮下公然的肆无忌弹干坏事的,由于BHO自身是作为IE子进程启动的,它就必须受到一些限制,例如程序员不能在里面自己创 建网络连接,这样会导致IE报错崩溃并供出你写的DLL,害怕BHO成为另一种后门的用户可以松口气了,要在BHO里实现Winsock大概只能在IE休 息的时候才可以,但是会有哪个用户开着个开空IE什么事情都不做呢?社区门户Nn$Z7M0F$h
社区门户_V7MC2Rg J8yv'k
   但这并不是说BHO就一定能无害了,虽然用它不能做到远程控制,但是别忘记,BHO能看到IE的所有东西,也就能任意的访问用户文件和注册表,在这个条 件成立的前提下,入侵者可以编写代码查找用户隐私,然后在适当时候通过SetSite提交出去——谁叫现在Webmail这么流行呢?这就是为什么许多厂 商发布诸如“中文网址”、“网络搜索”、“IE定制”、“IE监视”这些功能的BHO的同时都保证“不搜集用户隐私”的原因,只要你想要,BHO就能得到 一切。社区门户7q.p%to!h

*h_}+O'LR0    有些人也许会想,既然BHO是微软浏览器的权利,那我不用IE了,我用Opera、Firefox不行?对于这点固然无可厚非,但是你用不用 Windows?用不用共享软件?如果你用Windows,那么,你仍然可能处于被BHO接触到的世界,因为Windows本身就是和IE紧密结合的,这 就把“IE进程”的范围给扩大了,细心的用户大概会发现,IE里能直接访问“我的电脑”,“我的电脑”窗口也能迅速变成IE,因为它们实质都是依赖于IE 内核的,正因为这个原因,BHO可以在你打开一个文件夹时跟着偷偷启动。同时,现在的网络正处于一种“共享软件捆绑战略”大肆实施的时代,你再小心也不能 避免某些共享软件固定捆绑了BHO的行为,安装后你才会发现文件夹上又多了个什么“助手”、“搜索”了。要想彻底逃开BHO的围困,大概只能放弃使用 Windows了。社区门户MH&WIeq7sP?
社区门户q7@J4[1D(GQ
Hook,你钩住浏览器了
9I"R"g"g%M1p0 社区门户/QR q~-x+B*u
  正如《侏》里的这句话一样,入侵者也在不断寻找他们的新出路,虽然上面我说了这么多BHO的负面事例,但是真正的危机并不是只有BHO的,在一些使用BHO行不通的场合里,入侵者开始投掷他们的钩子。社区门户&~EZyK`*/

@p&P ?X u1H0   什么是钩子?让我们先看看它的官方定义:社区门户-m Z9u*qXlr

{ @} [I%V~0   钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。社区门户%Z5e5a!P#m#N-/

h0vj�I a6Uq0   社区门户5o j+S;_6J@

E4iS.f:W:}x0    钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先 得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
]N_x$|0
%p _ug.Him#w$V!F0    可能上面的官方定义对一部分读者理解有点困难,其实,钩子就像是一切程序的“先知”,一个实现了钩子的程序自身虽然也是普通程序,但是它总能在别的程序 得到数据之前就已经知道了一切,这是为什么呢?对Windows系统有一定了解的读者应该知道,Windows系统是一个通过“信息处理机制”运作的系 统,在这个系统里传递的数据都是通过“消息”(Message)的形式发送的,各个消息都遵循了官方的约定,否则就不能让系统产生回应。而且这个传递步骤 是颠倒的,例如我们关闭了某个程序,我们可能会认为是程序自己关闭后通知系统的,其实不然,当用户点击关闭按钮的时候,Windows就会把一个叫做 WM_CLOSE的消息传递给这个程序,程序接收到消息后就执行卸载自身例程的操作。理解了这点,就能知道钩子的原理了,所谓钩子程序,就是利用了系统提 供的Hook API,让自己比每一个程序都提前接收到系统消息,然后做出处理,如果一个钩子拦截了系统给某个程序的WM_CLOSE消息,那么这个程序就会因为接收不 到关闭消息而无法关闭自身。除了消息以外,钩子还可以拦截API,像我们都熟悉的屏幕翻译软件就是Hook了一些文本输出函数如TextOutA而达到了 目的。
3U&p�X1k*/ {u�~/A"G0
#eLX:{1K Y X1b0    技术让编程人员可以轻松获取其他程序的一些有用数据或传递相关数据,像现在常见的一些游戏外挂,它们就是利用Hook技术钩住了游戏窗体,然后就可以识 别游戏里面的行为和模拟发送按键鼠标消息,最终实现电脑自己玩游戏的功能。把这个技术应用到浏览器上面,就成了另一种控制浏览器行为的方法。
R)GY b4i0
*A#IPj+r5hy%t0   钩子有两种,本地钩子(Local Hook)和全局钩子(Global Hook),本地钩子只在本进程里起作用,故不属于讨论范围;全局钩子代码必须以DLL形式编写,以便在钩子生效时被其它进程所加载调用,因此我们看到的大部分Hook程序都是DLL形式的。
Mt M7[5H:t+Q b0 社区门户5i G-Oj@3y-u
   其实之前提到的BHO也可以视为一种针对IE的钩子,它钩的是IE的事件,这就是IE与BHO交互的起点,但是对于再复杂一点的操作,例如判断IE下载 的是GIF图片还是JPEG图片,BHO无能为力,因为它仅仅知道IE的事件为DownloadBegin和DownloadComplete,对于具体 内容,IE本身是不会告诉它的,否则IE岂不是要忙死了?至少我也没见过哪个领导还需要向秘书汇报中午吃了鸡肉还是鸭肉的吧,BHO可不是IE的老婆,或 者说IE没有气管炎。社区门户E M I@0Z bX
社区门户V4jC4x/pRqX ^ `
   所以,为了得到IE的更多数据,程序员开始钩IE了。与BHO不同,钩子不需要被动的等待IE事件,它直接和IE形成上司对下属的关系,这次轮到IE要 做什么都得经过它批准了。Hook形式的控制不需要DLL文件必须与IE的注册表入口产生组件关系,它可以是一个独立的DLL,通过 Rundll32.exe或自带的Loader EXE启动,而且由于它属于Hook形式,在钩子有效的情况下会被系统自动插入其他程序的进程中,是不是有点像DLL木马呢?
5i d-E+bR5Ch�N0 社区门户;t%R;n2E)q4N
   IE钩子程序载入进程后便能获知所有的消息类型、API和内容,一旦发现某个符合要求的消息,如IE执行了某个事件,或者用户输入了特定内容,钩子的处 理代码就开始工作了,它先拦截系统发送给IE的消息,然后分析消息内容,根据不同消息内容作出修改后再发给IE,就完成了一次Hook篡改过程。用著名的 3721实名搜索做例子,一些人会以为它是采用了BHO或者IURLSearchHook完成中文域名的识别跳转的,其实它是用了能够第一个得到 Windows消息的Hook技术,这样一来就可以避免被其他的竞争对手抢先解析域名了:3721的主程序就是一个Hook DLL,它监视IE地址栏的消息,一旦用户输入的是中文,它便在其他BHO类插件工作之前拦截了这个消息,并调用自身代码完成中文域名到英文URL的转换 工作,然后返回(也可能与自己的BHO DLL配合)一个让IE跳转到英文URL的消息,完成域名的翻译任务。社区门户tn&V4e$W#S o9f6E/q
社区门户 K!_0Z$T(}!uegY T
   IE钩子能帮助程序员用少量代码完成更多的IE交互工作,但是一旦这个钩子被用于犯罪,其后果也是严重的,恶意程序员可以写一个拦截IE输入的键盘钩 子,达到窃取密码的作用,这样无论你是用HTTP明文协议还是SecurityHTTP加密协议都不能逃避密码被盗的下场了,因为它抓的是你在IE里的输 入,后面的数据传输已经不重要了。社区门户d%w2].I-XS
社区门户C9Qi3P)j.Gg+`
Winsock LSP社区门户tZ(x{hZ%BDz9?
社区门户v N,S1KB7e
   全称为“Windows Socket Layered Service Provider”(分层服务提供商),这是Winsock 2.0才有的功能,它需要Winsock支持服务提供商接口(Service Provider Interface,SPI)才能实现,SPI是一种不能独立工作的技术,它依赖于系统商已经存在的基本协议提供商,如TCP/IP协议等,在这些协议上 派分出的子协议即为“分层协议”,如SSL等,它们必须通过一定的接口函数调用,LSP就是这些协议的接口。社区门户MRT#U!W,WO
社区门户9E6CN?v ? r
   通过LSP,我们可以比分析基本协议更简单的得到我们想要的数据内容,如直接得到系统上运行的浏览器当前正在进行传输的地址和内容,不管这个浏览器是 IE,还是Opera或Firefox,因为LSP是直接从Winsock获取信息的,即使不用微软生产的汽车,至少你这辆汽车一直是在微软建造的公路上 跑的吧。
.],X_.cXZ}5B0
v'M P#M_0m[0   LSP用在正途上可以方便程序员们编写监视系统网络通讯情况的Sniffer,可是现在常见的LSP都被用于浏览器劫持,使用户又多了个噩梦。
(tZ!i^)Q9jg1e0Fe0
&c:Tq9d+G9u^?0   亡羊补牢,还是居安思危?
w5[I oS_)_0 社区门户]`0d8@O s!@j�r
   也许大部分家庭用户都是在经历过一次入侵或中毒事件后才知道安全防范的重要性的,能亡羊补牢当然是好事,但是如果能对自己的要求提高一点,做到未雨绸缪 岂不是更好?我们总是依赖于别人的技术,依赖于模式化的杀毒手段,但那些始终都是别人的东西,控制权不能掌握在自己手上,这并不是很好的事情,也许,该是 暂时放弃游戏挂级、搜集明星电影,好好研读一下安全方面和系统原理书籍的时候了,否则在这个不安全的网络中,我们随时可能会迷失自己。
r6s*vQ:W0
L1XH+p&HP)]p;D%LCa0    可能有人会想,又在发感慨了。也许是的,因为清除“浏览器劫持”一般都需要手工进行,虽然现在已经有了多个检测浏览器劫持的工具如 HijackThis、Browser Hijack Recover等软件面世,但是如果你抱着和以往使用杀毒工具那样“一开扫描就安枕无忧”想法的话,你会发现自己真的会迷失了,由于BHO的特殊性(别忘 记,它是合法的),这些工具只会把系统的进程、BHO项目、启动项、LSP等需要有一定技术基础方能理解的东西显示给你,然后由你自己决定IE的明天,如 果你不曾重视过安全技术,那么就会觉得这些工具如同另一种折磨你的病毒了。社区门户&K2q J?$Kw

w%O nOob7OKG0   学,还是不学?这是个必须考虑的问题……

解析雅虎与百度流氓原理-IE劫持相关推荐

  1. 各类木材强度_凯狄解析各类抽芯铆钉的工作原理

    开口型抽芯铆钉:铆钉铆接后,钉芯在钉芯头与钉芯杆交接处或其附近断裂,钉芯头和一小部分钉芯杆留在铆钉体中.其抗剪强度类似于空心铆钉连接. 封闭型抽芯铆钉:铆钉铆接后仍保持封闭的铆钉体.在铆钉体与被连接件 ...

  2. BCC实例(如何修改NS解析方式为百度智能云解析) - 解答篇

    文章目录 一.步骤: 二.部分步骤 · 截图示下: 三.添加解析方式: 四.附:解析记录类型含义 一.步骤: 进入百度智能云 后台控制台 "域名服务BCD" ; 进入 " ...

  3. 深入解析Mysql 主从同步延迟原理及解决方案

    深入解析Mysql 主从同步延迟原理及解决方案 参考文章: (1)深入解析Mysql 主从同步延迟原理及解决方案 (2)https://www.cnblogs.com/fengff/p/1101170 ...

  4. 雅虎、百度、谷歌三大巨头比拼社区化搜索

    [标题]雅虎.百度.谷歌三大巨头比拼社区化搜索 [内容] 昨天(10日),雅虎打造社区化搜索的关键产品---雅虎空间和雅虎群组同时上线.此举标志着雅虎完成社区化搜索布局,与百度.谷歌开打新一代搜索战役 ...

  5. 如何提交网站地图,让谷歌、雅虎、百度统统收录

    怎样主动提交网站地图,让谷歌公司.雅虎.百度.live.com统统收录 主动提交网站地图,让Google.雅虎.百度.live.com统统收录你的博客.被动等着各大searchengine来收录你的博 ...

  6. 前端文摘:深入解析浏览器的幕后工作原理(转)

    前端文摘:深入解析浏览器的幕后工作原理 https://www.cnblogs.com/lhb25/p/how-browsers-work.html 您可能感兴趣的相关文章 10大流行 Metro U ...

  7. 4、Eureka 源码解析 之 Eureka Client 启动原理分析

    在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...

  8. 深度解析黑白棋AI代码原理(蒙特卡洛搜索树MCTS+Roxanne策略)

    深度解析黑白棋AI代码原理(蒙特卡洛搜索树MCTS+Roxanne策略) 文章目录 深度解析黑白棋AI代码原理(蒙特卡洛搜索树MCTS+Roxanne策略) 黑白棋规则 传统黑白棋策略 蒙特卡洛搜索树 ...

  9. 深入解析浏览器的幕后工作原理

    前端文摘:深入解析浏览器的幕后工作原理(转载出处) 您可能感兴趣的相关文章 10大流行 Metro UI Bootstrap 主题和模板 精选12款优秀 jQuery Ajax 分页插件和教程 10大 ...

最新文章

  1. 时隔16年,Science再次发布“全世界最前沿的125个科学问题”!
  2. python基础知识8——常见内置模块
  3. tcpip详解--端口号
  4. 怎么样拒绝服务器重新启动?
  5. 选了combobox里的选项后没激发change事件_stata 事件分析法
  6. MongoDB警告信息
  7. R语言中按某个符号来分割字符串
  8. c java 字节流_Java 学习(23)---(IO流之字节流)
  9. BM3D图像去噪算法原理及代码详解
  10. Java验证码生成工具类(简洁高效)
  11. Oracle Coherence中文教程五:Coherence调试
  12. 电脑COM串口管理芯片75232、75185及电路(两者可代换)
  13. Django setting ALLOWED_HOSTS
  14. 2021年5大国货品牌引爆互联网背后的营销逻辑
  15. SqlDbx远程链接DB2数据库
  16. XTUOJ-1379 折纸-贰
  17. 利用 画图 快速给图片添加文字
  18. Python复习的知识点
  19. 删除linux系统后无法开机启动,Win10/Linux双系统为什么把Linux删掉之后就不能正常启动开机了该如何处理恢复...
  20. echarts 柱状图如何不顶格_echarts图表的使用经验总结(避免踩坑)

热门文章

  1. 通过豆瓣API爬取北美票房榜
  2. 驱动框架入门之LED-linux驱动开发第4部分-朱有鹏-专题视频课程
  3. 中国数据中心IT基础设施第三方服务行业运行状况分析及未来发展趋势展望报告2022-2027年
  4. pdf添加书签操作介绍
  5. anaconda 上实现Tensorflow MASK R-CNN Demo Windows (CPU版)
  6. 图----无向图、有向图
  7. Spring Cloud 系列之 ZooKeeper 注册中心
  8. php sequelize,Sequelize 中文文档 v4 - Querying - 查询
  9. 亚马逊开店店铺选品技巧分析
  10. STM32F103RBT6 串口1正常接收,发送过程也很正常,但TXD引脚没有波形