架构师_程序员_码农网

E Ambil kata sandi
Daftar

QQ登录

Hanya satu langkah untuk memulai

Cari
架构师_程序员_码农网 "架构' 管理专区 & Area Manajemen ' Keluhan dan Saran ' 回收站 ' 爱奇艺播放器之去广告分析
Tampilan:5980|Balas: 3
打印 上一主题 下一主题

Analisis iklan dari pemain Aiki!

[tautan salin]
A 跳转到指定楼层
pemilik gedung
2014-10-23 22:26:53|只看该作者回帖奖励|MembalikkanPenjelajahan|Mode Baca

Baru-baru ini sibuk dengan pembukaan sekolah yang cocok untuk tunanetra - dua hari ini iklan video Zero sibuk, mengatakan iklan semakin membanjiri, beberapa iklan pembuka video lebih dari 60-an. Dia menyingkirkan iklan untuk Sohu, tetapi dia belum bisa menyingkirkan iklan untuk Aqiyi. Biar saya bantu dia mencari.

Kode sumbernya adalah yang dia berikan kepada saya, saya tidak memiliki decompiler swf.

Saya tidak punya decompiler swf, saya mungkin melihat strukturnya, dan saya belum belajar ActionScript. Katanya mirip dengan Java, jadi saya tidak perlu repot-repot melihat sintaksis dasarnya, dan langsung saja. Mari kita lihat header file utama Player.as terlebih dahulu, dan lihat referensi apa saja yang ada di sana.

  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.*;
Salin kodenya

Lihatlah namanya, com.qiyi.player.wonder.common.config.*; menarik perhatian saya - lihatlah informasi konfigurasinya. Ada dua file, FlashVarConfig.as dan SystemConfig.as. SystemConfig.as tidak menunjukkan sesuatu yang menarik, tetapi file konfigurasi xml yang direferensikan di FlashVarConfig.as layak untuk diselidiki.

  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 = "";
Menyalin kode

Pada baris 31, file konfigurasi ini memiliki paragraf ini. Dan pada baris 35 alamat iklan juga menarik perhatian saya, nanti dalam analisis. Pertama, lihatlah file konfigurasi.

  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>
Salin kodenya

Di sana tertulis bahwa ini adalah iklan dalam tayangan dengan durasi 8 detik, yang berarti saya melokalkannya dan membajak peramban untuk menghapus iklan tersebut, tetapi jelas bahwa ini bukan iklan sebelum video dimuat. Terus membolak-balik-proses yang sangat membosankan.

Cari tahu siapa yang memanggil get adPlayerURL() dan lihat ke atas. Di bawah com\qiyi\player\wonder\plugins\ad, saya menemukan bahwa pemutar iklan ada dalam bentuk plugin, yaitu masih ada panggilan, melihat ke atas, saya menemukan bahwa di com\qiyi\cupid\adplayer\CupidAdPlayer.as CupidAdPlayer diinisialisasi. Dan kelasnya dikaburkan, yang mencurigakan.

  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
Salin kodenya

CupidAdPlayer (param1: CupidParam) <- lihat parameter pemanggilannya, yaitu, lapisan atas masih memanggil, parameter mana yang satu, nilainya sangat mencolok, vipRight menilai apakah itu vip, dan vip tidak ada iklan, artinya, jika saya mendapatkan informasi pengguna di sesi di pemain, saya akan menggunakannya untuk mendapatkan informasi pengguna di situs web, artinya, jika saya mendapatkan informasi pengguna di sesi di pemain, saya akan menggunakannya untuk mendapatkan informasi pengguna di situs web. Artinya, jika saya membuat perubahan pada informasi pengguna di sesi situs web setelah pemainnya mendapatkan informasi pengguna di situs web, dan membuat perubahan di tempat menilai apakah itu vip atau bukan, yang akan menyebabkan lapisan bawah dipanggil, akan salah mengira bahwa itu adalah vip (hanya pemutar iklan yang mengira Anda adalah vip, dan tempat lain tidak akan terpengaruh). Jadi, mari kita terus mencari ke atas. Untuk mencarinya, kami kembali ke direktori plugin iklan. com\qiyi\player\wonder\plugins\ad\view di ADView.as, tajuk pertama adalah

  1. private var _adPlayer:CupidAdPlayer;
Salin Kode

Mendefinisikan instance CupidAdPlayer bernama _adPlayer sekali, gulir ke bawah untuk mengetahui siapa yang menggunakan _adPlayer. secara mengejutkan menemukan fungsi pembuatan pemutar iklan.

  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
Menyalin kode

Melihat bahwa Anda masih dapat mengoper parameter berarti fungsi tersebut masih dipanggil. Saya akhirnya menemukan sumbernya di ADViewMediator.as di bawah com\qiyi\player\wonder\plugins\ad\view. Panggilan terakhir ke fungsinya terlihat seperti ini

  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
Salin Kode

Poin kuncinya ada di bagian

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

Baris ini, untuk menentukan apakah pengguna adalah vip atau bukan, pertama menurut variabel lokal loc_2 untuk menentukan level pengguna, jika dengan definisi level vip, ia mengembalikan 1. Kami memberinya sedikit modifikasi, itu menjadi pseudo-vip.

  1. _loc_3.vipRight = _loc_2.userLevel != UserDef.USER_LEVEL_NORMAL ? ("1") : ("1");
Salin kodenya

Dengan cara ini di Hex untuk memodifikasi baris, iklan uji berhasil dihapus (menggunakan fungsi plug-in Chrome, ubah alamat pemutar untuk lokal, mainkan parameter yang sama untuk dilewati).

Selain itu, di AdBlockedBlackScreen.as di bawah com\qiyi\cupid\adplayer\model, ada fungsi deteksi lokal untuk melarang pemblokiran plug-in 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
Salin kodenya

Ubah saja pengembalian if kedua menjadi false.






Artikel sebelumnyaFreeze Restore Wizard 7.5 Alternatif Retak di Win7
Artikel Berikutnya: Instalasi mesin virtual VMware MAC OSX Mountain Lion
Jaringan Code Farmer, hanya dipublikasikan dalam proses latihan, mengalami kesulitan teknis, tidak menyesatkan orang lain.
Saya tidak yakin apakah Anda penggemar ini.
Saya tidak yakin apakah saya akan bisa melakukannya.
2014-10-23 23:25:57|只看该作者
Xiao Ningzi sangat hebat
Jaringan petani kode, hanya diterbitkan dalam proses praktik, mengalami kesulitan teknis, jangan menyesatkan orang lain.
Bangku
2014-10-24 21:57:25|只看该作者
Plugin untuk memblokir iklan ini lumayan bagus

Peringkat

Peserta 1 MB +1 Kontribusi +1 SingkirkanAlasan
admin + 1 + 1 Sangat kuat!

Lihat semua peringkat

Jaringan petani kode, hanya diterbitkan dalam proses praktik, mengalami kesulitan teknis, jangan menyesatkan orang lain.
papan lantai
pemilik|2014-10-24 22:01:44|只看该作者
Dikirim oleh skywriter pada 2014-10-24 21:57
Plugin untuk memblokir iklan ini tidak buruk

Adblock Plus adalah perangkat lunak penyaring iklan paling populer yang tersedia untuk peramban Firefox, Chrome, Opera, Safari, Android, dan Internet Explorer. Menyaring semua iklan online yang mengganggu: hapus iklan video di Youtube, saring iklan Facebook, singkirkan iklan pop-up, dan banyak lagi. Di Google Chrome, Adblock Plus adalah salah satu pengaya yang paling cepat berkembang.
CodeFarmer.com, hanya diterbitkan dalam proses latihan, mengalami kesulitan teknis, tidak menyesatkan orang lain.
Anda harus masuk sebelum dapat memposting kembali Masuk | Daftar

V ersi aturan integral iniB


PENAFIAN: Semua perangkat lunak, materi pemrograman, atau artikel yang dirilis oleh jaringan petani kode terbatas untuk tujuan studi dan penelitian; konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, semua konsekuensinya menjadi tanggung jawab pengguna. Informasi situs ini dari jaringan, sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus menghapus konten di atas sepenuhnya dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, mohon dukung perangkat lunak asli, beli registrasi dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email untuk menanganinya.

Mail To:help@itsvse.com

QQ | ( 鲁ICP备14021824号-2)|Peta Situs

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

Balas CepatKembali ke atasKembali ke daftar