人生半路, 杀出个程序

什么时候才能学会编程啊?

视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一)

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

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

实现:
首先抓一下包,或者用Fiddle2拦截请求,会发现优酷的广告是个flv文件,而土豆和新浪的广告是f4v文件或者swf文件(不常用的就先不关心了)。我们找到广告url的特点,就可以实现替换。
具体替换方式,有两种选择(驱动之类的bt方法我就不说了):
  • 第一种是写一个伪代理服务注册进系统,同时用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做一个通用版。

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


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

下载:http://www.cppblog.com/Files/legendlee/FlvAdBlock.zip

posted on 2011-09-28 09:27 欲三更 阅读(9400) 评论(8)  编辑 收藏 引用

评论

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一)[未登录] 2011-09-29 09:45 jans2002

在CPP的博客上不发源码不符合惯例啊  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2011-09-29 13:18 欲三更

@jans2002
因为只是个雏形,很多功能还没做呢,代码稀烂稀烂的,我都不好意思拿出来。
再说我都把原理和实现说的这么清楚了,相关文档也有链接,应该比提供代码还容易懂吧?  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2011-10-16 23:46 路过

其实有更简单的办法……
如果是在xp下
直接把C:\Documents and Settings\你的用户名\Application Data\Macromedia\Flash Player\#SharedObjects\唯一一个文件夹\static.youku.com
这个路径的最后一个文件夹“static.youku.com”替换成同名文件  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2011-10-17 23:10

大神啊~~广大chrome用户就等着webrequest这个API转正啦,转正以后就能送优酷anti-antiblock广告上西天啦  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2011-10-19 05:31 欲三更

@哇
但是我估计它转正的可能性并不大. 这个东西能做的事情太多了.
  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2011-10-19 05:38 欲三更

@路过
谢谢, 受教了. 若不是你的提醒我不会注意到flash的shareobject...虽然我现在还没太弄明白你的方法的原理..  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2012-07-31 13:10 ASN

现在有办法吗,优酷越来越高明了.  回复  更多评论   

# re: 视频网站广告屏蔽插件,支持升级后的优酷防屏蔽(一) 2015-08-17 16:23 user

2015.08在IE11中实测无效  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔档案(1)

另一个我

最新评论