修改Youku的Swf实现去广告

声明:本文只是对Flash实现16进制编辑的基本思路的说明,并不是确实可行完整的Youku去广告方法.

首先打开Firebug,获取swf文件地址,下载下来.

使用大名鼎鼎的某SWF Decomper工具反编译,经过鲁夫的爱的提点,

com.youku.core.view.components.BaseVideo

找到了关键代码. 

打算修改时,想到了几个问题.
首先,目前电脑上没有安装,也不想安装Flash;
其次,反编译的代码恐怕只能用来学习,反编译的结果需要耗费大量的精力进行修正才可正常编译;

于是想到了进行16进制编辑ABC

(ActionScript Byte Code)

,还好某SWF Decomper工具提供了查看2进制代码的功能.
但是

onConnectTimeOut

里逻辑太复杂,又想到黑屏时间是固定的30秒,修改黑屏时间为0不就可以了吗!

经过一番摸索(过程略),在

com.youku.plugins.ads.view.FrontMediator

showADHolder

函数里找到关键代码:

var _loc_1:Number = 0;
if (this._playerProxy.playerData.videoTotalTime < 60)
{
		_loc_1 = 0;
		this._playerProxy.dispatchEvent(new ReportEvent(ReportEvent.AD_BLOCK_NOTICE_REPORT, {type:"front", time:_loc_1, fa:this._FSOavailable}));
		this._playerProxy.dispatchEvent(new PluginEvent(PluginEvent.AD_LOAD_COMPLETE, {doLoad:true}));
		this.onADHolderFinished(null);
		return;
}
if (this._playerProxy.playerData.videoTotalTime >= 60 && this._playerProxy.playerData.videoTotalTime < 3 * 60)
{
		_loc_1 = 10;
}
else if (this._playerProxy.playerData.videoTotalTime >= 3 * 60 && this._playerProxy.playerData.videoTotalTime < 5 * 60)
{
		_loc_1 = 15;
}
else
{
		_loc_1 = 30;
}
this._adHolder = new ADHolder(_loc_1);

根据上面的代码,可以看出,对于小于60秒的视频,是不会黑屏的.我于是打算修改判断

videoTotalTime< 60 为 videoTotalTime >= 0.

切换到二进制代码视图, 关键的比较代码如下

//66 da 04 
_as3_getproperty com.youku.interfaces:IPlayerData::videoTotalTime
//24 3c 
_as3_pushbyte 60
//0c 48 00 00 
_as3_ifnlt offset: 72

祭出神器WinHex,查找

243C0C480000

.恩?什么,找不到.
很明显,数据被Flash加密或压缩了.

祭出时隐时现的神器Google,搜索后得之,CWS的Flash是被压缩了的,压缩只是简单的使用zlib库.
再次Google到swfdecomp.exe这样一个软件.成功转换为未压缩的FWS

(SWF的倒序?)

.

WinHex大显神通,查找

243C0C480000

只有一条记录.修改为

24000F480000

.

测试修改后的结果,正常运行并且不显示广告,OK.

 

这里是一个修改自cws2fwsflash.plPerl脚本,可以实现fws和cws的相互转换.

标签:优酷, Flash

已有 46 条评论

  1. Thank you. I like这篇文章

  2. 太强大了吧。

  3. 该死的15秒,能去掉是最好不过了。

    1. @Firm
      http://userscripts.org/scripts/show/119622

  4. 我不知道我的Chrome为什么自动去掉了youku的广告,不过还有个倒计时在那里
    猜想可能是ADBLOCK

    1. 赤裸裸的抄袭我的话,
      很明显是AdBlock的功劳.

  5. 这个我以前用过,很不错

  6. 小白飘过。。

  7. hhhpp hhhpp

    请问可以给我Tap sonic 的原始档嘛我想重新用eclipse修改+繁化谢您啰^^

    1. @hhhpp
      本土化这个游戏的语言只要直接unzip,然后修改/res/raw/text.json即可

      1. hhhpp hhhpp

        我是想自行加入新歌拉〜〜3Q啰^^

  8. 哦,最近也在玩youku的播放器
    http://itorr.sinaapp.com/qplayer/ 去AD没有那么复杂吧

    tolbkni说的showAd=0就是不错的解决方法

    1. 嗯,在对tolbkni的回复里说过了,
      qplayer版本的播放器有功能上的缺失,所以就有了此文

  9. 其实我想说我真的有点看不太懂啊

  10. hhhpp hhhpp

    请问Tap sonic要如何让他不连网玩呢:))谢您啰~~

添加新评论