网站屏蔽广告

来源:互联网 发布:vb 源码 编辑:程序博客网 时间:2024/06/09 15:32

感谢:http://blog.csdn.net/v6543210/article/details/41149313


有一款针对视频网站的广告进行屏蔽的chrome插件做的比较好,其在360浏览器市场上排名非常靠前。

在使用过程中发现它在页面中插入了一段代码

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <div class="player" id="player" err="">  
  2.     <object type="application/x-shockwave-flash" data="http://opengg.guodafanli.com/swf/kafan/loader.swf" width="100%" height="100%" id="movie_player">  
  3.         <param name="allowFullScreen" value="true">  
  4.         <param name="allowscriptaccess" value="always"><param name="flashvars" value="VideoIDS=XODI3MzIyNzgw&ShowId=0&category=91&Cp=0&ev=2&Light=on&THX=off&unCookie=0&frame=0&pvid=1416053534395Fq3&uepflag=1&Tid=0&isAutoPlay=true&Version=/v1.0.1002&show_ce=0&winType=interior&Type=Folder&Fid=23073811&Pt=0&Ob=1&plchid=a&embedid=AjIwNjgzMDY5NQJ3d3cueW91a3UuY29tAi9pLw==&vext=bc%3D%26pid%3D1416053534395Fq3%26unCookie%3D0%26frame%3D0%26type%3D1%26fob%3D1%26fpo%3D0%26svt%3D0%26emb%3DAjIwNjgzMDY5NQJ3d3cueW91a3UuY29tAi9pLw%3D%3D%26dn%3D%E7%BD%91%E9%A1%B5%26hwc%3D1%26mtype%3Doth">  
  5.         <param name="movie" value="http://static.youku.com/v1.0.0483/v/swf/loader.swf">  
  6.         <div class="player_html5">  
  7.             <div class="picture" style="height:100%">  
  8.                 <div style="line-height:460px;">  
  9.                     <span style="font-size:18px">您还没有安装flash播放器,请点击  
  10.                         <a href="http://www.adobe.com/go/getflash" target="_blank">这里</a>  
  11.                         安装  
  12.                     </span>  
  13.                 </div>  
  14.             </div>  
  15.         </div>  
  16.     </object>  
  17. </div>  

把优酷的播放器换成了自己的播放器。

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <a target=_blank href="http://opengg.guodafanli.com">http://opengg.guodafanli.com</a>  

在页面打开过程中,还要访问下面的网址:

http://app2.522.com.cn

这个就更奇怪了,这个网站经查是注册在

还注册了以下的网站:



[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. GET http://app2.522.com.cn/playlist2.php/v.youku.com/player/getPlayList/VideoIDS/XODI3MzIyNzgw/timezone/+08/version/5/source/video/Type/Folder/Fid/23073811/Pt/0/Ob/1?ctype=10&password=&n=3&ran=1731&ev=1 HTTP/1.1  
  2. Host: app2.522.com.cn  
  3. Connection: keep-alive  
  4. User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36  
  5. Accept: */*  
  6. Referer: http://opengg.guodafanli.com/swf/kafan/loader.swf  
  7. Accept-Encoding: gzip,deflate,sdch  
  8. Accept-Language: zh-CN,zh;q=0.8  

以上请求返回的是以下数据,看起来是优酷的视频分段信息。

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. HTTP/1.1 200 OK  
  2. Content-Type: text/html  
  3. Server: Microsoft-IIS/6.0  
  4. X-Powered-By: PHP/5.2.9-2  
  5. Date: Sat, 15 Nov 2014 12:11:58 GMT  
  6. Connection: close  
  7.   
  8.   
  9. {"folder":{"total":6,"size":10,"page":1,"folderId":23073811,"ownerId":36758550,"totalPage":1},"data":[{"ct":"a","cs":"2143","logo":"http:\/\/g2.ykimg.com\/1100641F4654672BB118D00230E41601BF6739-DED1-4859-9A8E-43D3A7370507","seed":7803,"tags":["彭丽媛","g20"],"categories":"91","videoid":"206830695","vidEncoded":"XODI3MzIyNzgw","list":[{"seq":0,"vid":"206830695","vidEncoded":"XODI3MzIyNzgw","title":"彭丽媛与袋鼠亲密接触 弯腰喂食","vv":0},{"seq":1,"vid":"206798483","vidEncoded":"XODI3MTkzOTMy","title":"二十国集团领导人第九次峰会举行 各国元首夫人与考拉亲密接触","vv":0},{"seq":2,"vid":"206787322","vidEncoded":"XODI3MTQ5Mjg4","title":"习近平抵达布里斯班出席二十国剧团领导人峰会并对澳进行国事访问","vv":0},{"seq":3,"vid":"206725893","vidEncoded":"XODI2OTAzNTcy","title":"直播港澳台20141114 中国借G20加强参与全球治理","vv":0},{"seq":4,"vid":"206728238","vidEncoded":"XODI2OTEyOTUy","title":"曝澳方外交秘密武器:或邀请彭丽媛抱考拉","vv":0},{"seq":5,"vid":"206765977","vidEncoded":"XODI3MDYzOTA4","title":"澳大利亚:G20峰会举行  聚焦经济议题[东方午新闻]","vv":0}],"list_pre":{},"list_next":{"seq":1,"vid":"206798483","vidEncoded":"XODI3MTkzOTMy","title":"二十国集团领导人第九次峰会举行 各国元首夫人与考拉亲密接触","vv":0},"username":"新视点","userid":"36758550","title":"彭丽媛与袋鼠亲密接触 弯腰喂食","up":0,"down":0,"ts":"At6kQzJXdTc1DkNnAXuS7jA","tsup":"At6jyTFXdTc1DkNnAvGV7jA","key1":"b344a731","key2":"79d120380f053107","tt":"1","ip":712601273,"ep":"dvtCHZeoyLOU\/6BS2AwdkRWKSBEwUaxNatZXLlyozhg=","videoSource":"1","seconds":"15.00","streamfileids":{"flv":"6*17*6*6*6*13*6*5*6*6*9*43*32*26*13*19*24*37*32*5*2*43*6*13*17*6*36*43*5*32*17*19*2*41*24*5*2*6*33*62*66*36*17*33*62*32*41*13*33*26*26*24*9*33*36*37*17*13*37*26*5*37*24*9*62*6*","mp4":"6*17*6*6*6*37*6*5*6*6*9*43*32*26*13*66*9*26*32*5*2*43*6*13*17*6*36*43*5*32*17*19*2*41*24*5*2*6*33*62*66*36*17*33*62*32*41*13*33*26*26*24*9*33*36*37*17*13*37*26*5*37*24*9*62*6*","hd2":"6*17*6*6*6*5*6*5*6*6*9*43*32*26*13*66*41*36*32*5*2*43*6*13*17*6*36*43*5*32*17*19*2*41*24*5*2*6*33*62*66*36*17*33*62*32*41*13*33*26*26*24*9*33*36*37*17*13*37*26*5*37*24*9*62*6*"},"segs":{"flv":[{"no":0,"size":"537222","seconds":15,"k":"a61c7d07afc3df85282a039d","k2":"1beadcb47208021f6"}],"mp4":[{"no":0,"size":"1032773","seconds":15,"k":"740695dcee2e264e282a039d","k2":"1a99c4637b2a61d65"}],"hd2":[{"no":0,"size":"2262763","seconds":15,"k":"02554e5406a46fb8261e0294","k2":"193ff830c2a5496ec"}]},"streamsizes":{"flv":"537222","mp4":"1032773","hd2":"2262763"},"stream_ids":{"flv":"250696624","mp4":"250697769","hd2":"250698513"},"streamlogos":{"flv":1,"mp4":1,"hd2":1},"streamtypes":["flv","mp4","hd2"],"streamtypes_o":["hd2","flvhd","mp4"]}],"user":{"id":0},"verify_user":{"uid":36758550,"nick_name":"新视点","verified":1,"verified_reason":"优酷网资讯频道官方空间","avatar":{"big":"http:\/\/g3.ykimg.com\/0130391F484AC5AEFE957A0230E416EE12E097-3338-E822-1BB2-2D5CABC2F73B","middle":"http:\/\/g3.ykimg.com\/0130391F484AC5AEFEDE9B0230E4169483C6A0-49D0-6CF7-9F58-5F615A14F12E","small":"http:\/\/g3.ykimg.com\/0130391F484AC5AEFEDE9B0230E4169483C6A0-49D0-6CF7-9F58-5F615A14F12E","large":"http:\/\/g3.ykimg.com\/0130391F484AC5AEFE957A0230E416EE12E097-3338-E822-1BB2-2D5CABC2F73B"},"verified_icon":1,"video_note":0,"reward":0,"backstage_brand":1,"user_brand":1,"followers_count":35634,"user_center":"http:\/\/i.youku.com\/u\/UMTQ3MDM0MjAw","home_url":"http:\/\/i.youku.com\/u\/UMTQ3MDM0MjAw","show_brand":1,"subscription":0},"controller":{"search_count":true,"mp4_restrict":1,"stream_mode":1,"video_capture":true,"hd3_enabled":false,"area_code":330100,"dma_code":37963,"continuous":0,"playmode":"folder","circle":false,"tsflag":true,"other_disable":false,"xplayer_disable":false,"app_disable":false,"share_disabled":false,"download_disabled":false,"pc_disabled":false,"pad_disabled":false,"mobile_disabled":false,"tv_disabled":false,"comment_disabled":false}}  

在该插件第一次运行时,会从网上下载一些脚本,

http://sub.adtchrome.com/html5player.txt

http://sub.adtchrome.com/videoadjs.txt

都是经过base64加密的。

很容易解密。

主要的脚本如下:

[javascript] view plaincopy在CODE上查看代码片派生到我的代码片
  1. [ADT 3]  
  2. ! Checksum: vXO2skD37egAcrKzRVhe1A  
  3. ! Version: 20141102  
  4. ! Title: 过滤增强脚本  
  5. ! Homepage: http://www.adtchrome.com/extension/adt-videolist.html  
  6. ! Match: http  
  7. ! Begin: --  
  8. if(!document.URL.match(new RegExp('(v|music)\\.baidu\\.com'))){  
  9. (function() {  
  10.     Function.prototype.bind = function() {  
  11.         var fn = this, args = Array.prototype.slice.call(arguments), obj = args.shift();  
  12.         return function() {  
  13.             return fn.apply(obj, args.concat(Array.prototype.slice.call(arguments)));  
  14.         };  
  15.     };  
  16.     function A() {}  
  17.     A.prototype = {  
  18.         rules: {  
  19.             'youku_loader': {  
  20.                 'find': /^http:\/\/static\.youku\.com\/.*(loader|player_.*)(_taobao)?\.swf/,  
  21.                 'replace''http://swf.adtchrome.com/loader.swf'  
  22.             },  
  23.             'youku_out': {  
  24.                 'find': /^http:\/\/player\.youku\.com\/player\.php\/.*sid\/(.*)/,  
  25.                 'replace''http://swf.adtchrome.com/loader.swf?VideoIDS=$1'  
  26.             },  
  27.             'pps_pps': {  
  28.                 'find': /^http:\/\/www\.iqiyi\.com\/player\/cupid\/common\/pps_flvplay_s\.swf/,  
  29.                 'replace''http://swf.adtchrome.com/pps_20140420.swf'  
  30.             },  
  31.             'iqiyi_1': {  
  32.                 'find': /^http:\/\/www\.iqiyi\.com\/player\/cupid\/common\/.+\.swf$/,  
  33.                 'replace''http://swf.adtchrome.com/iqiyi_20140624.swf'  
  34.             },  
  35.             'iqiyi_2': {  
  36.                 'find': /^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/.+\.swf$/,  
  37.                 'replace''http://swf.adtchrome.com/iqiyi_20140624.swf'  
  38.             },  
  39.             'iqiyi_duba': {  
  40.                 'find': /^http:\/\/dispatcher\.video\.qiyi\.com\/disp\/shareplayer\.swf/,  
  41.                 'replace''http://swf.adtchrome.com/iqiyi_20140624.swf'  
  42.             },  
  43.             'ku6': {  
  44.                 'find': /^http:\/\/player\.ku6cdn\.com\/default\/.*\/\d+\/(v|player|loader)\.swf/,  
  45.                 'replace''http://swf.adtchrome.com/ku6_20140420.swf'  
  46.             },  
  47.             'ku6_topic': {  
  48.                 'find': /^http:\/\/player\.ku6\.com\/inside\/(.*)\/v\.swf/,  
  49.                 'replace''http://swf.adtchrome.com/ku6_20140420.swf?vid=$1'  
  50.             },  
  51.             'sohu': {  
  52.                 'find': /^http:\/\/tv\.sohu\.com\/upload\/swf(\/p2p)?\/\d+\/Main\.swf/,  
  53.                 'replace''http://swf.adtchrome.com/sohu_20140917.swf'  
  54.             },  
  55.             'sohu_share': {  
  56.                 'find': /^http:\/\/share\.vrs\.sohu\.com\/my\/v\.swf&/,  
  57.                 'replace''http://swf.adtchrome.com/sohu_20140917.swf?'  
  58.             },  
  59.             'sohu_sogou' : {  
  60.                 'find': /^http:\/\/share\.vrs\.sohu\.com\/(\d+)\/v\.swf/,  
  61.                 'replace''http://swf.adtchrome.com/sohu_20140917.swf?vid=$1'  
  62.             },  
  63.             /*'letv': { 
  64.                 'find': /^http:\/\/player\.letvcdn\.com\/p\/.*\/newplayer\/LetvPlayer\.swf/, 
  65.                 'replace': 'http://swf.adtchrome.com/letv_20140716.swf' 
  66.             }, 
  67.             'letv_topic': { 
  68.                 'find': /^http:\/\/player\.hz\.letv\.com\/hzplayer\.swf\/v_list=zhuanti/, 
  69.                 'replace': 'http://swf.adtchrome.com/letv_20140716_topic.swf' 
  70.             },*/  
  71.             'letv_duowan': {  
  72.                 'find': /^http:\/\/assets\.dwstatic\.com\/video\/vpp\.swf/,  
  73.                 'replace''http://swf.adtchrome.com/letv_duowan_20140811.swf'  
  74.             }  
  75.         },  
  76.         _done: null,  
  77.         get done() {  
  78.             if(!this._done) {  
  79.                 this._done = new Array();  
  80.             }  
  81.             return this._done;  
  82.         },  
  83.         addAnimations: function() {  
  84.             var style = document.createElement('style');  
  85.             style.type = 'text/css';  
  86.             style.innerHTML = 'object,embed{\  
  87.                 -webkit-animation-duration:.001s;-webkit-animation-name:playerInserted;\  
  88.                 -ms-animation-duration:.001s;-ms-animation-name:playerInserted;\  
  89.                 -o-animation-duration:.001s;-o-animation-name:playerInserted;\  
  90.                 animation-duration:.001s;animation-name:playerInserted;}\  
  91.                 @-webkit-keyframes playerInserted{from{opacity:0.99;}to{opacity:1;}}\  
  92.                 @-ms-keyframes playerInserted{from{opacity:0.99;}to{opacity:1;}}\  
  93.                 @-o-keyframes playerInserted{from{opacity:0.99;}to{opacity:1;}}\  
  94.                 @keyframes playerInserted{from{opacity:0.99;}to{opacity:1;}}';  
  95.             document.getElementsByTagName('head')[0].appendChild(style);  
  96.         },  
  97.         animationsHandler: function(e) {  
  98.             if(e.animationName === 'playerInserted') {  
  99.                 this.replace(e.target);  
  100.             }  
  101.         },  
  102.         replace: function(elem) {  
  103.             if(this.done.indexOf(elem) != -1) return;  
  104.             this.done.push(elem);  
  105.   
  106.             var player = elem.data || elem.src;  
  107.             if(!player) return;  
  108.   
  109.             var i, find, replace = false;  
  110.             for(i in this.rules) {  
  111.                 find = this.rules[i]['find'];  
  112.                 if(find.test(player)) {  
  113.                     replace = this.rules[i]['replace'];  
  114.                     if('function' === typeof this.rules[i]['preHandle']) {  
  115.                         this.rules[i]['preHandle'].bind(this, elem, find, replace, player)();  
  116.                     }else{  
  117.                         this.reallyReplace.bind(this, elem, find, replace)();  
  118.                     }  
  119.                     break;  
  120.                 }  
  121.             }  
  122.         },  
  123.         reallyReplace: function(elem, find, replace) {  
  124.             elem.data && (elem.data = elem.data.replace(find, replace)) || elem.src && ((elem.src = elem.src.replace(find, replace)) && (elem.style.display = 'block'));  
  125.             var b = elem.querySelector("param[name='movie']");  
  126.             this.reloadPlugin(elem);  
  127.         },  
  128.         reloadPlugin: function(elem) {  
  129.             var nextSibling = elem.nextSibling;  
  130.             var parentNode = elem.parentNode;  
  131.             parentNode.removeChild(elem);  
  132.             var newElem = elem.cloneNode(true);  
  133.             this.done.push(newElem);  
  134.             if(nextSibling) {  
  135.                 parentNode.insertBefore(newElem, nextSibling);  
  136.             } else {  
  137.                 parentNode.appendChild(newElem);  
  138.             }  
  139.         },  
  140.         init: function() {  
  141.             var handler = this.animationsHandler.bind(this);  
  142.             document.body.addEventListener('webkitAnimationStart', handler, false);  
  143.             document.body.addEventListener('msAnimationStart', handler, false);  
  144.             document.body.addEventListener('oAnimationStart', handler, false);  
  145.             document.body.addEventListener('animationstart', handler, false);  
  146.             this.addAnimations();  
  147.         }  
  148.     };  
  149.     new A().init();  
  150. })();  
  151. }  
  152.   
  153. // 20140730  
  154. (function cnbeta() {  
  155.     if (document.URL.indexOf('cnbeta.com') >= 0) {  
  156.         var elms = document.body.querySelectorAll("p>embed");  
  157.         Array.prototype.forEach.call(elms, function(elm) {  
  158.             elm.style.marginLeft = "0px";  
  159.         });  
  160.     }  
  161. })();  
  162.   
  163. // 20140730  
  164. (function kill_baidu() {  
  165.     if (document.URL.indexOf('baidu.com') >= 0) {  
  166.         var elms = document.body.querySelectorAll("#content_left>div[style='display:block !important'], #content_left>table[style='display:table !important']");  
  167.         Array.prototype.forEach.call(elms, function(elm) {  
  168.             elm.removeAttribute("style");  
  169.         });  
  170.     }  
  171.   
  172.     window.setTimeout(kill_baidu, 400);  
  173. })();  
  174.   
  175. // 20140928  
  176. (function v_baidu() {  
  177.     if (document.URL.match(/http:\/\/baidu.*fr=/)) {  
  178.         var child = document.body.querySelector('div.bd>script');  
  179.         child.parentNode.removeChild(child);  
  180.         advTimer.last = 1;  
  181.         advTimer.cur = 1;  
  182.         advTimer.onbeforestop();  
  183.     }  
  184. })();  
  185.   
  186. // 20140922  
  187. (function kill_360() {  
  188.     if (document.URL.indexOf('so.com') >= 0) {  
  189.         document.getElementById("e_idea_pp").style.display = none;  
  190.     }  
  191. })();  



0 0