Advertisement
Guest User

Channel4.com Advertising Arms Race

a guest
Jan 22nd, 2018
765
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //EXTRACTED FROM http://www.channel4.com/all4fplayer/1.0.291/4odplayer_bips_r.swf
  2. //https://web.archive.org/web/20180123001617/http://www.channel4.com/all4fplayer/1.0.291/4odplayer_bips_r.swf
  3. //AND YOU WONDER WHY PEOPLE RESORT TO TORRENTS...
  4.  
  5. //START MAIN.AS SNIPPET
  6. private function getABfilelist(param1:int = 0) : Array
  7. {
  8.    var _loc2_:String = "If you are looking at this code, you shouldn\'t be. It\'s not an arms race. It\'s not a silly game.";
  9.    //YES, CHANNEL4, IT IS AN ARMS RACE. AND YOU STARTED IT.
  10.    var _loc3_:* = [];
  11.    if(param1 == 0)
  12.    {
  13.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/UberlayProxyCreative.swf");
  14.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/UberlayAdRenderer.swf");
  15.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/VPAIDAdRenderer.swf");
  16.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/VastTranslator.swf");
  17.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/ExternalHTMLAdRenderer.swf");
  18.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/Video2AdRenderer.swf");
  19.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/PauseAdExtension.swf");
  20.       _loc3_.push("http://cdn.innovid.com/2.33.4747/platform/vpaid/VPAIDIRollPackage.swf");
  21.    }
  22.    else if(param1 == 1)
  23.    {
  24.       _loc3_.push(assetInfo.fwServer + AdblockUtils.randomWord() + "=" + AdblockUtils.randomWord());
  25.       _loc3_.push(assetInfo.fwServerBaseURL + "/ad/l/1?" + AdblockUtils.randomWord() + "=" + AdblockUtils.randomWord());
  26.       _loc3_.push("http://b.scorecardresearch.com/p?c1=1&c2=[" + AdblockUtils.randomParam() + "]&c4=947&c5=01&c6=[" + AdblockUtils.randomParam() + "]");
  27.       _loc3_.push("http://ad-emea.doubleclick.net/ad/N6311.104.CHANNEL41/B8063750;sz=1x1;ord=[" + AdblockUtils.randomParam() + "]?");
  28.       _loc3_.push("http://static.innovid.com/iroll/config/1hkcc2.xml?cb=[" + AdblockUtils.randomParam() + "]");
  29.       _loc3_.push("http://s.innovid.com/1x1.gif?channel%5Fid=131&website=http%3A%2F%2Fpreview%2Einnovid%2Ecom&viewer%5Fid=[" + AdblockUtils.randomParam() + "]&video%5Fid=3323&publisher%5Fid=68&session%5Fid=[" + AdblockUtils.randomParam() + "]&size=640x360&project%5Fhash=1hk7rt&fver=WIN%2011%2C8%2C800%2C168&ver=2%2E4%2E3&r=[" + AdblockUtils.randomParam() + "]&placement%5Ftag%5Fid=0&client%5Fid=68&project%5Fstate=0&action=init");
  30.    }
  31.    else if(param1 == 2)
  32.    {
  33.       _loc3_.push(assetInfo.fwAdManagerBaseURL + "/p/c4_live/AdManager.swf?logLevel=QUIET&cb=1");
  34.    }
  35.    else if(param1 == 3)
  36.    {
  37.       _loc3_.push(assetInfo.fwServer);
  38.    }
  39.    else if(param1 == 4)
  40.    {
  41.       _loc3_.push("http://ak.http.anno.channel4.com/m/1/174057/" + AdblockUtils.randomNumber(1) + "/" + AdblockUtils.randomNumber(6) + "/" + AdblockUtils.randomWord(2).toUpperCase() + "_" + AdblockUtils.randomWord().toUpperCase() + "_" + AdblockUtils.randomWord(4).toUpperCase() + "_" + AdblockUtils.randomWord(5).toUpperCase() + ".mp4");
  42.       _loc3_.push("http://cf.http.anno.channel4.com/m/1/174057/" + AdblockUtils.randomNumber(1) + "/" + AdblockUtils.randomNumber(6) + "/" + AdblockUtils.randomWord(3).toUpperCase() + "-" + AdblockUtils.randomWord(2).toUpperCase() + "_" + AdblockUtils.randomWord().toUpperCase() + "_" + AdblockUtils.randomWord(3).toUpperCase() + "_" + AdblockUtils.randomWord(5).toUpperCase() + ".mp4");
  43.    }
  44.    return _loc3_;
  45. }
  46.  
  47. private function checkABprelim() : void
  48. {
  49.    var _loc2_:Array = getABfilelist(3);
  50.    var _loc1_:AdblockChecker = new AdblockChecker(_loc2_[randRange(1,_loc2_.length) - 1],"POST");
  51.    _loc1_.init();
  52.    _loc1_.addEventListener("AB",onABFound);
  53.    _loc1_.addEventListener("ANB",checkABprelimTwo);
  54. }
  55.  
  56. private function checkABprelimTwo(param1:Event) : void
  57. {
  58.    var _loc3_:Array = getABfilelist(4);
  59.    var _loc2_:AdblockChecker = new AdblockChecker(_loc3_[randRange(1,_loc3_.length) - 1]);
  60.    _loc2_.init();
  61.    _loc2_.addEventListener("AB",onABFound);
  62.    _loc2_.addEventListener("ANB",checkABmain);
  63. }
  64.  
  65. private function checkABmain(param1:Event) : void
  66. {
  67.    §_-t§ = false;
  68.    var _loc3_:Array = getABfilelist(0);
  69.    var _loc2_:AdblockChecker = new AdblockChecker(_loc3_[randRange(1,_loc3_.length) - 1]);
  70.    _loc2_.init();
  71.    _loc2_.addEventListener("AB",onABFound);
  72.    _loc2_.addEventListener("ANB",onABNotFound);
  73. }
  74.  
  75. private function checkABsecondary() : void
  76. {
  77.    var _loc2_:Array = getABfilelist(2);
  78.    var _loc1_:AdblockChecker = new AdblockChecker(_loc2_[randRange(1,_loc2_.length) - 1]);
  79.    _loc1_.init();
  80.    _loc1_.addEventListener("AB",onABFoundSecondary);
  81.    _loc1_.addEventListener("ANB",onABNotFoundSecondary);
  82. }
  83.  
  84. private function onABNotFoundSecondary(param1:Event) : void
  85. {
  86.    §_-t§ = false;
  87.    var _loc2_:Array = getABfilelist(4);
  88.    var _loc3_:AdblockChecker = new AdblockChecker(_loc2_[randRange(1,_loc2_.length) - 1]);
  89.    _loc3_.init();
  90.    _loc3_.addEventListener("AB",onABFoundSecondary);
  91. }
  92.  
  93. private function onABNotFound(param1:Event) : void
  94. {
  95.    §_-t§ = false;
  96.    var _loc2_:Array = getABfilelist(1);
  97.    var _loc3_:AdblockChecker = new AdblockChecker(_loc2_[randRange(1,_loc2_.length) - 1]);
  98.    _loc3_.init();
  99.    _loc3_.addEventListener("AB",onABFound);
  100.    _loc3_.addEventListener("ANB",onABNotFound_b);
  101. }
  102. //END MAIN.AS SNIPPET
  103.  
  104. //START UTILS.ADBLOCKCHECKER.AS
  105. package utils
  106. {
  107.    import flash.display.Sprite;
  108.    import flash.events.Event;
  109.    import flash.events.HTTPStatusEvent;
  110.    import flash.events.IOErrorEvent;
  111.    import flash.events.SecurityErrorEvent;
  112.    import flash.net.URLLoader;
  113.    import flash.net.URLRequest;
  114.    import flash.net.URLVariables;
  115.    
  116.    public class AdblockChecker extends Sprite
  117.    {
  118.      
  119.       private static const AB:String = "AB";
  120.      
  121.       private static const ANB:String = "ANB";
  122.        
  123.      
  124.       private var §_-3J§:URLLoader;
  125.      
  126.       private var request:URLRequest;
  127.      
  128.       private var dataFormat:String = "text";
  129.      
  130.       private var §_-5c§:Boolean = false;
  131.      
  132.       private var §_-4u§:Boolean = false;
  133.      
  134.       private var status:String = "";
  135.      
  136.       private var data:String;
  137.      
  138.       private var sMethod:String;
  139.      
  140.       public function AdblockChecker(param1:String = "http://2a7e9.v.fwmrm.net/crossdomain.xml", param2:String = "GET")
  141.       {
  142.          var _loc3_:* = null;
  143.          super();
  144.          sMethod = param2;
  145.          request = new URLRequest(param1);
  146.          if(sMethod == "POST")
  147.          {
  148.             _loc3_ = new URLVariables();
  149.             _loc3_.ignore = "true";
  150.             request.data = _loc3_;
  151.             request.method = "POST";
  152.          }
  153.       }
  154.      
  155.       public function init() : void
  156.       {
  157.          §_-3J§ = new URLLoader();
  158.          §_-3J§.dataFormat = dataFormat;
  159.          §_-3J§.addEventListener("complete",completeHandler,false,0,true);
  160.          §_-3J§.addEventListener("ioError",IOErrorHandler,false,0,true);
  161.          §_-3J§.addEventListener("securityError",secErrorHandler,false,0,true);
  162.          §_-3J§.addEventListener("httpStatus",httpStatusHandler,false,0,true);
  163.          §_-3J§.load(request);
  164.       }
  165.      
  166.       private function httpStatusHandler(param1:HTTPStatusEvent) : void
  167.       {
  168.          status = param1.status.toString();
  169.          §_-5c§ = true;
  170.          doCheck();
  171.       }
  172.      
  173.       private function doCheck() : void
  174.       {
  175.          if(§_-5c§ && §_-4u§)
  176.          {
  177.             if((§_-3J§.data == null || §_-3J§.data.toString() == "") && status == "0" || §_-3J§.data.toString().lastIndexOf("Fiddler") > -1)
  178.             {
  179.                dispatchEvent(new Event("AB"));
  180.             }
  181.             else
  182.             {
  183.                dispatchEvent(new Event("ANB"));
  184.             }
  185.             §_-5c§ = false;
  186.             §_-4u§ = false;
  187.          }
  188.       }
  189.      
  190.       private function IOErrorHandler(param1:IOErrorEvent) : void
  191.       {
  192.          data = §_-3J§.data;
  193.          §_-4u§ = true;
  194.          doCheck();
  195.       }
  196.      
  197.       private function secErrorHandler(param1:SecurityErrorEvent) : void
  198.       {
  199.          data = §_-3J§.data;
  200.          §_-4u§ = true;
  201.          doCheck();
  202.       }
  203.      
  204.       private function completeHandler(param1:Event) : void
  205.       {
  206.          dispatchEvent(new Event("ANB"));
  207.          data = §_-3J§.data;
  208.       }
  209.      
  210.       public function getURL() : String
  211.       {
  212.          var _loc1_:String = "";
  213.          if(request)
  214.          {
  215.             _loc1_ = request.url;
  216.          }
  217.          return _loc1_;
  218.       }
  219.    }
  220. }
  221. //END UTILS.ADBLOCKCHECKER.AS
  222.  
  223. //START UTILS.ADBLOCKUTILS.AS
  224. package utils
  225. {
  226.    import flash.display.Loader;
  227.    import flash.net.URLRequest;
  228.    import flash.system.ApplicationDomain;
  229.    import flash.system.LoaderContext;
  230.    
  231.    public class AdblockUtils
  232.    {
  233.        
  234.      
  235.       public function AdblockUtils()
  236.       {
  237.          super();
  238.       }
  239.      
  240.       public static function randomWord(param1:int = 6) : String
  241.       {
  242.          var _loc6_:int = 0;
  243.          var _loc4_:* = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
  244.          var _loc3_:Array = new Array(param1);
  245.          var _loc2_:String = "";
  246.          var _loc5_:* = 0;
  247.          _loc6_ = 0;
  248.          while(_loc6_ < _loc3_.length)
  249.          {
  250.             _loc5_ = Number(int(Math.random() * _loc4_.length));
  251.             _loc2_ = _loc2_ + _loc4_.splice(_loc5_,1)[0];
  252.             _loc6_++;
  253.          }
  254.          return _loc2_;
  255.       }
  256.      
  257.       public static function randomParam() : String
  258.       {
  259.          var _loc5_:int = 0;
  260.          var _loc3_:* = ["R","A","N","D","O","M","_","N","U","M","B","E","R"];
  261.          var _loc2_:Array = new Array(_loc3_.length);
  262.          var _loc1_:String = "";
  263.          var _loc4_:* = 0;
  264.          _loc5_ = 0;
  265.          while(_loc5_ < _loc2_.length)
  266.          {
  267.             _loc4_ = Number(int(Math.random() * _loc3_.length));
  268.             _loc1_ = _loc1_ + _loc3_.splice(_loc4_,1)[0];
  269.             _loc5_++;
  270.          }
  271.          return _loc1_;
  272.       }
  273.      
  274.       public static function randomNumber(param1:int = 5) : Number
  275.       {
  276.          return randRange(Math.pow(10,param1),Math.pow(10,param1 + 1) - 1);
  277.       }
  278.      
  279.       private static function randRange(param1:Number, param2:Number) : Number
  280.       {
  281.          return Math.floor(Math.random() * (param2 - param1 + 1)) + param1;
  282.       }
  283.    }
  284. }
  285. //END UTILS.ADBLOCKUTILS.AS
  286.  
  287. //START MODEL.FREEWHEELBOOTSTRAP.AS
  288. package model
  289. {
  290.    import flash.events.Event;
  291.    import flash.events.IOErrorEvent;
  292.    
  293.    public class FreewheelBootstrap
  294.    {
  295.        
  296.      
  297.       public var fwServer:String = "http://2a7e9.v.fwmrm.net/";
  298.      
  299.       public var fwServerBaseURL:String = "http://2a7e9.v.fwmrm.net";
  300.      
  301.       public var fwNetworkId:Number = 174057;
  302.      
  303.       public var fwProfile:String = "174057:c4_simulcast_live";
  304.      
  305.       public var fwProfileName:String;
  306.      
  307.       public var fwSiteSectionId:String = "watchlive.channel4.com/E4";
  308.      
  309.       public var fwAdManagerLocation:String = "http://adm.fwmrm.net/p/c4_simulcast_live/AdManager.swf";
  310.      
  311.       public var fwAdManagerBaseURL:String;
  312.      
  313.       public var fwLogLevel:String = "QUIET";
  314.      
  315.       public var fwCacheBuster:int = 1;
  316.      
  317.       public function FreewheelBootstrap(param1:String)
  318.       {
  319.          var _loc4_:* = null;
  320.          var _loc2_:* = null;
  321.          var _loc3_:* = null;
  322.          var _loc5_:* = null;
  323.          super();
  324.          if(param1 != null && param1 != "null" && param1 != "" && param1 != "undefined")
  325.          {
  326.             _loc4_ = JSON.parse(param1) as Object;
  327.          }
  328.          if(_loc4_ != null)
  329.          {
  330.             fwServer = _loc4_.fwServer;
  331.             _loc2_ = fwServer.split("/ad/");
  332.             if(_loc2_.length < 2)
  333.             {
  334.                fwServerBaseURL = fwServer;
  335.             }
  336.             else
  337.             {
  338.                fwServerBaseURL = _loc2_[0];
  339.             }
  340.             fwNetworkId = parseFloat(_loc4_.fwNetworkId);
  341.             fwProfile = _loc4_.fwProfile;
  342.             _loc3_ = fwProfile.split(":");
  343.             if(_loc3_.length < 2)
  344.             {
  345.                fwProfileName = fwProfile;
  346.             }
  347.             else
  348.             {
  349.                fwProfileName = _loc3_[1];
  350.             }
  351.             fwAdManagerLocation = _loc4_.fwAdManagerLocation;
  352.             _loc5_ = fwAdManagerLocation.split("/p/");
  353.             if(_loc5_.length < 2)
  354.             {
  355.                fwAdManagerBaseURL = "http://adm.fwmrm.net";
  356.             }
  357.             else
  358.             {
  359.                fwAdManagerBaseURL = _loc5_[0];
  360.             }
  361.             fwLogLevel = _loc4_.fwLogLevel;
  362.             fwCacheBuster = parseInt(_loc4_.fwCacheBuster);
  363.             fwSiteSectionId = _loc4_.siteSectionId;
  364.          }
  365.       }
  366.      
  367.       public function updateSiteSection(param1:String) : void
  368.       {
  369.          var _loc2_:Array = fwSiteSectionId.split("/");
  370.          if(_loc2_.length > 1)
  371.          {
  372.             fwSiteSectionId = _loc2_[0] + "/" + param1;
  373.          }
  374.       }
  375.    }
  376. }
  377. //END MODEL.FREEWHEELBOOTSTRAP.AS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement