架构师_程序员_码农网

B Passwort abrufen
Registrieren

QQ登录

Nur ein Schritt zum Start

Suche
Ansicht:5980|Antwort: 3
打印 上一主题 下一主题

Die Anzeigenanalyse des Aiki-Spielers!

[Link kopieren]
A 跳转到指定楼层
der Eigentümer des Gebäudes
发表于 2014-10-23 22:26:53|只看该作者回帖奖励 | UmgekehrtesBlättern|Lesemodus

Kürzlich mit der Eröffnung der Schule geeignet für blinde Faltung beschäftigt - diese beiden Tage Null beschäftigt Video-Anzeigen, sagte die Anzeigen werden immer mehr überflutet, einige der Video-Eröffnung Anzeigen sind mehr als 60s. Er ist die Anzeigen für Sohu losgeworden, aber er hat es nicht geschafft, die Anzeigen für Aqiyi loszuwerden. Ich werde ihm bei der Suche helfen.

Der Quellcode ist das, was er mir gegeben hat, ich habe keinen swf-Decompiler.

Ich hatte keinen swf-Decompiler, ich habe mir wahrscheinlich die Struktur angesehen, und ich habe ActionScript nicht gelernt. Er sagte, es sei ähnlich wie Java, also mache ich mir nicht die Mühe, mir die grundlegende Syntax anzusehen, sondern fange direkt an. Schauen wir uns zunächst den Header der Hauptdatei Player.as an, um zu sehen, welche Verweise dort enthalten sind.

  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.*;
Kopieren Sie den Code

Ein Blick auf den Namen, com.qiyi.player.wonder.common.config.*; hat meine Aufmerksamkeit erregt - schau dir die Konfigurationsinformationen an. Es gibt zwei Dateien, FlashVarConfig.as und SystemConfig.as. SystemConfig.as zeigt nichts Interessantes, aber die xml-Konfigurationsdatei, auf die in FlashVarConfig.as verwiesen wird, ist es wert, untersucht zu werden.

  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 = "";
Kopieren des Codes

In Zeile 31 dieser Konfigurationsdatei steht dieser Absatz. Und in Zeile 35 der Werbeansprache fiel mir später bei der Analyse ebenfalls etwas auf. Werfen Sie zunächst einen Blick in die Konfigurationsdatei.

  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>
Kopieren Sie den Code

Hier steht, dass es sich um eine In-Show-Werbung mit einer Dauer von 8 Sekunden handelt, was bedeutet, dass ich sie lokalisiert und den Browser gekapert habe, um die Werbung zu entfernen, aber es ist klar, dass es sich nicht um eine Werbung handelt, bevor das Video geladen wird. Blättern Sie weiter - ein sehr langweiliger Prozess.

Finden Sie heraus, wer get adPlayerURL() aufruft, und schauen Sie nach oben. Unter com\qiyi\player\wonder\plugins\ad habe ich festgestellt, dass der Ad-Player in Form eines Plugins existiert, d. h. es gibt noch einen Aufruf, und wenn ich nach oben schaue, finde ich, dass unter com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer initialisiert wird. Und die Klasse ist obfuscated, was verdächtig ist.

  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
Kopieren Sie den Code

CupidAdPlayer(param1:CupidParam) <- schauen Sie sich die aufrufenden Parameter an, das heißt, die obere Schicht ruft immer noch auf, welcher Parameter ein, ein Wert ist sehr auffällig, vipRight Richter, ob es vip ist, und vip gibt es nicht Anzeigen, das heißt, wenn ich die Benutzerinformationen in der Sitzung im Player bekomme, werde ich sie verwenden, um die Benutzerinformationen in der Website zu bekommen, das heißt, wenn ich die Benutzerinformationen in der Sitzung im Player bekomme, werde ich sie verwenden, um die Benutzerinformationen in der Website zu bekommen. Das heißt, wenn ich eine Änderung in den Benutzerinformationen in der Sitzung der Website vornehme, nachdem der Player die Benutzerinformationen auf der Website erhalten hat, und eine Änderung an der Stelle vornehme, an der beurteilt wird, ob es sich um einen VIP handelt oder nicht, was dazu führt, dass die untere Schicht aufgerufen wird, wird fälschlicherweise angenommen, dass es sich um einen VIP handelt (nur der Werbeplayer denkt, dass Sie ein VIP sind, und die anderen Stellen sind nicht betroffen). Schauen wir also weiter nach oben. Auf der Suche danach gehen wir zurück in das Verzeichnis des Werbe-Plugins. com\qiyi\player\wonder\plugins\ad\view in der ADView.as, der Header lautet zunächst

  1. private var _adPlayer:CupidAdPlayer;
Code kopieren

Definierte eine Instanz von CupidAdPlayer mit dem Namen _adPlayer einmal, scrollte nach unten, um herauszufinden, wer _adPlayer verwendet. fand überraschenderweise die Funktion zur Erstellung des Anzeigenspielers.

  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
Kopieren des Codes

Wenn man sieht, dass man immer noch Parameter übergeben kann, bedeutet das, dass die Funktion immer noch aufgerufen wird. Ich fand schließlich den Quellcode in ADViewMediator.as unter com\qiyi\player\wonder\plugins\ad\view. Der finale Aufruf seiner Funktion sieht so aus

  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 kopieren

Der Schlüsselpunkt liegt in der

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

Diese Zeile, um festzustellen, ob der Benutzer ein vip ist oder nicht, zunächst nach der lokalen Variable loc_2, um die Ebene des Benutzers zu bestimmen, wenn mit der Definition der vip-Ebene, gibt es 1. Wir geben ihm eine leichte Änderung, wird es ein Pseudo-vip.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Kopieren Sie den Code

Auf diese Weise in Hex, um die Zeile zu ändern, Testanzeigen erfolgreich entfernt (mit Chrome-Plug-in-Funktion, ändern Sie die Player-Adresse für die lokale, spielen die gleichen Parameter zu übergeben).

Darüber hinaus gibt es in der AdBlockedBlackScreen.as unter com\qiyi\cupid\adplayer\model eine lokale Erkennungsfunktion, um die Plug-in-Blockierung von Chrome zu verhindern.

  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
Kopieren Sie den Code

Ändern Sie einfach die Rückgabe des zweiten if in false.






Vorheriger ArtikelFreeze Restore Wizard 7.5 Alternative Crack in Win7
Nächster Artikel: VMware virtuelle Maschine Installation MAC OSX Mountain Lion
Code Farmer Netzwerk, nur in der Praxis Prozess veröffentlicht, stieß auf technische Schwierigkeiten, nicht in die Irre führen andere.
Ich bin mir nicht sicher, ob du ein Fan von dem hier bist.
Ich bin mir nicht sicher, ob ich dazu in der Lage sein werde.
发表于 2014-10-23 23:25:57|只看该作者
Xiao Ningzi ist so großartig
Der Code Bauernnetzwerk, nur in den Prozess der Praxis veröffentlicht, stieß auf technische Schwierigkeiten, nicht in die Irre führen andere.
Bank
发表于 2014-10-24 21:57:25|只看该作者
Dieses Plugin zum Blockieren von Werbung ist nicht schlecht

Bewertung

Teilnehmer 1 MB +1 Beitrag +1 WeglegenGrund
admin + 1 + 1 Sehr kraftvoll!

Alle Bewertungen anzeigen

Der Code Landwirt Netzwerk, nur in den Prozess der Praxis veröffentlicht, stieß auf technische Schwierigkeiten, nicht in die Irre führen andere.
Dielen
Eigentümer|发表于 2014-10-24 22:01:44|只看该作者
Geschrieben von skywriter am 2014-10-24 21:57
Dieses Plugin zum Blockieren von Werbung ist nicht schlecht

Adblock Plus ist die beliebteste Software zum Filtern von Werbung, die für die Browser Firefox, Chrome, Opera, Safari, Android und Internet Explorer verfügbar ist. Filtern Sie alle lästigen Online-Anzeigen: Entfernen Sie Video-Werbung auf Youtube, filtern Sie Facebook-Werbung, werden Sie Pop-up-Werbung los und vieles mehr. Für Google Chrome ist Adblock Plus eines der am schnellsten wachsenden Plugins.
CodeFarmer.com, nur in den Prozess der Praxis veröffentlicht, stieß auf technische Schwierigkeiten, nicht in die Irre führen andere.
Sie müssen sich anmelden, bevor Sie zurückschreiben können Anmelden | Registrieren

D iese Version der integralen Regeln


DISCLAIMER: Alle Software, Programmierung Materialien oder Artikel durch den Code Landwirt Netzwerk veröffentlicht wird, um Studien-und Forschungszwecken beschränkt; die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, da sonst alle Folgen bitte Benutzer verantwortlich. Diese Website Informationen aus dem Netzwerk, Urheberrechtsstreitigkeiten hat nichts mit dieser Website zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Herunterladen vollständig von Ihrem Computer entfernen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte die echte Software, kaufen Sie die Registrierung und erhalten Sie einen besseren echten Service. Wenn es irgendeine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail, um damit umzugehen.

E-Mail To:help@itsvse.com

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

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

SchnellantwortZurück zum AnfangZurück zur Liste