架构师_程序员_码农网

N Recuperare parolă
Înregistrare

QQ登录

Un singur pas pentru a începe

Căutare
Vizualizare:5980|Replică: 3
打印 上一主题 下一主题

Analiza anunțurilor jucătorului Aiki!

[copy link]
L 跳转到指定楼层
proprietarul clădirii
发表于 2014-10-23 22:26:53|只看该作者回帖奖励 | Răsfoire inversă|Mod de citire

Recent ocupat cu deschiderea școlii potrivite pentru pliere orb - aceste două zile Zero ocupat anunțuri video, a spus anunțurile sunt din ce în ce mai inundate, unele dintre anunțurile de deschidere video sunt mai mult de 60s. A scăpat de reclamele pentru Sohu, dar nu a reușit să scape de reclamele pentru Aqiyi. Lăsați-mă să îl ajut să caute.

Codul sursă este cel pe care mi l-a dat, eu nu am un decompilator swf.

Nu am avut un decompilator swf. Probabil m-am uitat la structură și nu am învățat ActionScript. A spus că este similar cu Java, așa că nu mă deranjez să mă uit la sintaxa de bază și trec direct la ea. Să ne uităm mai întâi la antetul fișierului principal Player.as și să vedem ce referințe sunt acolo.

  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.*;
Copiați codul

Uitați-vă la nume, com.qiyi.player.wonder.common.config.*; mi-a atras atenția - uitați-vă la informațiile de configurare. Există două fișiere, FlashVarConfig.as și SystemConfig.as. SystemConfig.as nu arată nimic interesant, dar fișierul de configurare xml la care se face referire în FlashVarConfig.as merită investigat.

  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 = "";
Copierea codului

În linia 31, acest fișier de configurare are acest paragraf. Și în linia 35 a adresei de anunț mi-a atras atenția, de asemenea, mai târziu în analiză. Mai întâi uitați-vă la fișierul de configurare.

  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>
Copiați codul

Se spune că este o reclamă in-show cu o durată de 8s, ceea ce înseamnă că am localizat-o și am deturnat browserul pentru a elimina reclamele, dar este clar că aceasta nu este o reclamă înainte de încărcarea videoclipului. Continuați să întoarceți - proces foarte plictisitor.

Aflați cine apelează get adPlayerURL() și priviți în sus. Sub com\qiyi\player\wonder\plugins\ad, am găsit că playerul publicitar există sub forma unui plugin, adică există încă un apel, privind în sus, am găsit că la com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer este inițializat. Și clasa este ofuscată, ceea ce este suspect.

  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
Copiați codul

CupidAdPlayer(param1:CupidParam) <- uitați-vă la parametrii săi de apelare, adică stratul superior este încă de apelare, care parametru unul, o valoare este foarte vizibilă, vipRight Judecă dacă este vip, și vip nu există anunțuri, adică dacă obțin informațiile despre utilizator în sesiune în player, le voi folosi pentru a obține informațiile despre utilizator în site-ul web, adică dacă obțin informațiile despre utilizator în sesiune în player, le voi folosi pentru a obține informațiile despre utilizator în site-ul web. Adică, dacă fac o schimbare în informațiile despre utilizator în sesiunea site-ului web după ce playerul său obține informațiile despre utilizator în site-ul web și fac o schimbare în locul de a judeca dacă este un vip sau nu, ceea ce va face ca stratul inferior să fie apelat, se va crede în mod eronat că este un vip (numai playerul de publicitate crede că sunteți un vip, iar celelalte locuri nu vor fi afectate). Deci, să continuăm să căutăm în sus. Căutându-l, ne-am întors la directorul pluginului de publicitate. com\qiyi\player\wonder\plugins\ad\view în ADView.as, antetul primul este

  1. private var _adPlayer:CupidAdPlayer;
Cod de copiere

A definit o instanță a CupidAdPlayer numită _adPlayer o dată, a derulat în jos pentru a afla cine folosește _adPlayer. în mod surprinzător a găsit funcția de creare a jucătorului de anunțuri.

  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
Copierea codului

Văzând că încă puteți trece parametri înseamnă că este încă apelată. În cele din urmă am găsit sursa în ADViewMediator.as sub com\qiyi\player\wonder\plugins\ad\view. Apelul final la funcția sa arată astfel

  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
Copiați codul

Punctul cheie este în

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
Copiați codul

Această linie, pentru a determina dacă utilizatorul este un vip sau nu, mai întâi în funcție de variabila locală loc_2 pentru a determina nivelul utilizatorului, dacă cu definiția nivelului vip, returnează 1. Îi dăm o ușoară modificare, devine un pseudo-vip.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Copiați codul

În acest fel, în Hex pentru a modifica linia, testează anunțurile eliminate cu succes (utilizând funcția plug-in a Chrome, modificați adresa jucătorului pentru local, jucați aceiași parametri pentru a trece).

În plus, în AdBlockedBlackScreen.as sub com\qiyi\cupid\adplayer\model, există o funcție de detectare locală pentru a interzice blocarea plug-in-ului Chrome.

  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
Copiați codul

Schimbați doar returnarea celui de-al doilea if la false.






Articolul precedentFreeze Restore Wizard 7.5 Alternative Crack în Win7
Următoarea: Instalarea mașinii virtuale VMware MAC OSX Mountain Lion
Codul rețelei Farmer, publicat numai în procesul de practică, a întâmpinat dificultăți tehnice, nu induce în eroare pe alții.
Nu sunt sigur dacă sunteți un fan al acestui lucru.
Nu sunt sigur dacă voi fi capabil să fac asta.
发表于 2014-10-23 23:25:57|只看该作者
Xiao Ningzi este atât de mare
Rețeaua de fermieri cod, publicat numai în procesul de practică, a întâmpinat dificultăți tehnice, nu induce în eroare pe alții.
Bench
发表于 2014-10-24 21:57:25|只看该作者
Acest plugin pentru blocarea reclamelor nu este rău

Rating

Participanți 1 MB +1 Contribuție +1 Pune deoparteMotivul
administrare + 1 + 1 Foarte puternic!

Vezi toate evaluările

Codul rețelei de fermieri, publicat doar în procesul de practică, a întâmpinat dificultăți tehnice, nu induce în eroare pe alții.
parchet
owner|发表于 2014-10-24 22:01:44|只看该作者
Postat de skywriter pe 2014-10-24 21:57
Acest plugin pentru a bloca reclamele nu este rău

Adblock Plus este cel mai popular software de filtrare a reclamelor disponibil pentru browserele Firefox, Chrome, Opera, Safari, Android și Internet Explorer. Filtrează toate reclamele online enervante: elimină reclamele video de pe Youtube, filtrează reclamele Facebook, scapă de reclamele pop-up și multe altele. Pe Google Chrome, Adblock Plus este unul dintre pluginurile cu cea mai rapidă creștere.
CodeFarmer.com, publicat numai în procesul de practică, a întâmpinat dificultăți tehnice, nu induce în eroare pe alții.
Trebuie să vă conectați înainte de a putea posta înapoi Conectați-vă | Înregistrare

A ceastă versiune a regulilor integrale


DISCLAIMER: Toate software-ul, materialele de programare sau articolele publicate de rețeaua de fermier de cod este limitată la scopuri de studiu și cercetare; conținutul de mai sus nu trebuie să fie utilizate în scopuri comerciale sau ilegale, în caz contrar, toate consecințele vă rugăm să utilizator responsabil. Informațiile de pe acest site din rețea, disputa privind drepturile de autor nu are nimic de-a face cu acest site. Trebuie să eliminați complet conținutul de mai sus din computerul dvs. în termen de 24 de ore de la descărcare. Dacă vă place programul, vă rugăm să sprijiniți software-ul autentic, să cumpărați înregistrarea și să obțineți un serviciu autentic mai bun. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail pentru a ne ocupa de ea.

E-mail To:help@itsvse.com

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

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

Răspuns rapidÎnapoi susÎnapoi la listă