Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 9139|Απάντηση: 3

Ανάλυση διαφήμισης προγράμματος αναπαραγωγής iQIYI

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 23/10/2014 10:26:53 μ.μ. | | | |

Πρόσφατα, ήμουν απασχολημένος με την έναρξη του σχολείου και είναι κατάλληλο να πετάω στα τυφλά – τις τελευταίες δύο ημέρες, το Zero ήταν απασχολημένο με βίντεο για διαφήμιση και λέγεται ότι οι διαφημίσεις γίνονται όλο και πιο αχαλίνωτες και ορισμένα βίντεο είναι ανοιχτά για περισσότερα από 60 χρόνια. Αφαίρεσε το Sohu, αλλά το iQiyi's δεν έχει γίνει ποτέ. Επιτρέψτε μου να τον βοηθήσω να ρίξει μια ματιά.

Ο πηγαίος κώδικας μου δόθηκε από αυτόν, δεν έχω απομεταγλωττιστή swf.

Μάλλον κοιτάζοντας τη δομή, δεν έχω μάθει ActionScript. Είπε ότι ήταν παρόμοια με την Java, οπότε δεν μπήκα στον κόπο να κοιτάξω τη βασική σύνταξη, οπότε πήγα κατευθείαν σε αυτήν. Ας ρίξουμε μια ματιά στην κεφαλή του κύριου αρχείου Player.as για να δούμε τι παραπομπές υπάρχουν.

  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.*;
Αντιγραφή κώδικα

Κοιτάξτε το όνομα για να μάθετε τη σημασία, com.qiyi.player.wonder.common.config.*; Μου τραβάει το μάτι – ρίξτε μια ματιά στις πληροφορίες διαμόρφωσης. Τα δύο έγγραφα FlashVarConfig.as και SystemConfig.as. SystemConfig.as δεν βρήκαν κάτι αξιοσημείωτο, αλλά αξίζει να εξετάσετε το αρχείο διαμόρφωσης xml που αναφέρεται στο FlashVarConfig.as.

  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 = "";
Αντιγραφή κώδικα

Στη γραμμή 31, αυτό το αρχείο διαμόρφωσης έχει αυτό το απόσπασμα. Και η διαφημιστική διεύθυνση στη γραμμή 35 τράβηξε επίσης την προσοχή μου, την οποία θα αναλύσω αργότερα. Ας δούμε πρώτα το αρχείο διαμόρφωσης.

  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>
Αντιγραφή κώδικα

Λέγεται ότι είναι διαφήμιση στο παιχνίδι, ώρα 8s, δηλαδή το εντοπίζω και μετά κλέβω το πρόγραμμα περιήγησης για να πετύχω διαφημίσεις, αλλά είναι προφανές ότι δεν πρόκειται για διαφήμιση πριν φορτώσει το βίντεο. Συνεχίστε να αναποδογυρίζετε - μια πολύ βαρετή διαδικασία.

Βρείτε ποιος κάλεσε τη λήψη adPlayerURL() και αναζητήστε. Κάτω από το com\qiyi\player\wonder\plugins\ad, διαπιστώνεται ότι το πρόγραμμα αναπαραγωγής διαφημίσεων υπάρχει με τη μορφή προσθήκης, δηλαδή υπάρχει μια κλήση, αναζητήστε, βρείτε το CupidAdPlayer στο com\qiyi\cupid\adplayer\CupidAdPlayer.as για προετοιμασία. Και αυτή η τάξη είναι μπερδεμένη, κάτι που είναι πολύ ύποπτο.

  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
Αντιγραφή κώδικα

CupidAdPlayer(param1:CupidParam) < – Κοιτάξτε τις παραμέτρους κλήσης του, δηλαδή το ανώτερο επίπεδο εξακολουθεί να καλεί, όπου η παράμετρος 1, μια τιμή είναι πολύ εντυπωσιακή, το vipRight κρίνει αν είναι vip και το VIP δεν έχει διαφήμιση, δηλαδή αν κάνω αλλαγές στο μέρος όπου κρίνω αν είναι VIP αφού λάβω τις πληροφορίες χρήστη στη συνεδρία του ιστότοπου στο πρόγραμμα αναπαραγωγής του, προκαλώντας την κλήση του κατώτερου επιπέδου, Μπερδεύτηκε με VIP (απλώς το πρόγραμμα αναπαραγωγής διαφημίσεων πιστεύει ότι είστε VIP και ο υπόλοιπος κόσμος δεν επηρεάζεται). Τότε ας συνεχίσουμε να κοιτάμε ψηλά. Έψαξα και έψαξα και επέστρεψα και επέστρεψα στον κατάλογο των διαφημιστικών προσθηκών. com\qiyi\player\wonder\plugins\ad\view Στο ADView.as, το κεφάλι είναι πρώτο

  1. private var _adPlayer:CupidAdPlayer;
Αντιγραφή κώδικα

Ορίσατε μια παρουσία του CupidAdPlayer με το όνομα _adPlayer, κοιτάξτε προς τα κάτω για να δείτε ποιος χρησιμοποίησε _adPlayer. Βρήκα τη λειτουργία δημιουργίας προγράμματος αναπαραγωγής διαφημίσεων.

  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
Αντιγραφή κώδικα

Είδα ότι μπορούσε επίσης να περάσει παραμέτρους, υποδεικνύοντας ότι εξακολουθούσε να καλείται. Τελικά βρήκα την πηγή στο ADViewMediator.as κάτω από com\qiyi\player\wonder\plugins\ad\view. Η λειτουργία του τελικά ονομάζεται έτσι

  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
Αντιγραφή κώδικα

Το βασικό σημείο είναι

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
Αντιγραφή κώδικα

Αυτή η πρόταση καθορίζει εάν ο χρήστης είναι VIP ή όχι, κρίνει πρώτα το επίπεδο του χρήστη σύμφωνα με την τοπική μεταβλητή loc_2 και επιστρέφει 1 εάν ταιριάζει με το καθορισμένο επίπεδο VIP. Του κάναμε μια μικρή τροποποίηση και έγινε ψευδο-VIP.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Αντιγραφή κώδικα

Με αυτόν τον τρόπο, απλώς τροποποιήστε το στο Hex και η δοκιμαστική διαφήμιση καταργείται με επιτυχία (χρησιμοποιώντας τη λειτουργία προσθήκης του Chrome, αλλάξτε τη διεύθυνση του προγράμματος αναπαραγωγής σε τοπική και περάστε τις παραμέτρους αναπαραγωγής ως έχουν).

Επιπλέον, στο com\qiyi\cupid\adplayer\model AdBlockedBlackScreen.as υπάρχει μια λειτουργία τοπικής ανίχνευσης που απαγορεύει τον αποκλεισμό προσθηκών του 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
Αντιγραφή κώδικα

Απλώς αλλάξτε την επιστροφή του δεύτερου εάν σε false.






Προηγούμενος:Αποκατάσταση σημείου πήξης Genie 7.5 σε εναλλακτική ρωγμή Win7
Επόμενος:Οι εικονικές μηχανές VMware είναι εγκατεστημένες στο MAC OSX Mountain Lion
Δημοσιεύτηκε στις 23/10/2014 11:25:57 μ.μ. |
Ο Xiao Ningzi είναι τόσο δυνατός
Δημοσιεύτηκε στις 24/10/2014 9:57:25 μ.μ. |
Αυτή η προσθήκη αποκλεισμού διαφημίσεων δεν είναι κακή

Παρτιτούρα

Αριθμός συμμετεχόντων1ΜΒ+1 συνεισφέρω+1 Κατάρρευση λόγος
διαχειριστής + 1 + 1 Πολύ δυνατό!

Δείτε όλες τις αξιολογήσεις

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 24/10/2014 10:01:44 μ.μ. |
Απαράμιλλο δημοσιευμένο 2014-10-24 21:57
Αυτή η προσθήκη αποκλεισμού διαφημίσεων δεν είναι κακή

Το Adblock Plus είναι το πιο δημοφιλές λογισμικό φιλτραρίσματος διαφημίσεων που διατίθεται σε Firefox, Chrome, Opera, Safari, Android και Internet Explorer. Φιλτράρετε όλες τις ενοχλητικές διαφημίσεις ιστού: καταργήστε τις διαφημίσεις βίντεο στο Youtube, φιλτράρετε τις διαφημίσεις Facebook, απαλλαγείτε από τις αναδυόμενες διαφημίσεις και πολλές άλλες διαφημίσεις. Στο Google Chrome, το Adblock Plus είναι ένα από τα ταχύτερα αναπτυσσόμενα πρόσθετα.
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com