最近忙着开学适宜瞎折腾–这两天Zero忙着视频去广告,话说广告越来越泛滥了,有的视频开通广告都超过60s了。搜狐的他去掉了,但是爱奇艺的一直没搞定。让我帮他看看。 源码是他给我的,我没有swf反编译器。 大概看了下结构,ActionScript我没有学过。他说跟Java差不多,我也就懒得看基本语法了,直接上。先看下主文件Player.as的头吧,看看有哪些引用。 看名知意,com.qiyi.player.wonder.common.config.*;引起我的注意–看看配置信息吧。两个文件FlashVarConfig.as与SystemConfig.as。SystemConfig.as没发现什么起眼的东西,但是FlashVarConfig.as中引用的xml配置文件值得研究。 在31行里,这个配置文件有这样一段话。并且在35行的广告播放地址也引起我的注意,稍后在分析。先看配置文件。 说是剧中广告,8s时间,也就是说我将其本地化,然后劫持浏览器就可以实现去广告,但是很明显,这个不是视频加载前的广告。继续翻—很枯燥的过程。 查找get adPlayerURL() 是谁调用的,向上寻找。在com\qiyi\player\wonder\plugins\ad下发现,广告播放器是以插件形式存在的,也就是还有调用,向上找,找到在com\qiyi\cupid\adplayer\CupidAdPlayer.as处CupidAdPlayer进行初始化。并且该类做了混淆处理,很可疑。 CupidAdPlayer(param1:CupidParam) <–看其调用参数,也就是上层还有在调用,其中参数一中的,一个值很引人注意,vipRight 判断是否为vip,而vip就不存在广告了,也就是说如果我在其播放器获取网站的session里的用户信息之后,在判断是否为vip的地方作出修改,导致下层被调用的时候,被误以为是vip(仅仅广告播放器认为你是vip,而其他地方不受影响)。那我们就继续向上找起吧。找着找着又回去了,又回到广告插件的目录了。com\qiyi\player\wonder\plugins\ad\view里的ADView.as,头部先是 定义了一次名为_adPlayer的CupidAdPlayer的实例,向下翻查,谁使用了_adPlayer。竟然找到了广告播放器的创建函数。 看到还可以参数传递,说明还有在调用。终于在com\qiyi\player\wonder\plugins\ad\view下的ADViewMediator.as找到了源头。他的函数最终调用是这样的 关键点在 这句,判断是用户是否为vip,首先根据局部变量loc_2判断用户的级别,如果与定义的vip级别相符,就返回1。我们给他稍作修改,就成了伪vip了。 这样在Hex里修改下就行了,测试广告成功去掉(利用Chrome的插件功能,修改播放器地址为本地的,播放参数原样传递)。 另外在com\qiyi\cupid\adplayer\model下的AdBlockedBlackScreen.as有一个本地检测函数,禁止Chrome的插件屏蔽。 把第二个if 的return改为false就行了。
|