乐视网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. 10条影响CSS渲染速度的写法与建议

    1.*{} #zishu *{} 尽量避开由于不同浏览器对HTML标签的解释有差异,所以最终的网页效果在不同的浏览器中可能是不一样的,为了消除这方面的风险,设计者通常会在CSS的一个始就把所有标签的默 ...

  2. KMP算法的一次理解

    1. 引言 在一个大的字符串中对一个小的子串进行定位称为字符串的模式匹配,这应该算是字符串中最重要的一个操作之一了.KMP本身不复杂,但网上绝大部分的文章把它讲混乱了.下面,咱们从暴力匹配算法讲起,随 ...

  3. Spring+Maven配置等问题

    1. 在POM中使用 统一/指定/特定 的Spring版本号 <properties> <spring.version>4.1.6.RELEASE</spring.ver ...

  4. 八皇后问题-回溯法(MATLAB)

    原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...

  5. INDEX相关

    1.索引应该建立在WHERE子句经常用到的表列上,如果在大表上频率使用某列或者某几列作为条件执行检索操作,并且检索的行数低于总行数的15%,那么应该考虑在该几行上添加索引. 2.为了提高多表连接的性能 ...

  6. objectiveC获取本地时间。

    NSDate * date = [NSCalendarDate date]; NSLog(@"%@", date); 日历在IOS里报错,,. NSDateFormatter *f ...

  7. jQuery json数据处理

    一种是使用jQuery的ajax函数  另一种是使用getJSON函数 使用ajax函数的时候 对于返回值类型dataType 亲自指定为json格式 就无需自己手动处理格式 $.ajax({ url ...

  8. 深入剖析哪些服务是Oracle 11g必须开启的

    这篇文章主要介绍了哪些服务是Oracle 11g必须开启的以及这些服务的详细介绍,需要的朋友可以参考下   成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现 ...

  9. 24_Core Data Demo

    今天开始学习Core Data,类似于数据库,可以永久保存数据.不过当把App从iPhone删掉之后就没有了.可以用来保存App的运行数据. 参考链接:iOS Swift教程 Core Data 概述 ...

  10. 17.1.2?Replication Formats 复制格式:

    17.1.2?Replication Formats 复制格式: 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Ba ...