[老文章搬家] 关于屏蔽优酷视频广告的一个方法

11年的老文章,稳重那个插件让我爽了好久,不事后来就买会员了。代码我已经遗失了,不过无所谓,思路仍是明确的,我后来在 Chrome 上测试过,同样能用。html

 

==== 正文 ====web

 

需求:优酷最近搞了一个广告防屏蔽,致使修改host的方法不能用了。咱们须要一个新方法来绕过这个防屏蔽机制。

基本思想:新版的优酷flv player下载不到广告会罢工30秒,既然不能屏蔽广告,那咱们就替换广告文件,用一个假广告文件让flv player播放。

实现:
首先抓一下包,或者用Fiddle2拦截请求,会发现优酷的广告是个flv文件,而土豆和新浪的广告是f4v文件或者swf文件(不经常使用的就先不关心了)。咱们找到广告url的特色,就能够实现替换。
具体替换方式,有两种选择(驱动之类的bt方法我就不说了):chrome

  • 第一种是写一个伪代理服务注册进系统,同时用PAC脚本根据url自动切换代理,发现是广告url就切换到咱们写的伪代理,而伪代理的工做就是提供假广告文件。
  • 第二种方式是利用浏览器插件拦截和替换请求。这个要针对不一样浏览器开发,好比chrome扩展是基于js的,其拦截请求的接口叫
     
    experimental.webRequest,是个实验API,google不建议使用;同时chrome和firefox都支持NPAPI,而IE的插件机制是基于COM的。网上有个叫FireBreath的开源项目,是一个跨浏览器和操做系统的浏览器插件框架,是个好东西,可是我以前尚未用过。

咱们先针对之后总浏览器实验一下功能能不能实现,笔者针对的是IE。
IE的插件是个臭名昭著的东西,可是对开发者而言仍是比较方便的,由于它比较“自由”,能够无所顾忌的使用C++干任何事儿。IE插件有三种:

浏览器

  • 第一种是古老的ActiveX,这个你们确定都很熟悉。PS:讲个笑话,我以前公司作过一个项目,要求提供CS和BS客户端。咱们的CS客户端是现成的,而BS客户端就是CS客户端封装进一个巨大的ActiveX放进网页里,并且CS客户端是Qt4开发的,你能够想象ActiveX有多大。。。

  • 第二种叫BHO(Browser Helper Object),一样古老的技术,不少流氓插件和恶心工具栏就是这个东西,可是google的chrome frame也是基于这个东西,可见技术如刀,区别在人。BHO可让你把dll嵌入IE进程,拦截一些IE操做,好比前进后退,可是太底层的不行,好比抓包确定不行。
  • 第三种比较特殊,叫Asynchronous Pluggable Protocols,这个东西也很经常使用,它可让你拦截某个协议下的请求,好比http://,迅雷拦截thrunder://就是用的这个技术。Asynchronous Pluggable Protocols能够永久拦截,须要写注册表,也能够进程内临时拦截,调用一个API就能够,可是只针对本进程有效。不少电子书软件和使用WebBrowser控件制做华丽GUI的软件使用这种临时拦截。

我用的方法就是写一个BHO嵌入IE进程,拦截IE的Navigate事件,若是是感兴趣的视频网站就开启Asynchronous Pluggable Protocols拦截全部http请求,找到广告文件的请求,用假广告文件替换。假广告文件是个很短的flv或者swf,这样就绕过了防屏蔽机制。

结果:
目前只是实现了基本功能,能够拦截优酷,土豆,新浪和奇艺的视频广告(其余的我不怎么用),而且暂时不针对外链的视频。暂时只支持IE,下一步用FireBreath作一个通用版。

截图(假广告时长两秒):


存在的问题:
优酷的播放器能够正常播放假广告,可是土豆和新浪的都不能够,接受到文件以后他们会播放失败,以后开始正常播放视频。我专门下载了他们本身的广告文件做为假广告,仍是不行。可能他们使用了某种签名机制,这个有待研究,好在他们没有像优酷同样防屏蔽,我暂时直接拦截掉了他们的广告,如今能够正常使用。

下载:摸我框架

相关文章
相关标签/搜索