樂視網tkey算法頻繁變動,如何才能獲得她算法的源碼,以不變應萬變?
本文只用於技術交流,提醒各位尊重網站版權,請勿用於其它用途,否則後果自負!
使用軟件
關鍵swf文件
解密KLetvPlayer.swf
分析KLetvPlayer.swf
private function getURL(param1:String) : String
{
var _loc_2:* = param1 + String(metadata.vid);
if (model.config.flashvars.flashvars.hasOwnProperty("platid"))
{
_loc_2 = _loc_2 + ("&platid=" + model.config.flashvars.flashvars.platid);
}
else
{
_loc_2 = _loc_2 + "&platid=1";
}
if (model.config.flashvars.flashvars.hasOwnProperty("splatid"))
{
_loc_2 = _loc_2 + ("&splatid=" + model.config.flashvars.flashvars.splatid);
}
else
{
_loc_2 = _loc_2 + "&splatid=101";
}
_loc_2 = _loc_2 + "&format=1";
if (model.config.flashvars.flashvars.hasOwnProperty("nextvid"))
{
_loc_2 = _loc_2 + ("&nextvid=" + model.config.flashvars.flashvars.nextvid);
}
_loc_2 = _loc_2 + ("&tkey=" + timestamp.calcTimeKey());
_loc_2 = _loc_2 + ("&domain=" + encodeURIComponent(BrowserUtil.domain));
return _loc_2;
}// end function
public function calcTimeKey() : String
{
var _loc_1:* = this.lib.calcTimeKey(this.tm);
return _loc_1;
}// end function
再以"calcTimeKey"爲關鍵字,查找包括它的AS文件。很可惜,找出來的只有調用,沒有具體函數定義。那Letv將獲得tkey的方法定義在哪邊?Finally
private function ror(param1:int, param2:int) : int
{
...
}// end function
public function calcTimeKey(param1:int) : int
{
...
}// end function
C++類似代碼:
int GenerateKeyRor(int value, int key) {
int i = 0;
while (i < key) {
value = (static_cast<unsigned int>(value) >> 1) + ((value & 1) << 31);
++i;
}
return value;
}
string GenerateKey(int stime) {
int key = 773625421;
std::stringstream tkey;
int value = GenerateKeyRor(stime, key%13);
value ^= key;
value = GenerateKeyRor(value, key%17);
tkey << value;
return tkey.str();
}