架构师_程序员_码农网

B Hent passord
Registrer deg

QQ登录

Bare ett steg for å komme i gang

Søk i
架构师_程序员_码农网 "架构' 管理专区&Management Area ' Klager og forslag ' 回收站 ' 爱奇艺播放器之去广告分析
Vis:5980|Svar: 3
打印 上一主题 下一主题

Annonseanalysen av Aiki-spilleren!

[kopier lenke]
L 跳转到指定楼层
eieren av bygningen
2014-10-23 22:26:53|2014-10-23 22:26:53 |只看该作者回帖奖励|ReverseBrowse|Lesemodus

Nylig opptatt med åpningen av skolen egnet for blind folding - disse to dagene Zero opptatt videoannonser, sa annonsene blir mer og mer oversvømmet, noen av videoåpningsannonsene er mer enn 60-tallet. Han ble kvitt annonsene for Sohu, men han har ikke klart å kvitte seg med annonsene for Aqiyi. La meg hjelpe ham med å lete.

Han ga meg kildekoden. Jeg har ikke en swf-dekompilator.

Jeg hadde ikke en swf-dekompilator. Jeg så nok på strukturen, og jeg har ikke lært meg ActionScript. Han sa at det ligner på Java, så jeg gidder ikke å se på den grunnleggende syntaksen, og går rett til det. La oss først se på headeren til hovedfilen Player.as, og se hvilke referanser som finnes der.

  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.*;
Kopier koden

Se på navnet, com.qiyi.player.wonder.common.config.*; fanget min oppmerksomhet - se på konfigurasjonsinformasjonen. Det er to filer, FlashVarConfig.as og SystemConfig.as. SystemConfig.as viser ikke noe interessant, men xml-konfigurasjonsfilen som det refereres til i FlashVarConfig.as er verdt å undersøke.

  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 = "";
Kopiering av koden

I linje 31 har denne konfigurasjonsfilen dette avsnittet. Og i linje 35 i annonseadressen fanget også min oppmerksomhet, senere i analysen. Se først på konfigurasjonsfilen.

  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>
Kopier koden

Det står at det er en in-show-reklame med en varighet på 8 sekunder, noe som betyr at jeg lokaliserte den og kapret nettleseren for å fjerne annonsene, men det er tydelig at dette ikke er en annonse før videoen lastes inn. Fortsett å bla - veldig kjedelig prosess.

Finn ut hvem som kaller get adPlayerURL() og se oppover. Under com\qiyi\player\wonder\plugins\ad fant jeg at annonsespilleren eksisterer i form av en plugin, det vil si at det fortsatt er et anrop, og ser oppover, fant jeg at på com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer er initialisert. Og klassen er obfuscated, noe som er mistenkelig.

  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
Kopier koden

CupidAdPlayer(param1:CupidParam) <- se på sine anropsparametere, det vil si at det øvre laget fortsatt ringer, hvilken parameter en, en verdi er veldig merkbar, vipRight Dommer om det er vip, og vip eksisterer ikke annonser, det vil si, hvis jeg får brukerinformasjonen i økten i spilleren, Jeg vil bruke den til å få brukerinformasjonen på nettstedet, det vil si, hvis jeg får brukerinformasjonen i økten i spilleren, Jeg vil bruke den til å få brukerinformasjonen på nettstedet. Det vil si at hvis jeg gjør en endring i brukerinformasjonen i økten på nettstedet etter at spilleren får brukerinformasjonen på nettstedet, og gjør en endring i stedet for å bedømme om det er en vip eller ikke, noe som vil føre til at det nedre laget blir kalt, vil det feilaktig bli trodd at det er en vip (bare annonseringsspilleren tror at du er en vip, og de andre stedene vil ikke bli påvirket). Så la oss fortsette å se oppover. På jakt etter det, gikk vi tilbake til katalogen til annonsepluginet. com\qiyi\player\wonder\plugins\ad\view i ADView.as, overskriften først er

  1. private var _adPlayer:CupidAdPlayer;
Kopier kode

Definert en forekomst av CupidAdPlayer kalt _adPlayer en gang, rullet ned for å finne ut hvem som bruker _adPlayer. overraskende fant annonsespilleropprettingsfunksjonen.

  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
Kopiere koden

Å se at du fortsatt kan passere parametere betyr at det fortsatt blir kalt. Jeg fant til slutt kilden i ADViewMediator.as under com\qiyi\player\wonder\plugins\ad\view. Det endelige kallet til funksjonen ser slik ut

  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
Kopier kode

Nøkkelpunktet er i

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

Denne linjen, for å avgjøre om brukeren er en vip eller ikke, først i henhold til den lokale variabelen loc_2 for å bestemme nivået på brukeren, hvis det med definisjonen av vip-nivået, returnerer det 1. Vi gir ham en liten modifikasjon, det blir en pseudo-vip.

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

På denne måten i Hex for å endre linjen, testannonser vellykket fjernet (ved hjelp av Chromes plug-in-funksjon, endre spilleradressen for den lokale, spille de samme parametrene for å passere).

I tillegg, i AdBlockedBlackScreen.as under com\qiyi\cupid\adplayer\model, er det en lokal deteksjonsfunksjon for å forby Chrome's plug-in-blokkering.

  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
Kopier koden

Bare endre returen i den andre if til false.






Forrige artikkelFreeze Restore Wizard 7.5 Alternativ sprekk i Win7
Neste: VMware virtuell maskininstallasjon MAC OSX Mountain Lion
Kode Farmer-nettverk, bare publisert i praksisprosessen, opplevde tekniske vanskeligheter, ikke villede andre.
Jeg er ikke sikker på om du er en fan av dette.
Jeg er ikke sikker på om jeg kommer til å klare det.
2014-10-23 23:25:57 | 2014-10-23 23:25:57|只看该作者
Xiao Ningzi er så stor
Koden bonde nettverk, bare publisert i ferd med praksis, møtt tekniske vanskeligheter, ikke villede andre.
Benk
2014-10-24 21:57:25 | 2014-10-24 21:57:25|TOMS
Denne plugin for blokkering av annonser er ikke dårlig

Vurdering

Deltakere 1 MB +1 Bidrag +1 Legg vekkReason
administrator + 1 + 1 Veldig kraftig!

Se alle rangeringer

Koden farmer nettverk, bare publisert i prosessen med praksis, oppstått tekniske problemer, ikke villede andre.
floorboards
owner|2014-10-24 22:01:44|只看该作者
Skrevet av skywriter på 2014-10-24 21:57
Denne plugin for å blokkere annonser er ikke dårlig

Adblock Plus er den mest populære programvaren for filtrering av annonser som er tilgjengelig for nettleserne Firefox, Chrome, Opera, Safari, Android og Internet Explorer. Filtrer alle irriterende annonser på nettet: fjern videoannonser på Youtube, filtrer Facebook-annonser, bli kvitt popup-annonser og mye mer. På Google Chrome er Adblock Plus en av de raskest voksende plugin-modulene.
CodeFarmer.com, bare publisert i løpet av praksis, opplevde tekniske vanskeligheter, ikke villede andre.
Du må logge inn før du kan skrive tilbake Logg inn | Registrer deg

D enne versjonen av de integrerte regleneR


DISCLAIMER: All programvare, programmeringsmateriell eller artikler utgitt av koden bondenettverket er begrenset til studie- og forskningsformål; innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers, alle konsekvensene vennligst brukeren ansvarlig. Dette nettstedet informasjon fra nettverket, copyright tvist har ingenting å gjøre med dette nettstedet. Du må fjerne innholdet ovenfor helt fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt den ekte programvaren, kjøp registreringen og få bedre ekte service. Hvis det er noen overtredelse, vennligst kontakt oss via e-post for å håndtere det.

Mail To:help@itsvse.com

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

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

HurtigsvarTilbaketiltoppenTilbake til listen