[老文章搬家] 關於屏蔽優酷視頻廣告的一個方法

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作一個通用版。

截圖(假廣告時長兩秒):


存在的問題:
優酷的播放器能夠正常播放假廣告,可是土豆和新浪的都不能夠,接受到文件以後他們會播放失敗,以後開始正常播放視頻。我專門下載了他們本身的廣告文件做爲假廣告,仍是不行。可能他們使用了某種簽名機制,這個有待研究,好在他們沒有像優酷同樣防屏蔽,我暫時直接攔截掉了他們的廣告,如今能夠正常使用。

下載:摸我框架

相關文章
相關標籤/搜索