男同 小说 [保举][原创]-付费问答-看雪-安全社区|安全招聘|kanxue.com
发布日期:2024-10-30 12:28 点击次数:93
绫 丝袜
我对优酷和土豆播放器的缱绻仍然流于名义, 但愿有能之士多加指引和补充.
明慧: 优酷api 咫尺加入了跨域铁心, 我自行搭建了一个反向代理来绕过, 在此未几赘述.
〇、 写在前边
之前写过一篇破解优酷播放器的著作, 但其时对优酷源代码的阅读尚不成深切, 不成体系. 这两周我把优酷播放器钻研了一遍, 在这里把经过记载一下.
按照这个设施修改播放器能作念到功能与原版播放器充足一致, 并且去掉超时恭候之后播放器的反应速率比原版播放器更快 (优酷播放器的超时恭候为8秒, 土豆播放器的超时恭候为4秒) . 修改后的播放器还是整合到OpenGG.Clean.Player 里.
附表的数据可能随播放器的升级而失效, 但本文所述的反编译播放器设施是耐久灵验的.
可能用到的软件:
wget , 用于下载播放器
swftools , 用于压缩息争压flash
Sothink SWF Decompiler 贸易软件, 用于反编译flash
Adobe Flash Pro 贸易软件, 用于avm2 bytecode 实验
yogda https://code.google.com/p/opengg-clean-player/downloads/detail?name=Yogda.1.0.564.zip , 用于反汇编bytecode
HxD -nexus.de/en/hxd/, 用于修改flash 文献
wamp , 用于搭建测试环境
Firefox https://www.mozilla.org/en-US/firefox/new/ , 用于测试
一、 下载原版播放器.
干预优酷, 疏漏洞开一个视频, 右键点击Adblock Plus for Firefox 的图标, 接收Blockable items (可过滤名目 ), 这里会列出该页援用的悉数元素. 咱们接收优酷播放器(type 为Objcet ), 复制其地址 "" . 土豆同理.
用wget 等器用下载这个播放器到硬盘里:
wget ""
wget "_online/TudouVideoPlayer_Homer_NewSkin_30.swf"
复制代码
二、 解压swf文献.
似乎是从flash 6 驱动, swf 文献齐不错用zlib 压缩了, 咱们用swftools 自带的 swfcombine 解压出来, 以肤浅修改. 详见swftools faq .
swfcombine -d player.swf -o player.fws.swf
swfcombine -d TudouVideoPlayer_Homer_234.swf -o TudouVideoPlayer_Homer_234.fws.swf
复制代码
三、 反编译优酷播放器, 得到源代码.
这里需要用到贸易版的Sothink SWF Decompiler , 下载地址就不提供了.
用Sothink SWF Decompiler 洞开player.fws.swf, 在右侧export 栏中就能看到播放器内的图片等元素, 还能看到反编译出来的源代码. 咱们只疗养源代码, 于是去掉Shape 和 Image 等其他选项, 只接收Action, 导出到一个文献夹里.
四、 阅读源代码.
导出的源代码绝顶圆善, 不错看到播放器的用户数据采集和告白赢得等模块怎样责任, 进而不错得出对策.
分析与修改的主要战略有二:
自顶向下, 平直在逻辑里去掉对模块或函数的调用;
从下到上, 针对具体的积存行为, 以url 的参数为重要字查找, 去掉函数内对应的语句.自顶向下的修改, 能把功能删得比拟干净, 但一个函数时时会被调用许屡次, 可能需要改许多所在. 从下到上的修改则比拟平直而肤浅. 具体选择哪种战略, 不错笔据责任量来量度, 尽量接收修改最少的设施. 对优酷播放器主要用前一种战略, 对土豆播放器主要用后一种战略.
在此我就省略确伸开了, 以下平直给出论断.
优酷播放器:
ADFacade 弗成平直去除, 不然会使播放器责任不日常, 只可修改com.youku.plugins.ads.model 下种种的行为, 使之不加载告白.
FrontMediator.showADHolder() 函数与黑屏连络.
com.youku.plugins.ads.model.ADProxy 是播放器告白最中枢的部分, FrontProxy 等子类通过ADProxy.loadData() 加载告白和事件绑定;
修改 ADProxy.loadData() 函数后, 播放前会恭候8秒, 需要修改 FrontProxy.init(), 去除超时恭候;
清空ReportFacade.init() 函数, 不错平直使用户数据采集模块不责任.
PlayerData.getJumpURL()函数的复返值即外链播放器的弹出地址, 不错复返一个无统计的地址, 幸免用户数据被优酷就业器采集.土豆播放器:
AdLoader.load() 函数调用AdLoader.loadAdInfo() 加载告白;
AdTracker.adExpect() 函数中的sendToURL(_loc_5) 发送用户数据;
PlayerEventTracker.sendStartEventTrack() 函数发送用户数据;
GlobalTracker.sendLog() 函数中的sendToURL(_loc_4) 发送用户数据;
ErrorTracker.send() 函数中的sendToURL(_loc_7) 发送用户数据;
ErrorReportTracker.send() 函数中的sendToURL(_loc_6) 发送用户数据;
AdCommand.execute() 函数中的 _loc_3.delayTime = PlayerConsts.AD_TIMEOUT_TIME * 1000; 会在播放前恭候4 秒.
PageInfo.collect() 函数中的 _expandStage = pageInfo["scale"] == "1" 规模播放器的宽屏, 把它改为_expandStage = true 即可默许宽屏.
五、 修改播放器.
可是咱们弗成平直用Sothink SWF Decompiler 反编译出来的代码进行编译, 只可通过hex 裁剪器修改player.fws.swf 文献来修改播放器的行为. 修改的旨趣是, 先分析出源代码编译出来的教导, 在hex 裁剪器里查找这些教导, 修改它们, 从而修改播放器的行为.
在这里咱们用到两个免费的软件: avm2动态分析器用yogda 和hex裁剪器HxD.
然后为了进行在线调试, 需要把播放器放到web 就业器的www 目次里, 我使用的是wamp, 装配在D盘 .
先把player.fws.swf 复制到D:\wamp\www\ 定名为player.new.swf ;
运行wamp, 在Firefox 里洞开?VideoIDS=XMjA0Mjg4Nzk2 ,洞开Firebug 的net tab和 Adblock Plus 的Blockable items , 肤浅咱们不雅察播放器的积存行为;
用yogda 洞开player.new.swf 查找需要修改的函数名, 记载下需要修改的语句对应的hex 教导;
用HxD 修改player.new.swf ,把需要修改的教导改掉, 大要平直用02 抹掉(02 对应的行为是 Do nothing, 详见 ), 明慧修改前后要保捏教导等长, 不要影响文献的大小. 改好后 ctrl+s 保存修改;
有的教导在通盘swf 中出现许屡次, 为了找准修改点, 不错在合并个函数里接收一些比拟冷漠的教导当作锚点 (如对某些冷漠字符串的调用), 在锚点隔壁查找见地教导.
每修改一次齐在firefox 里刷新看有无扫尾, 是否影响功能, 要是无效就到D:\wamp\www\ 把player.new.swf 删掉, 把player.new.swf.bak 重定名为player.new.swf , 回滚到修改前的景色, 另寻念念路进行修改.
修改语句的过程中, 可能需要拼集教导, 此时不错用Adobe Flash Pro 写一个小的Hello World, 看编译的扫尾, 也不错平直在yogda 里修改汇编代码, 记载修改后的对应的教导, 但不要平直使用yogda的保存功能. 咱们只用yogda 看汇编, 只用HxD 改文献.六、 压缩swf 文献.
咫尺咱们不错用swfcombine 把改好的swf 压缩, 检朴体积.
swfcombine -dz player.new.swf -o player.pack.swf
swfcombine -dz TudouVideoPlayer_Homer_234.new.swf -o TudouVideoPlayer_Homer_234.pack.swf
复制代码
附、 修改优酷和土豆播放器的教导对照表
优酷 player.swf :
修 改 FrontMediator.showADHolder() 函数, 把if (this._playerProxy.playerData.videoTotalTime < 60) 改成 if (this._playerProxy.playerData.videoTotalTime >= 0):
用HxD 查找 D0 66 D3 0C 66 A5 02 66 E1 04 24 3C 0c 42 00 00 , 替换为 D0 66 D3 0C 66 A5 02 66 E1 04 24 00 0F 42 00 00.
修改ADProxy.loadData() 函数, 去除 _loc_5.load(new URLRequest(param2 + _loc_8)) 语句:
用HxD 查找 62 05 5D 3F D2 62 08 A0 4A 3F 01 4F AD 0B 01 , 右键接收"填充接收实践", 用02填充.
修改FrontProxy.init() 函数, 把var _loc_11:* = setTimeout(this.loadDataTimeOut, 8000) 里的8000 改成0:
用HxD 查找 25 C0 3E (即short int 8000 ), 改成 25 00 02 (25 00 即为short int 0, 02 为do nothing ).
清空ReportFacade.init() 函数:
用HxD 查找 5D 9C 10 D1 D2 4A 9C 10 02 80 9C 10 D7 5D F1 06 D3 4F F1 06 01 5D 77 D2 4A 77 01 80 77 63 04 5D DF 06 62 04 4F DF 06 01 60 B8 02 60 C8 02 66 D3 25 62 04 4F B3 25 02 , 右键接收"填充接收实践", 用02填充.
用HxD 查找 5D 9F 10 D1 D2 4A 9F 10 02 80 9F 10 D7 5D F1 06 D3 4F F1 06 01 5D 77 D2 4A 77 01 80 77 63 04 5D DF 06 62 04 4F DF 06 01 60 B8 02 60 C8 02 66 D8 25 62 04 4F B8 25 02 , 右键接收"填充接收实践", 用02填充.
修改PlayerData.getJumpURL()的复返值:
用HxD 查找 2C F6 2A D2 A0 A0 85 D5 D1 48, 替换为 2C F6 2A D2 A0 A0 85 D5 D2 48 .
用HxD 查找 2C 81 2B D2 A0 A0 85 D5 D1 48, 替换为 2C 81 2B D2 A0 A0 85 D5 D2 48 .
土豆 TudouVideoPlayer_Homer_234.swf :
修改AdLoader.load() 函数, 删除 loadAdInfo():
用HxD 查找 5D F5 01 4F F5 01 00 , 右键接收"填充接收实践", 用02填充.
修改AdTracker.adExpect() 函数, 删除 sendToURL(_loc_5):
用HxD 查找 61 BD 20 5D CC 21 62 05 4F CC 21 01 , 替换为 61 BD 20 02 02 02 02 02 02 02 02 02 .
清空PlayerEventTracker.sendStartEventTrack() 函数:
用HxD 查找 5D 8F 06 D1 4F 8F 06 01 60 D8 08 60 92 06 4F 83 1A 01 60 D7 08 60 92 06 60 92 06 66 DF 03 4F 83 1A 02 5D 8C 06 4F 8C 06 00 60 D2 08 60 92 06 4F 83 1A 01 5D 8D 06 4F 8D 06 00 , 右键接收"填充接收实践", 用02填充.
修改 GlobalTracker.sendLog() 函数 , 删除sendToURL(_loc_4):
用HxD 查找 61 BD 20 5D CC 21 62 04 4F CC 21 01 , 替换为 61 BD 20 02 02 02 02 02 02 02 02 02 .
修改ErrorTracker.send() 函数, 删除sendToURL(_loc_7) :
用HxD 查找 61 F2 05 5D CC 21 62 07 4F CC 21 01 , 替换为 61 F2 05 02 02 02 02 02 02 02 02 02 .
修改ErrorReportTracker.send() 函数, 删除sendToURL(_loc_6) :
用HxD 查找 62 05 4A 54 01 80 54 63 06 5D CC 21 62 06 4F CC 21 01 , 替换为 62 05 4A 54 01 80 54 63 06 02 02 02 02 02 02 02 02 02 .
修改 AdCommand.execute() 函数 , 把 _loc_3.delayTime = PlayerConsts.AD_TIMEOUT_TIME * 1000; 里的1000 改成0 :
用HxD 查找 D3 60 89 06 66 DA 19 25 E8 07 , 替换为 D3 60 89 06 66 DA 19 25 00 02 .
修改 PageInfo.collect() 函数 , 把 _expandStage = pageInfo["scale"] == "1"; 改成_expandStage = true :
用HxD 查找 60 FB 03 2C 91 0F 66 F0 20 2C 9B 19 AB , 替换为 26 02 02 02 02 02 02 02 02 02 02 02 02 (26 即为 true) .
[培训]内核驱动高等班男同 小说男同 小说,冲击BAT一流互联网大厂责任,每周日13:00-18:00直播讲课