[audio:http://m6-9.xiami.com/6845/169138/01%202088578_93310.mp3,http://m6-9.xiami.com/6845/169138/02%202088579_93311.mp3,http://m6-9.xiami.com/6845/169138/03%202088580_93312.mp3,http://m6-9.xiami.com/6845/169138/04%202088581_93313.mp3,http://m6-9.xiami.com/6845/169138/05%202088582_93314.mp3,http://m6-9.xiami.com/6845/169138/06%202088583_93315.mp3,http://m6-9.xiami.com/6845/169138/07%202088584_93316.mp3,http://m6-9.xiami.com/6845/169138/08%202088585_93317.mp3,http://m6-9.xiami.com/6845/169138/09%202088586_93318.mp3,http://m6-9.xiami.com/6845/169138/10%202088587_93319.mp3,http://m6-9.xiami.com/6845/169138/11%202088588_93320.mp3,http://m6-9.xiami.com/6845/169138/12%202088589_93321.mp3]
上面的播放器里有12首久石让的曲子,自便。
注意:此文仅供技术研究和娱乐,请于阅读后24小内自行脑内删除并消除一切影响!此外的所有影响Jerry概不负责。
另外我真的没说过本文中的方法还适用于对付各类妄想用flash来破坏信息对等的网站,以及涉及到上传分数等等的flash游戏!
虾米很不错,虽然目前音乐分类做得很不完善,面上放的全是大杂烩,还好我误打误撞地搜索了“钢琴”,才终于找到了自己想听的音乐。
然后发现虾米的音乐下载速度极快,便动起了邪恶的念头。
哼哼,这样子我的音乐就不用放在dropbox了……
20分钟,成功得到了音乐URL。不过虾米的音乐服务器居然连验证客户端的域是否属于虾米网这种最简陋的防盗链措施都没做,我实在是很诧异。
说下几个要点:
1.第一步必然是得到播放器的源文件,HTML中播放器的FLASH控件代码是用javascript输出的,三种办法,下策手动拼装出一个flash控件,中策把代码移植一下,让它把控件代码输出出来,上策直接用chrome或firefox的审查元素功能盯着FLASH控件抠代码……结果是http://xiami.com/res/player/musicPlayer.swf,顺便也看到参数里存了播放列表,比如说这个,咦,Location是一段奇怪的字符串,看来不得不对swf反工程一下看看是怎么解码的了。
2.搞到了swf,就可以用各种各样先进的工具叮叮当当敲开它看代码了。推荐Sothink SWF Decompiler,我从高一就开始用的工具,居家杀人必备利器啊。二话不说,直接导出fla和一大堆的as脚本。fla就没什么好看了,除非你真想研究这个flash player是怎么做出来的。现在方法很简单了,没研究过action script语法也没关系,没吃过猪肉总见过猪跑嘛,一目十行地扫过去,特别留意location啊,url啊什么的有没有出现。很快在Controller.as里找到这么一段:
- function jiemi(sourceString)
- {
- var _loc9 = Number(sourceString.charAt(0));
- var _loc7 = sourceString.substring(1);
- var _loc5 = Math.floor(_loc7.length / _loc9);
- var _loc6 = _loc7.length % _loc9;
- var _loc2 = new Array();
- for (var _loc3 = 0; _loc3 < _loc6; ++_loc3)
- {
- if (_loc2[_loc3] == undefined)
- {
- _loc2[_loc3] = "";
- } // end if
- _loc2[_loc3] = _loc7.substr((_loc5 + 1) * _loc3, _loc5 + 1);
- } // end of for
- for (var _loc3 = _loc6; _loc3 < _loc9; ++_loc3)
- {
- _loc2[_loc3] = _loc7.substr(_loc5 * (_loc3 - _loc6) + (_loc5 + 1) * _loc6, _loc5);
- } // end of for
- var _loc4 = "";
- for (var _loc3 = 0; _loc3 < _loc2[0].length; ++_loc3)
- {
- for (var _loc1 = 0; _loc1 < _loc2.length; ++_loc1)
- {
- _loc4 = _loc4 + _loc2[_loc1].charAt(_loc3);
- } // end of for
- } // end of for
- _loc4 = unescape(_loc4);
- var _loc8 = "";
- for (var _loc3 = 0; _loc3 < _loc4.length; ++_loc3)
- {
- if (_loc4.charAt(_loc3) == "^")
- {
- _loc8 = _loc8 + "0";
- continue;
- } // end if
- _loc8 = _loc8 + _loc4.charAt(_loc3);
- } // end of for
- return (_loc8);
- } // End of the function
3.接下来还要说么,开个新工程,把这个函数放进去,传个Location字符串让它跑跑,
比如传进去8h29c41E81tF.o5315%t%xm%8+75p2i%2%28E%Fa2F2%_.3mmF1F59mA6i66%E3p%-.895833
出来了http://m6-9.xiami.com/6845/169138/01 2088578_93310.mp3
中间出现一个空格,莫名其妙,替换成%20就可以出动迅雷验证真伪了~
ps.再多做一步,虾币就纯属摆设了,虾米的同志们努力哪!







沙发。
还有,这个加密算法好像不是很复杂嘛。
谢谢分享~不错的经验~~
虾米还是以前内测的时候弄到一个号用了会,好久没有上了...现在还是觉得RayFile爽啊...
貌似搞它的歌还有一个方法,等一首歌全部缓冲完后直接去C:\Documents and Settings\Mao\Local Settings\Temporary Internet Files,文件就赤裸裸地躺在那里,这招N多在线试听网站都可以百试不爽...
借JERRY宝地开个经验交流会...
用我那招的话,听歌之前可以先将那个目录清空,等听完后按文件大小排个序,就可以爽了...文件的在线地址也可以显示出来的...
还有,不知道虾米等以后用的人多了的时候速度会怎么样,不知道会不会也像8BOX一样听歌是拉稀状...
一口气抢4层楼,真爽...
镭源……在我记忆里好象是介于emule和bt之间的一个东西……太久远了……
8box那玩艺我觉得从一开始的架构就有问题,技术上还不如虾米专业
虾米现在万事俱备,就缺个好的UI,话说这年头怎么UI都越做越烂了,豆瓣也是……
临时文件夹里cookie什么的太多了,清空了会很麻烦……
你这个搞来的音乐只是视听,低码率92K的