|
Son zamanlarda kör katlama için uygun okulun açılışıyla meşgul - bu iki gün Sıfır yoğun video reklamları, reklamların giderek daha fazla sular altında kaldığını, bazı video açılış reklamlarının 60'lardan fazla olduğunu söyledi. Sohu'nun reklamlarından kurtulmuş ama Aqiyi'nin reklamlarından kurtulamamış. Bakmasına yardım edeyim. Kaynak kodu bana verdiği şey, bende swf çözücü yok. Bende swf decompiler yoktu, herhalde yapısına baktım, ActionScript de öğrenmedim. Java'ya benzediğini söyledi, bu yüzden temel sözdizimine bakmaya zahmet etmedim ve doğrudan ona gittim. Önce Player.as ana dosyasının başlığına bakalım ve orada hangi referansların olduğunu görelim. - import com.iqiyi.components.global.*;
- import com.iqiyi.components.tooltip.*;
- import com.qiyi.player.base.pub.*;
- import com.qiyi.player.base.uuid.*;
- import com.qiyi.player.core.*;
- import com.qiyi.player.core.model.def.*;
- import com.qiyi.player.core.model.utils.*;
- import com.qiyi.player.wonder.*;
- import com.qiyi.player.wonder.body.view.*;
- import com.qiyi.player.wonder.common.config.*;
- import com.qiyi.player.wonder.common.lso.*;
- import com.qiyi.player.wonder.common.pingback.*;
- import com.qiyi.player.wonder.common.sw.*;
- import flash.display.*;
- import flash.events.*;
- import flash.media.*;
- import flash.system.*;
- import flash.utils.*;
Kodu kopyalayın Adına bakın, com.qiyi.player.wonder.common.config.*; dikkatimi çekti - yapılandırma bilgilerine bakın. İki dosya var, FlashVarConfig.as ve SystemConfig.as. SystemConfig.as ilginç bir şey göstermiyor, ancak FlashVarConfig.as dosyasında referans verilen xml yapılandırma dosyası araştırmaya değer. - package com.qiyi.player.wonder.common.config
- {
- public class FlashVarConfig extends Object
- {
- public static const OWNER_PAGE:String = "page";
- public static const OWNER_CLIENT:String = "client";
- public static const OS_XP:String = "xp";
- public static const OS_WIN7:String = "win7";
- public static const OS_WIN8:String = "win8";
- public static const PAGE_OPEN_SRC_NONE:String = "0";
- public static const PAGE_OPEN_SRC_DIRECT:String = "1";
- public static const PAGE_OPEN_SRC_OTHER:String = "2";
- private static var _flashVarSource:Object;
- private static var _albumId:String = "";
- private static var _tvid:String = "0";
- private static var _vid:String = "";
- private static var _autoPlay:Boolean = true;
- private static var _isMemberMovie:Boolean = false;
- private static var _cyclePlay:Boolean = false;
- private static var _components:String = "fefff7e6";
- private static var _cupId:String = "";
- private static var _shareStartTime:int = -1;
- private static var _shareEndTime:int = -1;
- private static var _preloaderURL:String = "http://dispatcher.video.qiyi.com/dispn/player/preloader.swf";
- private static var _preloaderVipURL:String = "";
- private static var _exclusivePreloader:String = "";
- private static var _useGPU:Boolean = true;
- private static var _showBrand:Boolean = true;
- private static var _expandState:Boolean = false;
- private static var _tipDataURL:String = "http://static.qiyi.com/ext/tips/tipdata.xml";
- private static var _coop:String = "";
- private static var _owner:String = "page";
- private static var _os:String = "win7";
- private static var _adPlayerURL:String = "";
- private static var _origin:String = "";
- private static var _passportID:String = "";
- private static var _playListID:String = "";
Kodu kopyalama 31. satırda, bu yapılandırma dosyasında bu paragraf var. Ve reklam adresinin 35. satırında da, analizin ilerleyen bölümlerinde dikkatimi çekti. Önce yapılandırma dosyasına bakın. - </item>
- <!-- 正在为您播放片中广告, 可选择是否要跳过, 类别是1, 持续时间是8秒 -->
- <!-- 限制条件是: 不是正在登录中的会员 -->
- <!-- 每天每人次只最多显示两次这个tips -->
- <item id="ToSelectWhetherToSkipPlayingMiddleAD" level="1" duration="-1" type="1">
- <conditions>
- <fields>
- <field name="member" operator="eq" value="false"/>
- </fields>
- <frequency count="2">
- <restrain name="day"/>
- <restrain name="user"/>
- </frequency>
- </conditions>
- <list>
- <message>
- <![CDATA[
- 正在为您播放片中广告, <a href="event:ASEvent(skipAD)"><b><u>跳过广告</u></b></a>
- ]]>
- </message>
- </list>
- </item>
- <!-- 提示即将跳过8秒后会显示的剧中广告, 类别是1, 持续时间是8秒 -->
- <!-- 必须是登录的会员 -->
- <item id="ToCancelSkipNextMiddleAD" level="1" duration="8" type="1">
- <conditions>
- <fields>
- <field name="member" operator="eq" value="true"/>
- </fields>
- <frequency count="1">
- <restrain name="day"/>
- <restrain name="user"/>
- </frequency>
- </conditions>
- <list>
- <message>
- <![CDATA[
- 即将为您跳过片中广告,<a href="event:ASEvent(cancelSkipAD)"><u>不再跳过</u></a>
- ]]>
- </message>
- </list>
- </item>
- <!--
- 提示版权下线, 如果还有小于7天的时间下线, 每天一个专辑一台电脑提醒一次, 类别是1, 从起始60秒开始显示, 持续时间是10秒
- -->
- <!-- 因为优先级很高, 前面的最高优先级是10, 所以这里把level设为11. -->
- <!-- 这个tip是由signal发起的. Shawn.X -->
- <!--
- 《<span>#keyword#</span>》 将于 <span>#expiredTime#</span> 版权到期.
- -->
- <item id="NoticeThisCopyrightWillExpire" level="11" duration="10" type="1">
- <conditions>
Kodu kopyalayın Bunun 8 saniye süreli bir gösteri içi reklam olduğu yazıyor, bu da reklamları kaldırmak için yerelleştirdiğim ve tarayıcıyı ele geçirdiğim anlamına geliyor, ancak bunun video yüklenmeden önce bir reklam olmadığı açık. Çevirmeye devam edin - çok sıkıcı bir süreç. get adPlayerURL() işlevini kimin çağırdığını bulun ve yukarı bakın. com\qiyi\player\wonder\plugins\ad altında, reklam oynatıcının bir eklenti şeklinde var olduğunu buldum, yani hala bir çağrı var, yukarı doğru baktığımda, com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer'ın başlatıldığını buldum. Ve sınıf gizlenmiş, bu da şüpheli. - public function CupidAdPlayer(param1:CupidParam)
- {
- this.PLAYER_TIMEOUT_LENGTHS = new Array(10000, 15000);
- Log.info("init, version=" + VERSION + ", " + param1.toString());
- this._videoPlayerVersion = param1.videoPlayerVersion;
- this._videoId = param1.videoId;
- this._tvId = param1.tvId;
- this._channelId = param1.channelId;
- this._collectionId = param1.collectionId;
- this._playerId = param1.playerId;
- this._albumId = param1.albumId;
- this._userId = param1.userId;
- this._webEventId = param1.webEventId;
- this._videoEventId = param1.videoEventId;
- this._vipRight = param1.vipRight;
- this._terminal = param1.terminal;
- this._duration = param1.duration;
- this._passportId = param1.passportId;
- this._passportCookie = param1.passportCookie;
- this._passportKey = param1.passportKey;
- this._videoDefinitionId = param1.videoDefinitionId;
- if (this.isQiyiWebEx())
- {
- this._playerUrl = this.IQIYI_WEBEX_AM_URL;
- }
- else if (param1.playerUrl)
- {
- this._playerUrl = param1.playerUrl;
- }
- else
- {
- this._playerUrl = this.IQIYI_WEB_AM_URL;
- }
- if (param1.dispatcher == null)
- {
- this._dispatcher = this;
- }
- else
- {
- this._dispatcher = param1.dispatcher;
- }
- this._volume = param1.volume;
- this._videoIndex = param1.videoIndex;
- this._stageWidth = param1.stageWidth;
- this._stageHeight = param1.stageHeight;
- this._displayContainer = param1.adContainer;
- this._screenStatus = DisplayProperties.isFullScreen(this._displayContainer.stage) ? ("1") : ("0");
- this._baiduMainVideo = param1.baiduMainVideo;
- this._disablePreroll = param1.disablePreroll;
- this._disableSkipAd = param1.disableSkipAd;
- this._enableVideoCore = param1.enableVideoCore;
- this._isUGC = param1.isUGC;
- this._videoPlayerUrl = this._displayContainer.loaderInfo ? (this._displayContainer.loaderInfo.loaderURL) : ("");
- this._env = this.generateEnv();
- this.addAdPlayerEventListeners();
- return;
- }// end function
Kodu kopyalayın CupidAdPlayer(param1:CupidParam) <- çağıran parametrelerine bakın, yani üst katman hala çağırıyor, hangi parametre bir, bir değer çok dikkat çekici, vipRight Vip olup olmadığına karar ver, ve vip yok reklamlar, yani oyuncusundaki oturumdaki kullanıcı bilgilerini alırsam, web sitesindeki kullanıcı bilgilerini almak için kullanacağım, yani oyuncusundaki oturumdaki kullanıcı bilgilerini alırsam, web sitesindeki kullanıcı bilgilerini almak için kullanacağım. Yani oynatıcısı web sitesindeki kullanıcı bilgilerini aldıktan sonra web sitesinin oturumundaki kullanıcı bilgilerinde bir değişiklik yaparsam ve alt katmanın çağrılmasına neden olacak vip olup olmadığına karar verme yerinde bir değişiklik yaparsam, yanlışlıkla vip olduğu düşünülecektir (sadece reklam oynatıcısı vip olduğunuzu düşünür, diğer yerler etkilenmez). Bu yüzden yukarı doğru bakmaya devam edelim. Bunu ararken, reklam eklentisinin dizinine geri döndük. com\qiyi\player\wonder\plugins\ad\view ADView.as içinde, başlık ilk olarak - private var _adPlayer:CupidAdPlayer;
Kod Kopyala CupidAdPlayer'ın _adPlayer adlı bir örneğini bir kez tanımladım, _adPlayer'ı kimin kullandığını bulmak için aşağı kaydırdım. şaşırtıcı bir şekilde reklam oyuncusu oluşturma işlevini buldum. - public function createAdPlayer(param1:CupidParam) : void
- {
- if (this._adPlayer)
- {
- this.unloadAdPlayer();
- }
- this._log.info("loading adplayer...");
- this._adPlayer = new CupidAdPlayer(param1);
- this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_LOADING_SUCCESS, this.onAdLoadSuccess);
- this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_LOADING_FAILURE, this.onAdLoadFailed);
- this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_START, this.onAdStartPlay);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_PAUSE, this.onAdAskVideoPause);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_RESUME, this.onAdAskVideoResume);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_START_LOADING, this.onAdAskVideoStartLoad);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_START, this.onAdAskVideoStartPlay);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_END, this.onAdAskVideoEnd);
- this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_BLOCK, this.onAdBlock);
- this._adPlayer.addEventListener(AdPlayerEvent.CONTROL_VIDEO_DISPLAY_AD_TIP, this.onAskVideoShowBonusTips);
- this._adPlayer.addEventListener(AdPlayerEvent.ADPLAYER_AD_VIDEO, this.onAdFlvADAction);
- this._adPlayer.load();
- return;
- }// end function
Kodu kopyalıyorum Hala parametre geçebildiğinizi görmek, hala çağrıldığı anlamına gelir. Sonunda kaynağı ADViewMediator.as içinde com\qiyi\player\wonder\plugins\ad\view altında buldum. İşlevine yapılan son çağrı şu şekilde görünüyor - private function createADPlayer() : void
- {
- sendNotification(BodyDef.NOTIFIC_PLAYER_STOP_LOAD);
- ProcessesTimeRecord.STime_adInit = getTimer();
- var _loc_1:* = facade.retrieveProxy(PlayerProxy.NAME) as PlayerProxy;
- var _loc_2:* = facade.retrieveProxy(UserProxy.NAME) as UserProxy;
- var _loc_3:* = new CupidParam();
- _loc_3.playerUrl = FlashVarConfig.adPlayerURL;
- _loc_3.videoId = _loc_1.curActor.loadMovieParams.vid;
- _loc_3.tvId = _loc_1.curActor.loadMovieParams.tvid;
- _loc_3.channelId = _loc_1.curActor.movieModel.channelID;
- _loc_3.playerId = FlashVarConfig.cupId;
- _loc_3.albumId = _loc_1.curActor.movieModel.albumId;
- _loc_3.dispatcher = null;
- _loc_3.adContainer = this._ADView;
- _loc_3.stageWidth = GlobalStage.stage.stageWidth;
- _loc_3.stageHeight = GlobalStage.stage.stageHeight;
- _loc_3.userId = _loc_1.curActor.uuid;
- _loc_3.webEventId = UUIDManager.instance.getWebEventID();
- _loc_3.videoEventId = UUIDManager.instance.getVideoEventID();
- _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
- _loc_3.terminal = "iqiyiw";
- _loc_3.duration = _loc_1.curActor.movieModel.duration / 1000;
- _loc_3.passportId = _loc_2.passportID;
- _loc_3.passportCookie = _loc_2.P00001;
- _loc_3.passportKey = KeyUtils.getPassportKey(0);
- _loc_3.enableVideoCore = true;
- _loc_3.disableSkipAd = _loc_1.curActor.movieModel.forceAD;
- _loc_3.volume = Settings.instance.mute ? (0) : (Settings.instance.volumn);
- _loc_3.isUGC = UGCUtils.isUGC(_loc_1.curActor.movieModel.tvid);
- _loc_3.collectionId = FlashVarConfig.collectionID;
- _loc_3.videoDefinitionId = _loc_1.curActor.movieModel.curDefinitionInfo.type.id;
- _loc_3.videoPlayerVersion = WonderVersion.VERSION_WONDER;
- this._ADView.createAdPlayer(_loc_3);
- return;
- }// end function
Kod Kopyala Kilit nokta - _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("0");
Kod Kopyala Bu satır, kullanıcının vip olup olmadığını belirlemek için, önce loc_2 yerel değişkenine göre kullanıcının seviyesini belirler, eğer vip seviyesinin tanımı ile 1 döndürür. Ona küçük bir değişiklik yapıyoruz, sözde bir vip oluyor. - _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Kodu kopyalayın Bu şekilde Hex'te satırı değiştirmek için, test reklamları başarıyla kaldırıldı (Chrome'un eklenti işlevini kullanarak, yerel için oynatıcı adresini değiştirin, geçmek için aynı parametreleri oynatın). Ek olarak, com\qiyi\cupid\adplayer\model altındaki AdBlockedBlackScreen.as içinde, Chrome'un eklenti engellemesini yasaklamak için yerel bir algılama işlevi vardır. - public static function isInBlacklist(param1:String) : Boolean
- {
- if (!param1)
- {
- return false;
- }
- if (StringUtils.beginsWith(param1, "chrome-extension://"))
- {
- return true;
- }
- var _loc_2:* = new URLParser(param1);
- var _loc_3:* = _loc_2.getHost();
- return HOST_BLACKLIST.indexOf(_loc_3) != -1;
- }// end function
Kodu kopyalayın Sadece ikinci if'in dönüşünü false olarak değiştirin.
|