0x00 不甘寂寞

创维E900-S这款悦Me盒子功能还算可以,但不能接受它禁止安装第三方软件这一点。网上搜了半天,可能是比较新的机型没人关注,找不到任何方法,只好自己动手试试。

0x01 Fiddler寻路

请出小伙伴Fiddler,盒子上Wifi挂代理。在高级设置的WLAN中,在已连接的SSID上按住确认键几秒钟会出现修改网络选项,设置好代理服务器(运行Fiddler的机器)的IP和端口。

在应用市场里面安装几个软件,抓包看到一些APK下载地址。在Fiddler的AutoResponder中替换为需要安装的apk,比如电视猫。再次安装会出现下载不完整的错误提示,初步猜测对文件大小或者Hash值进行了校验。下载原始文件,修改一个字节,AutoResponder替换,发现还是同样的错误,基本判定是对文件Hash进行校验。请求的文件名包含一个32字节的16进制串,估计是MD5,但是经过计算,与文件实际MD5值并不相同。怀疑是经过加了Salt或者其他处理方式得出的最终结果,不知道算法的话无法伪造。而且Url也不是通过网络请求获取,估计是在应用市场里面内置的数据。

想劫持应用市场的路不通,只能换条路走。还是开着代理,重启盒子,逐条观察Http请求。发现了一个更新应用的请求 http://appStoreRrc.cnitv.net:8090/tv/updater2?userId=&mac=&brand=YUEME&model=E900-S&areaNo=null&osver=990104900.1008000000.10000000200&applist=[{"pkgName":"com.keylab.speech.core.yueme","version":"3.02.008"},{"pkgName":"com.keylab.speech.view.yueme","version":"3.01.008"},{"pkgName":"com.hisense.bluetooth","version":"3.01.008"}] ,返回的Json格式化之后如下:

[
{
"result": {
"code": 0,
"description": "成功获取升级信息",
"appURL": [
{
"pkgName": "com.keylab.speech.core.yueme",
"version": "3.02.008",
"isUpdate": false,
"url": ""
},
{
"fileName": "aiView_YueMe.apk",
"appName": "语音助手view",
"pkgName": "com.keylab.speech.view.yueme",
"version": "3.02.008",
"isUpdate": true,
"url": "http://RSAppStore.cnitv.net/TV_appation/ctviptv/AD/aiView_YueMe.apk",
"md5": "a5e7af5648aa6d2a6d34ffdc925857c0"
},
{
"pkgName": "com.hisense.bluetooth",
"version": "3.01.008",
"isUpdate": false,
"url": ""
}
]
}
}
]

于是打算在此做文章。同样的,在Fiddler中拦截替换该请求,保证有一个应用的isUpdate值为true,它就会自动尝试下载安装该apk。AutoResponder中替换所有*.apk请求指向本地apk文件,重启盒子。Fiddler里面看到的确下载了我替换的apk文件,再到盒子里面看一下,安装成功!!

至此,基本有比较清晰的思路了。拦截update请求,将返回的JSON中isUpdate值置为true,url替换为真正需要安装的apk的地址。url如果不是可以直接访问下载的互联网地址,而是本地apk文件的话,进一步在Fiddler中进行拦截替换。

经过测试,一般系统启动时会检查3个内置软件的版本更新情况,如果返回的JSON中应用列表数量小于3的话,则不会下载安装。如果返回数量大于3,则只下载安装前3个应用。所以这种方法盒子每次启动安装的软件数量是有限制的。

0x02 Go小程序

按照前面的方法,已经可以正常安装第三方软件了。但是,还是嫌步骤复杂了一些,尤其是要帮很多朋友大量安装的话就太麻烦。

简单用Go语言实现了一个小程序E900-S-proxy,实现代理和数据替换功能。只要把待安装的apk文件放到同一目录下,启动程序,即可在电脑上启动一个默认端口为8080的代理服务器。在盒子上设置HTTP代理指向这台电脑的IP,重启设备就可以实现自动安装,大大简化了操作过程,降低门槛。存在的局限是每次最多只能安装3个软件。

需要Windows下编译好的exe文件的朋友,请移步我在高清范发的帖子

最后,软件安装完毕后,别忘了把HTTP代理取消。

0x03 更多……

除了设置HTTP代理服务器IP端口意外,其实根据HTTP代理的本质,还可以通过DNS劫持来实现。具体而言,可以在路由器上将域名appStoreRrc.cnitv.net和PROXY都指向运行程序的电脑,当然代理端口要改为8090才行。

尝试了3款不同一键Root工具,都没能搞定这款机器。更多玩法,期待高手们分享。

在创维E900-S悦Me盒子上安装第三方软件的更多相关文章

  1. IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况

    IE8 没有内容的盒子,如果有定位,浮现在其他盒子上 可能会有点击穿透没有作用的情况

  2. JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标

    分析: 外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置.鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量 第一步:求浏览器边框位置 x=e ...

  3. 在Mac OS上安装Vagrant和Docker的教程

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/128.html?1455808640 当听到很多人在说Docker是多么多 ...

  4. GPT分区基础知识及如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  5. Ubuntu上安装QQ2015

    先不卖关子直接上图:Ubuntu 14.04.5 LTS Deb包下载地址: http://www.longene.org/download/WineQQ7.8-20151109-Longene.de ...

  6. 用树莓派做电视盒子,安装Android TV系统

    有位朋友问我,如何在树莓派上安装盒子系统,这期我就教大家如何安装Android系统,自动动手做一个机顶盒. 如何安装系统,我已经在 树莓派安装系统 这篇文章中了做介绍,有需要的请看这篇文章.安装系统需 ...

  7. 在macOS苹果电脑上安装Azure DevOps Server(TFS)代理

    1. 概述 MacOS是一套运行于苹果Macintosh系列电脑上的操作系统,是首个在商用领域成功的图形用户界面操作系统.Iphone应用软件的开发人员,都使用运行macOS的电脑或mini盒子进行软 ...

  8. 在centos7上安装Jenkins

    在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...

  9. 记录在Windows上安装和使用Oracle数据库过程中的坑

    1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件 ...

随机推荐

  1. VS2010运行正常的控制台程序在VS2015中出现乱码的解决方法

    以前在Visual Stuido 2010中运行正常的控制台程序,在Visual Studio 2015中出现乱码,找到<Visual Studio 2015的坑:中文字符串编译后成乱码> ...

  2. 浅谈URLEncoder编码算法

    一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将 ...

  3. [leetcode] Number of Islands

    Number of Islands Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. ...

  4. 高级iOS面试题

    非标准答案 2 1: 类方法是可以直接通过类名直接调用,无需进行实例化对象.类方法是以+开头2. 实例方法,需要显示实例化对象,为对象分配堆栈空间,并通过对象实例调用实例方法3. RUNTIME 是在 ...

  5. 基础学习day10--异常、包

    一.异常 1.1.异常定义 异常:--不正常,程序在运行时出现不正常情况 异常由来:其实也是现实生活中一个具体的事物,马可以通过JAVA的类的形式表现描述,并封装成类. Java对不正常情况描述后的, ...

  6. 我的android学习经历12

    自动匹配输入的内容(文章最后有一个问题有兴趣的可以解答一下,谢谢大神了) 这个主要是两个控件MultiAutoCompleteTextView和AutoCompleteTextView 这两个控件和T ...

  7. ios开发随笔第一篇-button,label按钮的一些属性的使用

    我用的是纯代码方式,喜欢用storyboard开发的其实也很爽了; 首先谈谈button,ios中新建button这个对象一般接触的都明白,UIButton *button名=[ UIButton a ...

  8. iOS之UI--通讯录的实例关键知识技术点积累

    通讯录的实例关键知识技术点积累 效果展示: 作为博文笔记,既然是笔记,目的是为了能够以后做这个项目能够快速上手,如果这是我下一次阅览这个博文笔记,那么我应该先空手从零开始做,需求也就是这个项目的展示效 ...

  9. GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记

    AFNetworking是开源代码排名第一的开源库.  GET请求的请求正文 一般都是明文显示的,携带的数据量小. POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只 ...

  10. Windows下Node.js+Express+WebSocket 安装配置

    Linux参考: Linux安装Node.js 使用Express搭建Web服务器 Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V ...