架构师_程序员_码农网

A Hämta lösenord
Registrera dig

QQ登录

Bara ett steg för att komma igång

Sök
架构师_程序员_码农网 "架构' 管理专区&Management Area ' Klagomål och förslag ' 回收站 ' 爱奇艺播放器之去广告分析
Visa:5980|Svar: 3
打印 上一主题 下一主题

Annonsanalysen av Aiki-spelaren!

[kopiera länk]
L 跳转到指定楼层
ägaren av byggnaden
发表于 2014-10-23 22:26:53 | 只看该作者回帖奖励|ReverseBrowse|Läsläge

Nyligen upptagen med öppnandet av skolan lämplig för blinda vikning - dessa två dagar Noll upptagen videoannonser, sade annonserna blir mer och mer översvämmade, några av videoöppningsannonserna är mer än 60-talet. Han blev av med annonserna för Sohu, men han har inte kunnat bli av med annonserna för Aqiyi. Låt mig hjälpa honom att leta.

Han gav mig källkoden, jag har ingen swf-dekompilator.

Jag hade ingen swf-dekompilator. Jag tittade nog på strukturen, och jag har inte lärt mig ActionScript. Han sa att det liknar Java, så jag bryr mig inte om att titta på den grundläggande syntaxen, utan går direkt till den. Låt oss först titta på huvudfilens header Player.as och se vilka referenser som finns där.

  1.     import com.iqiyi.components.global.*;
  2.     import com.iqiyi.components.tooltip.*;
  3.     import com.qiyi.player.base.pub.*;
  4.     import com.qiyi.player.base.uuid.*;
  5.     import com.qiyi.player.core.*;
  6.     import com.qiyi.player.core.model.def.*;
  7.     import com.qiyi.player.core.model.utils.*;
  8.     import com.qiyi.player.wonder.*;
  9.     import com.qiyi.player.wonder.body.view.*;
  10.     import com.qiyi.player.wonder.common.config.*;
  11.     import com.qiyi.player.wonder.common.lso.*;
  12.     import com.qiyi.player.wonder.common.pingback.*;
  13.     import com.qiyi.player.wonder.common.sw.*;
  14.     import flash.display.*;
  15.     import flash.events.*;
  16.     import flash.media.*;
  17.     import flash.system.*;
  18.     import flash.utils.*;
Kopiera koden

Titta på namnet, com.qiyi.player.wonder.common.config.*; fångade min uppmärksamhet - titta på konfigurationsinformationen. Det finns två filer, FlashVarConfig.as och SystemConfig.as. SystemConfig.as visar inget intressant, men xml-konfigurationsfilen som refereras till i FlashVarConfig.as är värd att undersöka.

  1. package com.qiyi.player.wonder.common.config
  2. {

  3.     public class FlashVarConfig extends Object
  4.     {
  5.         public static const OWNER_PAGE:String = "page";
  6.         public static const OWNER_CLIENT:String = "client";
  7.         public static const OS_XP:String = "xp";
  8.         public static const OS_WIN7:String = "win7";
  9.         public static const OS_WIN8:String = "win8";
  10.         public static const PAGE_OPEN_SRC_NONE:String = "0";
  11.         public static const PAGE_OPEN_SRC_DIRECT:String = "1";
  12.         public static const PAGE_OPEN_SRC_OTHER:String = "2";
  13.         private static var _flashVarSource:Object;
  14.         private static var _albumId:String = "";
  15.         private static var _tvid:String = "0";
  16.         private static var _vid:String = "";
  17.         private static var _autoPlay:Boolean = true;
  18.         private static var _isMemberMovie:Boolean = false;
  19.         private static var _cyclePlay:Boolean = false;
  20.         private static var _components:String = "fefff7e6";
  21.         private static var _cupId:String = "";
  22.         private static var _shareStartTime:int = -1;
  23.         private static var _shareEndTime:int = -1;
  24.         private static var _preloaderURL:String = "http://dispatcher.video.qiyi.com/dispn/player/preloader.swf";
  25.         private static var _preloaderVipURL:String = "";
  26.         private static var _exclusivePreloader:String = "";
  27.         private static var _useGPU:Boolean = true;
  28.         private static var _showBrand:Boolean = true;
  29.         private static var _expandState:Boolean = false;
  30.         private static var _tipDataURL:String = "http://static.qiyi.com/ext/tips/tipdata.xml";
  31.         private static var _coop:String = "";
  32.         private static var _owner:String = "page";
  33.         private static var _os:String = "win7";
  34.         private static var _adPlayerURL:String = "";
  35.         private static var _origin:String = "";
  36.         private static var _passportID:String = "";
  37.         private static var _playListID:String = "";
Kopiera koden

På rad 31 har den här konfigurationsfilen det här stycket. Och på rad 35 i annonsadressen fångade också min uppmärksamhet, senare i analysen. Titta först på konfigurationsfilen.

  1. </item>
  2. <!-- 正在为您播放片中广告, 可选择是否要跳过, 类别是1, 持续时间是8秒 -->
  3. <!-- 限制条件是:  不是正在登录中的会员 -->
  4. <!-- 每天每人次只最多显示两次这个tips -->
  5. <item id="ToSelectWhetherToSkipPlayingMiddleAD" level="1" duration="-1" type="1">
  6. <conditions>
  7. <fields>
  8. <field name="member" operator="eq" value="false"/>
  9. </fields>
  10. <frequency count="2">
  11. <restrain name="day"/>
  12. <restrain name="user"/>
  13. </frequency>
  14. </conditions>
  15. <list>
  16. <message>
  17. <![CDATA[
  18. 正在为您播放片中广告, <a href="event:ASEvent(skipAD)"><b><u>跳过广告</u></b></a>
  19. ]]>
  20. </message>
  21. </list>
  22. </item>
  23. <!-- 提示即将跳过8秒后会显示的剧中广告, 类别是1, 持续时间是8秒 -->
  24. <!-- 必须是登录的会员 -->
  25. <item id="ToCancelSkipNextMiddleAD" level="1" duration="8" type="1">
  26. <conditions>
  27. <fields>
  28. <field name="member" operator="eq" value="true"/>
  29. </fields>
  30. <frequency count="1">
  31. <restrain name="day"/>
  32. <restrain name="user"/>
  33. </frequency>
  34. </conditions>
  35. <list>
  36. <message>
  37. <![CDATA[
  38. 即将为您跳过片中广告,<a href="event:ASEvent(cancelSkipAD)"><u>不再跳过</u></a>
  39. ]]>
  40. </message>
  41. </list>
  42. </item>
  43. <!--
  44. 提示版权下线, 如果还有小于7天的时间下线, 每天一个专辑一台电脑提醒一次, 类别是1, 从起始60秒开始显示, 持续时间是10秒
  45. -->
  46. <!-- 因为优先级很高, 前面的最高优先级是10, 所以这里把level设为11. -->
  47. <!-- 这个tip是由signal发起的. Shawn.X  -->
  48. <!--
  49. 《<span>#keyword#</span>》 将于  <span>#expiredTime#</span> 版权到期.
  50. -->
  51. <item id="NoticeThisCopyrightWillExpire" level="11" duration="10" type="1">
  52. <conditions>
Kopiera koden

Det står att det är en annons under visning med en varaktighet på 8 sekunder, vilket innebär att jag lokaliserade den och kapade webbläsaren för att ta bort annonserna, men det är tydligt att detta inte är en annons innan videon laddas. Fortsätt bläddra - mycket tråkig process.

Ta reda på vem som anropar get adPlayerURL() och titta uppåt. Under com\qiyi\player\wonder\plugins\ad fann jag att annonsspelaren finns i form av ett plugin, det vill säga det finns fortfarande ett samtal, tittar uppåt, jag fann att på com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer initieras. Och klassen är obfuskerad, vilket är misstänkt.

  1. public function CupidAdPlayer(param1:CupidParam)
  2.         {
  3.             this.PLAYER_TIMEOUT_LENGTHS = new Array(10000, 15000);
  4.             Log.info("init, version=" + VERSION + ", " + param1.toString());
  5.             this._videoPlayerVersion = param1.videoPlayerVersion;
  6.             this._videoId = param1.videoId;
  7.             this._tvId = param1.tvId;
  8.             this._channelId = param1.channelId;
  9.             this._collectionId = param1.collectionId;
  10.             this._playerId = param1.playerId;
  11.             this._albumId = param1.albumId;
  12.             this._userId = param1.userId;
  13.             this._webEventId = param1.webEventId;
  14.             this._videoEventId = param1.videoEventId;
  15.             this._vipRight = param1.vipRight;
  16.             this._terminal = param1.terminal;
  17.             this._duration = param1.duration;
  18.             this._passportId = param1.passportId;
  19.             this._passportCookie = param1.passportCookie;
  20.             this._passportKey = param1.passportKey;
  21.             this._videoDefinitionId = param1.videoDefinitionId;
  22.             if (this.isQiyiWebEx())
  23.             {
  24.                 this._playerUrl = this.IQIYI_WEBEX_AM_URL;
  25.             }
  26.             else if (param1.playerUrl)
  27.             {
  28.                 this._playerUrl = param1.playerUrl;
  29.             }
  30.             else
  31.             {
  32.                 this._playerUrl = this.IQIYI_WEB_AM_URL;
  33.             }
  34.             if (param1.dispatcher == null)
  35.             {
  36.                 this._dispatcher = this;
  37.             }
  38.             else
  39.             {
  40.                 this._dispatcher = param1.dispatcher;
  41.             }
  42.             this._volume = param1.volume;
  43.             this._videoIndex = param1.videoIndex;
  44.             this._stageWidth = param1.stageWidth;
  45.             this._stageHeight = param1.stageHeight;
  46.             this._displayContainer = param1.adContainer;
  47.             this._screenStatus = DisplayProperties.isFullScreen(this._displayContainer.stage) ? ("1") : ("0");
  48.             this._baiduMainVideo = param1.baiduMainVideo;
  49.             this._disablePreroll = param1.disablePreroll;
  50.             this._disableSkipAd = param1.disableSkipAd;
  51.             this._enableVideoCore = param1.enableVideoCore;
  52.             this._isUGC = param1.isUGC;
  53.             this._videoPlayerUrl = this._displayContainer.loaderInfo ? (this._displayContainer.loaderInfo.loaderURL) : ("");
  54.             this._env = this.generateEnv();
  55.             this.addAdPlayerEventListeners();
  56.             return;
  57.         }// end function
Kopiera koden

CupidAdPlayer(param1:CupidParam) <- titta på dess anropsparametrar, det vill säga det övre lagret ringer fortfarande, vilken parameter en, ett värde är mycket märkbart, vipRight Domare om det är vip, och vip finns inte annonser, det vill säga om jag får användarinformationen i sessionen i spelaren, kommer jag att använda den för att få användarinformationen på webbplatsen, det vill säga om jag får användarinformationen i sessionen i spelaren, kommer jag att använda den för att få användarinformationen på webbplatsen. Det vill säga, om jag gör en ändring i användarinformationen i sessionen på webbplatsen efter att dess spelare får användarinformationen på webbplatsen, och gör en ändring på platsen för att bedöma om det är en vip eller inte, vilket kommer att leda till att det lägre lagret kallas, kommer det felaktigt att tro att det är en vip (endast annonsspelaren tror att du är en vip, och de andra platserna kommer inte att påverkas). Så låt oss fortsätta titta uppåt. När vi letade efter det gick vi tillbaka till katalogen för annonseringsplugin. com\qiyi\player\wonder\plugins\ad\view i ADView.as, rubriken först är

  1. private var _adPlayer:CupidAdPlayer;
Kopiera kod

Definierade en instans av CupidAdPlayer med namnet _adPlayer en gång, rullade ner för att ta reda på vem som använder _adPlayer. hittade överraskande funktionen för skapande av annonsspelare.

  1. public function createAdPlayer(param1:CupidParam) : void
  2.         {
  3.             if (this._adPlayer)
  4.             {
  5.                 this.unloadAdPlayer();
  6.             }
  7.             this._log.info("loading adplayer...");
  8.             this._adPlayer = new CupidAdPlayer(param1);
  9.             this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_LOADING_SUCCESS, this.onAdLoadSuccess);
  10.             this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_LOADING_FAILURE, this.onAdLoadFailed);
  11.             this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_START, this.onAdStartPlay);
  12.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_PAUSE, this.onAdAskVideoPause);
  13.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_RESUME, this.onAdAskVideoResume);
  14.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_START_LOADING, this.onAdAskVideoStartLoad);
  15.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_START, this.onAdAskVideoStartPlay);
  16.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_END, this.onAdAskVideoEnd);
  17.             this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_BLOCK, this.onAdBlock);
  18.             this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_DISPLAY_AD_TIP, this.onAskVideoShowBonusTips);
  19.             this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_VIDEO, this.onAdFlvADAction);
  20.             this._adPlayer.load();
  21.             return;
  22.         }// end function
Kopiera koden

Att se att du fortfarande kan skicka parametrar betyder att det fortfarande kallas. Jag hittade slutligen källan i ADViewMediator.as under com\qiyi\player\wonder\plugins\ad\view. Det slutliga anropet till hans funktion ser ut så här

  1. private function createADPlayer() : void
  2.         {
  3.             sendNotification(BodyDef.NOTIFIC_PLAYER_STOP_LOAD);
  4.             ProcessesTimeRecord.STime_adInit = getTimer();
  5.             var _loc_1:* = facade.retrieveProxy(PlayerProxy.NAME) as PlayerProxy;
  6.             var _loc_2:* = facade.retrieveProxy(UserProxy.NAME) as UserProxy;
  7.             var _loc_3:* = new CupidParam();
  8.             _loc_3.playerUrl = FlashVarConfig.adPlayerURL;
  9.             _loc_3.videoId = _loc_1.curActor.loadMovieParams.vid;
  10.             _loc_3.tvId = _loc_1.curActor.loadMovieParams.tvid;
  11.             _loc_3.channelId = _loc_1.curActor.movieModel.channelID;
  12.             _loc_3.playerId = FlashVarConfig.cupId;
  13.             _loc_3.albumId = _loc_1.curActor.movieModel.albumId;
  14.             _loc_3.dispatcher = null;
  15.             _loc_3.adContainer = this._ADView;
  16.             _loc_3.stageWidth = GlobalStage.stage.stageWidth;
  17.             _loc_3.stageHeight = GlobalStage.stage.stageHeight;
  18.             _loc_3.userId = _loc_1.curActor.uuid;
  19.             _loc_3.webEventId = UUIDManager.instance.getWebEventID();
  20.             _loc_3.videoEventId = UUIDManager.instance.getVideoEventID();
  21.             _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
  22.             _loc_3.terminal = "iqiyiw";
  23.             _loc_3.duration = _loc_1.curActor.movieModel.duration / 1000;
  24.             _loc_3.passportId = _loc_2.passportID;
  25.             _loc_3.passportCookie = _loc_2.P00001;
  26.             _loc_3.passportKey = KeyUtils.getPassportKey(0);
  27.             _loc_3.enableVideoCore = true;
  28.             _loc_3.disableSkipAd = _loc_1.curActor.movieModel.forceAD;
  29.             _loc_3.volume = Settings.instance.mute ? (0) : (Settings.instance.volumn);
  30.             _loc_3.isUGC = UGCUtils.isUGC(_loc_1.curActor.movieModel.tvid);
  31.             _loc_3.collectionId = FlashVarConfig.collectionID;
  32.             _loc_3.videoDefinitionId = _loc_1.curActor.movieModel.curDefinitionInfo.type.id;
  33.             _loc_3.videoPlayerVersion = WonderVersion.VERSION_WONDER;
  34.             this._ADView.createAdPlayer(_loc_3);
  35.             return;
  36.         }// end function
Kopiera koden

Nyckelpunkten är i

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
Kopiera koden

Denna rad, för att avgöra om användaren är en vip eller inte, först enligt den lokala variabeln loc_2 för att bestämma användarens nivå, om den med definitionen av vip-nivån returnerar 1. Vi ger honom en liten modifiering, det blir en pseudo-vip.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Kopiera koden

På detta sätt i Hex för att ändra linjen, testannonser framgångsrikt bort (med hjälp av Chromes plug-in-funktion, ändra spelaradressen för den lokala, spela samma parametrar för att passera).

Dessutom, i AdBlockedBlackScreen.as under com\qiyi\cupid\adplayer\model, finns det en lokal detekteringsfunktion för att förbjuda Chromes plug-in-blockering.

  1. public static function isInBlacklist(param1:String) : Boolean
  2.         {
  3.             if (!param1)
  4.             {
  5.                 return false;
  6.             }
  7.             if (StringUtils.beginsWith(param1, "chrome-extension://"))
  8.             {
  9.                 return true;
  10.             }
  11.             var _loc_2:* = new URLParser(param1);
  12.             var _loc_3:* = _loc_2.getHost();
  13.             return HOST_BLACKLIST.indexOf(_loc_3) != -1;
  14.         }// end function
Kopiera koden

Ändra bara returen i den andra if till false.






Föregående artikelFreeze Restore Wizard 7.5 Alternativ spricka i Win7
Nästa: Installation av virtuell VMware-maskin MAC OSX Mountain Lion
Kod Farmer-nätverk, endast publicerat i övningsprocessen, stötte på tekniska svårigheter, inte vilseleda andra.
Jag är inte säker på om du är ett fan av detta.
Jag är inte säker på om jag kommer att kunna göra det.
发表于 2014-10-23 23:25:57|只看该作者
Xiao Ningzi är så stor
Kodjordbrukarnätverket, endast publicerat i praktiken, stötte på tekniska svårigheter, vilseleda inte andra.
Bänk
2014-10-24 21:57:25|只看该作者
Detta plugin för att blockera annonser är inte dåligt

Betyg

Deltagare 1 MB +1 Bidrag +1 Lägg undananledning
administratör + 1 + 1 Mycket kraftfull!

Visa alla betyg

Kodjordbrukarnätverket, endast publicerat i praktiken, stötte på tekniska svårigheter, vilseleda inte andra.
golvbrädor
ägare|2014-10-24 22:01:44|只看该作者
Postat av skywriter på 2014-10-24 21:57
Detta plugin för att blockera annonser är inte dåligt

Adblock Plus är den mest populära programvaran för annonsfiltrering som finns tillgänglig för webbläsarna Firefox, Chrome, Opera, Safari, Android och Internet Explorer. Filtrera alla irriterande annonser på nätet: ta bort videoannonser på Youtube, filtrera Facebook-annonser, bli av med popup-annonser och mycket mer. På Google Chrome är Adblock Plus ett av de snabbast växande insticksprogrammen.
CodeFarmer.com, endast publicerad i praktiken, stötte på tekniska svårigheter, vilseleda inte andra.
Du måste logga in innan du kan posta tillbaka Logga in | Registrera dig

D enna version av de integrerade reglerna


DISCLAIMER: All programvara, programmeringsmaterial eller artiklar som släpps av kodfarmernätverket är begränsat till studie- och forskningsändamål; ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars är alla konsekvenser användarens ansvar. Denna webbplatsinformation från nätverket, upphovsrättstvist har inget att göra med den här webbplatsen. Du måste helt ta bort ovanstående innehåll från din dator inom 24 timmar efter nedladdningen. Om du gillar programmet, vänligen stöd den äkta programvaran, köp registreringen och få bättre äkta service. Om det finns något intrång, vänligen kontakta oss via e-post för att hantera det.

E-post To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:05

Snabbt svarTillbaka till toppenTillbaka till listan