乐视网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. BZOJ 2821: 作诗(Poetize)( 分块 )

    分块,分成N^0.5块.O(N^1.5)预处理出sm[i][j]表示前i块中j的出现次数, ans[i][j]表示第i~j块的答案. 然后就可以O(N^0.5)回答询问了.总复杂度O((N+Q)N^0 ...

  2. C/C++指针和数组的关系

    首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...

  3. jquery ajax 使用

    异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用JQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...

  4. freebsd

    #cd /usr/ports/devel/binutils && make install

  5. 【转】vs2008中leptonica-1.68安装配置

    tesseract ocr挺不好配置的,找到一篇不错的文章,分享如下:http://hi.baidu.com/ever8936/blog/item/6998e1196b1d0161dab4bd8f.h ...

  6. tomcat应用转到weblogic上时的问题

    昨天将一个tomcat环境下调试通过的报表demo应用发布到weblogic上做测试,结果发现好多问题.总结了一下,主要有这么几点: 1.使用log4j的问题. tomcat应用直接发布到weblog ...

  7. 转:alphaImageLoader滤镜加载后 链接不能点击

    我是一个很少使用IE滤镜,也是一个不赞成使用IE滤镜的前端工程师.不过今天有一个朋友给我发来了一个有关于IE6的BUG,就是在IE6中使用了AlphaPNG透明的IE滤镜之后,a链接不能够点击.具体情 ...

  8. LED板上芯片(COB)封装流程

    LED 板上芯片(Chip On Board,COB)封装流程是,首先在基底表面用导热环氧树脂(一般用掺银颗粒的环氧树脂)覆盖硅片安放点, 然后将硅片 间接安放正在基底表面,热处理至硅片牢固地固定正在 ...

  9. makinacorpus/spynner

    makinacorpus/spynner Intro Contents Intro Credits Companies Authors Contributors Dependencies Feedba ...

  10. 高可用mysql集群搭建

    对web系统来说,瓶颈大多在数据库和磁盘IO上面,而不是服务器的计算能力.对于系统伸缩性我们一般有2种解决方案,scale-up(纵向扩展)和scale-out(横向扩展).前者如扩内存,增加单机性能 ...