前一陣子為了研究 而進行了一系列的關于視頻站點的研究。由于需要能夠獲取充足的視頻源進行測試,所以我們選取了 Youku(優(yōu)酷)一個比較大的視頻網(wǎng)站來進行測試。
其實開始研究解析絕對地址也是為了研究Youku 的自帶播放器,順便去除廣告什么的。后來我們就把Youku 的播放器用 ASV6 ( 6)“反編譯”了一下,達到了驚人的效果。
Youku的視頻采取了加密+動態(tài)的獲取方式,視頻地址需要訪問網(wǎng)站動態(tài)獲取,而結果則還需經(jīng)過解密等操作。
復制代碼 代碼如下:
$ = ''; //獲取視頻信息的地址 基地址
$ = $_GET['vid']; //從GET里面把Video Id提取
if($=='')
$ = ''; //我比較懶,測試的時 候就固定了一個
$ch = (); //開啟cURL對象
($ch, , $ . $); //獲取這個視頻的信息的地址
($ch, , 1); //要
($ch, ER, 1);
($ch, , '' . $); //給一個假的""
($ch, , $['']); //把現(xiàn)在的瀏覽器User Agent傳遞給服務器
($ch, , 0);
$ = ($ch); //執(zhí)行!!!
($ch); /*下面解析*/
(‘~”seed”\s*:\s*(\d+)\s*,~iUs',$,$seed);
(‘~\{\s*”(flv|mp4)”\s*:\s*”(.*)”\s*\}~iUs',$,$);
(‘~”key1″\s*:\s*”(.*)”\s*,~iUs',$,$key1);
(‘~”key2″\s*:\s*”(.*)”\s*,~iUs',$,$key2);
//從返回的JSON串中提取必要信息 seed, , key1, key2
class {
var $ = 0;
var $=”";
($seed){
$this-> = $seed;
}
ran(){
$this-> = (($this-> * 211)+30031)%65536;
($this-> / 65536);// 根據(jù)舊的 Seed 計算新的Seedphp 獲取視頻時長,并且返回一個Seed的比例位置 [0,1)
}
(){ //估計這個叫 “CG混”php 獲取視頻時長,反正ASV解的函數(shù)就是這個名字
$this->="";
$ = '/\:._-'; //默認字符串(最大)
$len = ($); //獲取其長度
for($i=0;$iran()*($)); //獲取字符串 Seed比例 位置的字符下標
$this->.=$[$cuch]; //把字母讀出來
$ = ($[$cuch],”,$); //刪掉這個讀出來的字母(到 0 就停)
}
}
($){
$=”";
$this->();
$expl = (‘*',$); //把 1*23*34*45*56* 這個字符串打散
for($i=0;$i$.=$this->[(int)$expl[$i]]; //獲取數(shù)字位代表的 打亂字符串字符,自此解密完成
}
$; //OK拉
}
($key1,$key2){
$key = ($key1); //兩個Key都是HEX
$key = $key ^ -; //這個原來也是個8 位HEX,后來被我用計算器算了數(shù)值,因為這樣方便PhP位運算
$key2 . ($key); //合成最終 Key
}
}//解密類,用這個很方便$new = new ((int)$seed[1]);
$ = $new->($[2]);
$key = $new->($key1[1],$key2[1]);
//把數(shù)據(jù)喂進去,計算//地址載構成
$s7 = ($,10,($));
$s5 = ($,0,8);
$s6 = ($,6,2);
//拆開$s4 = '00′;//注意這是一個 HEX 值,即00表示視頻第一個分段,01第二個 0f第十五個…依此類推$sid = time() . (10,99) . '1000′ . (30,80) . '00′;//獲取一個隨機的SID,給服務器(其實不會被檢查)
$ = ‘‘ . $sid . ‘_'. $s4 . ‘/st/' . $[1] . ‘//' . $;
echo $ . ‘?K=' . $key;
//最后把地址輸出
請注意,由于Youku 更換算法/格式上面的方法已經(jīng)不能處理所有情況,我來描述下現(xiàn)在的流程:
1.訪問[ID]
2.獲得文件,同時解析””:{“flv”:”加密地址”,”mp4″:”加密地址”,”等等等”:”加密地址”
3.按照上面的方法破解加密地址
4.獲取分段數(shù)目和K
{“mp4″:[{“no”:”0“,”size”:”″,””:”421″,”k”:”02ce“},{“no”:”1“,”size”:”″,””:”421″,”k”:”02ce“},
……
5.合成地址,不過每個分段的K都采用上面獲得的新K
前一陣子為了研究 而進行了一系列的關于視頻站點的研究。由于需要能夠獲取充足的視頻源進行測試,所以我們選...