架构师_程序员_码农网

G Wachtwoord opvragen
Registreren

QQ登录

Slechts één stap om te beginnen

Zoeken
Weergave:5980|Reply: 3
打印 上一主题 下一主题

De advertenties analyse van de Aiki speler!

[link kopiëren].
L 跳转到指定楼层
de eigenaar van het gebouw
发表于 2014-10-23 22:26:53|只看该作者回帖奖励 | Omgekeerdbladeren| Leesmodus

Onlangs bezig met de opening van de school geschikt voor blinde vouwen - deze twee dagen Zero drukke video-advertenties, zei de advertenties worden steeds meer overspoeld, sommige van de video opening advertenties zijn meer dan 60s. Hij heeft zich ontdoen van de advertenties voor Sohu, maar hij is niet in staat geweest om zich te ontdoen van de advertenties voor Aqiyi. Laat me hem helpen zoeken.

De broncode is wat hij me gaf, ik heb geen swf-decompiler.

Ik had geen swf decompiler. Ik heb waarschijnlijk naar de structuur gekeken, en ik heb geen ActionScript geleerd. Hij zei dat het vergelijkbaar is met Java, dus ik doe geen moeite om naar de basissyntax te kijken en ga er meteen mee aan de slag. Laten we eerst naar de header van het hoofdbestand Player.as kijken, en zien welke verwijzingen er zijn.

  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.*;
Kopieer de code

Kijk naar de naam, com.qiyi.player.wonder.common.config.*; trok mijn aandacht - kijk naar de configuratie-informatie. Er zijn twee bestanden, FlashVarConfig.as en SystemConfig.as. SystemConfig.as laat niets interessants zien, maar het xml-configuratiebestand waarnaar wordt verwezen in FlashVarConfig.as is het onderzoeken waard.

  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 = "";
De code kopiëren

In regel 31 heeft dit configuratiebestand deze paragraaf. En in regel 35 van het advertentieadres trok ook mijn aandacht, later in de analyse. Kijk eerst naar het configuratiebestand.

  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>
Kopieer de code

Er staat dat het een in-show advertentie is met een duur van 8s, wat betekent dat ik het heb gelokaliseerd en de browser heb gekaapt om de advertenties te verwijderen, maar het is duidelijk dat dit geen advertentie is voordat de video laadt. Blijf bladeren-zeer saai proces.

Zoek uit wie get adPlayerURL() aanroept en kijk naar boven. Onder comqiyi\player\wonder\plugins\ad, vond ik dat de ad player bestaat in de vorm van een plugin, dat wil zeggen, er is nog steeds een aanroep, omhoog kijkend, vond ik dat bij comqiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer wordt geïnitialiseerd. En de klasse is verduisterd, wat verdacht is.

  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
Kopieer de code

CupidAdPlayer(param1:CupidParam) <- kijk naar de aanroepende parameters, dat wil zeggen, de bovenste laag roept nog steeds, welke parameter een, een waarde is zeer opvallend, vipRight Rechter of het vip is, en vip bestaat niet advertenties, dat wil zeggen, als ik de gebruiker informatie in de sessie in de speler krijg, zal ik het gebruiken om de gebruiker informatie in de website te krijgen, dat wil zeggen, als ik de gebruiker informatie in de sessie in de speler krijg, zal ik het gebruiken om de gebruiker informatie in de website te krijgen. Dat wil zeggen, als ik een verandering aanbreng in de gebruikersinformatie in de sessie van de website nadat de speler ervan de gebruikersinformatie in de website heeft gekregen, en een verandering aanbreng in de plaats waar wordt beoordeeld of het een vip is of niet, waardoor de onderste laag wordt aangeroepen, zal ten onrechte worden gedacht dat het een vip is (alleen de speler van de advertentie denkt dat je een vip bent, en de andere plaatsen worden niet beïnvloed). Dus laten we naar boven blijven zoeken. We gaan terug naar de directory van de advertentie plugin. comQiyi\player\wonder\plugins\adview in de ADView.as, de header is eerst

  1. private var _adPlayer:CupidAdPlayer;
Code kopiëren

Definieer een instantie van CupidAdPlayer met de naam _adPlayer, scroll naar beneden om uit te vinden wie _adPlayer gebruikt. verrassend vond de ad player creatie functie.

  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
De code kopiëren

Als je ziet dat je nog steeds parameters kunt doorgeven, betekent dit dat hij nog steeds wordt aangeroepen. Uiteindelijk vond ik de broncode in ADViewMediator.as onder comqiyi\player\wonder\plugins\view. De uiteindelijke aanroep van zijn functie ziet er als volgt uit

  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
Code kopiëren

Het belangrijkste punt is in de

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
Code kopiëren

Deze regel, om te bepalen of de gebruiker een vip is of niet, eerst volgens de lokale variabele loc_2 om het niveau van de gebruiker te bepalen, als met de definitie van het vip niveau, retourneert het 1. We geven hem een kleine aanpassing, het wordt een pseudo-vip.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Kopieer de code

Op deze manier in Hex om de lijn te wijzigen, test advertenties met succes verwijderd (met behulp van plug-in functie Chrome's, wijzigt u de speler adres voor de lokale, spelen dezelfde parameters door te geven).

Bovendien, in de AdBlockedBlackScreen.as onder com\qiyi\adplayer\model, is er een lokale detectie functie om Chrome's plug-in blokkeren te verbieden.

  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
Kopieer de code

Verander alleen de return van de tweede if in false.






Vorig artikelVrij herstel Wizard 7.5 Alternatieve Crack in Win7
Volgende: VMware virtuele machine installatie MAC OSX Mountain Lion
Code Farmer netwerk, alleen gepubliceerd in de praktijk proces, ondervonden technische problemen, niet misleiden anderen.
Ik weet niet of je hier fan van bent.
Ik weet niet zeker of ik dat ga kunnen.
发表于 2014-10-23 23:25:57|只看该作者
Xiao Ningzi is zo groot
De code boer netwerk, alleen gepubliceerd in het proces van de praktijk, ondervonden technische problemen, anderen niet misleiden.
Bank
发表于 2014-10-24 21:57:25|只看该作者
Deze plugin voor het blokkeren van advertenties is niet slecht

Beoordeling

Deelnemers 1 MB +1 Bijdrage +1 WegzettenReden
admin + 1 + 1 Zeer krachtig!

Bekijk alle beoordelingen

De code boer netwerk, alleen gepubliceerd in het proces van de praktijk, ondervonden technische problemen, niet misleiden anderen.
vloerplaten
owner|发表于 2014-10-24 22:01:44|只看该作者
Geplaatst door skywriter op 2014-10-24 21:57
Deze plugin om advertenties te blokkeren is niet slecht

Adblock Plus is de populairste advertenties filter software beschikbaar voor Firefox, Chrome, Opera, Safari, Android en Internet Explorer browsers. Filter alle vervelende online advertenties: verwijder videoadvertenties op Youtube, filter Facebook-advertenties, raak pop-upadvertenties kwijt en nog veel meer. In Google Chrome is Adblock Plus een van de snelst groeiende plugins.
CodeFarmer.com, alleen gepubliceerd in het proces van de praktijk, ondervonden technische problemen, anderen niet misleiden.
Je moet inloggen voordat je terug kunt posten Inloggen | Registreren

D eze versie van de integrale regels


DISCLAIMER: Alle software, programmering materialen of artikelen vrijgegeven door de code boer netwerk is beperkt tot studie-en onderzoeksdoeleinden, de bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders worden alle gevolgen gelieve de gebruiker verantwoordelijk. Deze site informatie van het netwerk, copyright geschil heeft niets te maken met deze site. U moet de bovenstaande inhoud binnen 24 uur na het downloaden volledig van uw computer verwijderen. Als je het programma leuk vindt, steun dan de echte software, koop de registratie en krijg betere echte service. Als er sprake is van inbreuk, neem dan per e-mail contact met ons op om dit op te lossen.

Mail To:help@itsvse.com

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

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

Snelle reactieTerug naar bovenTerug naar lijst