乐视网tkey算法频繁变动,怎样才干获得她算法的源代码,以不变应万变?

本文仅仅用于技术交流。提醒各位尊重站点版权,请勿用于其他用途,否则后果自负!

使用软件

Adobe Flash Builder 4.X (自己写小程序时须要)

硕思闪客精灵
JPEXS Free Flash Decompiler (官网)
注:上面两个软件使用功能类似,能够起到功能互补的作用。

关键swf文件

1. LetvPlayer.swf  (乐视视频播放器。未加密。通过硕思闪客精灵可正常打开)
2. KLetvPlayer.swf (乐视tkey及其他算法所在的swf文件,已加密,须要解密后才干通过硕思闪客精灵打开)

解密KLetvPlayer.swf

LetvPlayer.swf文件头标识为CWS。而KLetvPlayer.swf加密后文件头标识变为了ABC。
加密算法已包括在LetvPlayer.swf文件里。详细加解密的功能路径为“action”文件夹下的com.alex.encrypt包。

能够将其提取出来。通过Flash Builder写个小程序,用于解密文件头标识为ABC的swf文件。
小程序project及执行的Flash player已上传(LEVT_Decode.zip)。使用时请使用主版本号大于11,副版本号大于3的Flash player。

分析KLetvPlayer.swf

使用硕思闪客精灵打开解密后的KLetvPlayer.swf文件。在全部的AS文件里搜索keyword"api.letv.com"。

在IDTransfer文件找到关键的"api.letv.com"。并使用其拼接请求视频XML文件的URL:
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
从中能够看到获得tkey时。调用了timestamp.calcTimeKey()方法。


查看TimeStamp文件里的calcTimeKey()方法:
public function calcTimeKey() : String
{
var _loc_1:* = this.lib.calcTimeKey(this.tm);
return _loc_1;
}// end function

再以"calcTimeKey"为keyword,查找包含它的AS文件。非常可惜,找出来的仅仅有调用,没有详细函数定义。

那Letv将获得tkey的方法定义在哪边?


找啊找啊找啊,终于发现了一个可疑资源,见下图:
    
    
     
   
DefineBinaryData(7: com.letv.plugins.kernel.tools.TimeStamp_FLASCC),无论如何,调查下先。

通过JPEXS Free Flash Decompiler将其导出为swf文件,使用文本工具查看其文件头标识也是以ABC打头。

使用上面解密KLetvPlayer.swf文件的小工具对其解密,解密成功,打开......

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();
}

乐视(letv)网tkey破解的更多相关文章

  1. 体感设备:因特尔 Intel RealSense R200,乐视LeTV Pro Xtion和Orb奥比中光bec Astra比较

    最近调试三个个厂家的体感设备,第一个是Intel的RealSense R200(参数规格:分辨率:1080p,深度有效距离:0.51-4,USB3.0),第二个是乐视LeTV Pro Xtion(参数 ...

  2. 乐视(LeTV)占用8080端口

  3. 乐视手机1S正式发售,乐视商城官网抽风遭网友吐槽

    乐视手机1S正式发售,乐视商城官网抽风遭网友吐槽 10月27日,乐视召开的新品发布会上正式推出千元金属新机乐1s,售价1099元.今天11月3日上午10:00,乐1s在乐视商城.京东商城首发开卖,现货 ...

  4. 【全网免费VIP观看】哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新

    哔哩哔哩番剧解锁大会员-集合了优酷-爱奇艺-腾讯-芒果-乐视-ab站等全网vip视频免费破解去广告-高清普清电视观看-持续更新 前言 突然想看电视,结果 没有VIP 又不想花钱,这免费的不久来啦. 示 ...

  5. ZEALER背后的乐视云视频

    ZEALER是我非常喜欢的一个测评网站,经常访问看看手机.电动牙刷及机械键盘的测试视频,非常欣赏王自如的数据化测评理念.敬畏之心,以及不祛痘的视频. 刚好最近对网络视频应用比较感兴趣,觉得ZEALER ...

  6. 乐视云计算基于OpenStack的IaaS实践

    本文作者岳龙广,现在就职于乐视云计算有限公司,负责IaaS部门的工作. 从开始工作就混在开源世界里,在虚拟化方面做过CloudStack/Ovirt开发,现在是做以OpenStack为基础的乐视云平台 ...

  7. AndroidTV版(乐视超3 X55)root,将自己的软件设置为开机自启、系统软件,卸载系统应用等问题总结

    最近开发android软件客户要安装在乐视TV上,而且要求是开机自启.我很天真的以为写一个广播接收类接收开机广播就可以了,可是根本不会,有的设备就是不可以接收到开机广播,于是各种百度搜索.大神们说是只 ...

  8. php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视

    原文地址:http://www.lianyue.org/2013/2497/ <?php /** * 解析 视频信息 类 * * 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视 ** ...

  9. 目前已经知道的乐视所有产品各个型号的强刷方法!更新X50

    http://ui.letv.com/thread-43668-1-1.html 很多网友买来电视/盒子仅仅要看,还要折腾这个电视,有时候不小心把系统折腾死了,肿么办?危难之中显身手,我的神帖来了,敬 ...

随机推荐

  1. IronJs 无相关源?

    在工作中用到了IronJs  一切正常 就是 在启动项目的时候 报错说无相关源,将取消引用之后 就可以正常运行 如果不取消引用需要重新启动~ 是这个样子滴~ 说明: 在编译向该请求提供服务所需资源的过 ...

  2. .Net Web开发中实现剪切板功能

    我要实现的功能是:在列表页,通过一个按钮复制对应的文章Url,如下图: 如下代码:     <a class="btn btn-success copy" href=&quo ...

  3. Python TypeError: not enough arguments for format string

    今天使用mysqldb执行query语句的时候,在执行这条语句的时候: select PROJ, DATE_FORMAT(MAX(DATE),'%Y-%m-%') AS MAXDATE, DATE_F ...

  4. Problem B The Blocks Problem(vector的使用)

    题目链接:Problem B 题意:有n块木块,编号为0~n-1,要求模拟以下4种操作(下面的a和b都是木块编号) 1. move a onto b: 把a和b上方的木块全部归位,然后把a摞在b上面. ...

  5. Mac搭建Java开发环境

    参考博文: http://shupeng.org/2012/10/14/config-java-env-on-mac/ http://hdu104.com/23 注意事项: (Mac OS X - M ...

  6. IMP-00008: unrecognized statement in the export file: string的问题分析

    分类: Linux 上周需要将oracle10g中的某一个用户下的对象导入到oracle11g中去.用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件 ...

  7. 帝国cms7.0调用出栏目下的东西

    打开帝国后台,新建一个栏目,简历一个封面模板为 abc,套用一个封面栏目. [e:loop={"select * from {$dbtbpre}enewsclass where classi ...

  8. MultiView空间例子

    CSS代码: body { font-size:11pt; font-family:宋体; } .mainTitle { font-size:11pt; font-weight:bold; font- ...

  9. 数据结构之后缀数组suffix array

    在字符串处理当中,后缀树和后缀数组都是非常有力的工具,其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料.其实后缀是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多 ...

  10. WEB和APP谁是互联网未来

    据中国多家权威报告显示,作为多年专业化互联网公司炎帝网络科技综合评估预测,预计2016年全球互联网设备将达到100亿部.如果届时全球人口达到73亿,意味着平均每人将有1.4部设备.智能交通将增长50倍 ...