視頻網站廣告屏蔽插件,支持升級后的優酷防屏蔽(一)
需求:優酷最近搞了一個廣告防屏蔽,導致修改host的方法不能用了。我們需要一個新方法來繞過這個防屏蔽機制。
基本思想:新版的優酷flv player下載不到廣告會罷工30秒,既然不能屏蔽廣告,那我們就替換廣告文件,用一個假廣告文件讓flv player播放。
實現:
首先抓一下包,或者用Fiddle2攔截請求,會發現優酷的廣告是個flv文件,而土豆和新浪的廣告是f4v文件或者swf文件(不常用的就先不關心了)。我們找到廣告url的特點,就可以實現替換。
具體替換方式,有兩種選擇(驅動之類的bt方法我就不說了):
IE的插件是個臭名昭著的東西,但是對開發者而言還是比較方便的,因為它比較“自由”,可以無所顧忌的使用C++干任何事兒。IE插件有三種:
結果:
目前只是實現了基本功能,可以攔截優酷,土豆,新浪和奇藝的視頻廣告(其他的我不怎么用),并且暫時不針對外鏈的視頻。暫時只支持IE,下一步用FireBreath做一個通用版。
截圖(假廣告時長兩秒):

存在的問題:
優酷的播放器可以正常播放假廣告,但是土豆和新浪的都不可以,接受到文件之后他們會播放失敗,之后開始正常播放視頻。我專門下載了他們自己的廣告文件作為假廣告,還是不行。可能他們使用了某種簽名機制,這個有待研究,好在他們沒有像優酷一樣防屏蔽,我暫時直接攔截掉了他們的廣告,現在可以正常使用。
下載:http://www.shnenglu.com/Files/legendlee/FlvAdBlock.zip
基本思想:新版的優酷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的插件是個臭名昭著的東西,但是對開發者而言還是比較方便的,因為它比較“自由”,可以無所顧忌的使用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的軟件使用這種臨時攔截。
結果:
目前只是實現了基本功能,可以攔截優酷,土豆,新浪和奇藝的視頻廣告(其他的我不怎么用),并且暫時不針對外鏈的視頻。暫時只支持IE,下一步用FireBreath做一個通用版。
截圖(假廣告時長兩秒):
存在的問題:
優酷的播放器可以正常播放假廣告,但是土豆和新浪的都不可以,接受到文件之后他們會播放失敗,之后開始正常播放視頻。我專門下載了他們自己的廣告文件作為假廣告,還是不行。可能他們使用了某種簽名機制,這個有待研究,好在他們沒有像優酷一樣防屏蔽,我暫時直接攔截掉了他們的廣告,現在可以正常使用。
下載:http://www.shnenglu.com/Files/legendlee/FlvAdBlock.zip