电信宽带送的 IPTV 盒子,型号 EC6108V9U,CPU 为 Hi3798M,1G 内存,8G 存储,支持 H.265 硬解码,系统为 Android 4.4.2,却只能看电视,岂不浪费?好在华为厚道,还是留了后门供 DIY。于是,经历了10余次刷机之后,终于破解成功,在此记录,与君分享。(听说还有个 CA 版的,不过我不是。)

快捷方式

目标

  • 不破坏 IPTV 功能
  • 能自由安装 App
  • 能播放外接 U 盘 / USB 硬盘上的视频文件

磨刀篇(扫盲)

关于 root

话说 root 这个词儿,源自 Unix/Linux。因为在 Unix 的世界里,root 用户就是超级用户,是系统管理员,相当于 Windows 系统中的 Administrator,也就是一个 Unix 系统中的 “上帝”!

Android 系统是基于 Linux 的,出于安全考虑,很多系统文件、目录不允许普通用户访问。“破解”Android 的目标,就是为了能自由访问系统文件,从而实现系统优化,或自行管理 App 的安装和卸载。所谓“root”一个 Android 系统,真正的含义其实是:让任意用户获取底层 Linux 的 root 用户权限。

关于 root 的基本原理,比较完整的解释:Android root 原理,简化一点的解释:Android的Root原理

root 的基本步骤

所有的 root 方法,都不过是想尽一切办法找到某个厂家 Android 的漏洞,以便能把修改后的 su 放进系统的可执行目录,获得 root 权限。

基本步骤如下:

  1. 将可被任何用户执行的 su 可执行文件放入 /system/xbin 目录;
  2. 预装 Superuser/SuperSU 之类的 root 权限管理 App(放入 /system/app 目录);
  3. 将 Superuser 之类 App 的服务程序做成随 Linux 自启动的后台守护进程(比如写入 etc/init.d/)。

所有的 root 工具,都不过是将这个过程自动化,以便能自动判断手机型号、根据 Linux 的不同版本选择 su,仅此而已。

关于 su

其实 su 是 Unix/Linux 自带的程序,功能就是让普通用户能够临时成为 root 用户干活。但是在运行 Android 的 Linux 中,多半是被拿掉了,或者是被修改成仅供 root 用户运行的。因为 Linux 是开源的,所以就有好人用源码编译出一个带有正常功能的 su 的可执行文件,只要选对 Linux 的版本即可拿来用了。

关于 Android 系统的目录结构和配置文件

下面列出最紧要的几个,其他目录可参阅 Android 的文件系统结构

  • /system/ 基本上所有的 Android 工具和应用程序都在这里。

    • /system/app/ 系统 App 存放目录,删不掉的 App 都在这里。
    • /system/bin/ 常用的可执行程序存放目录。
    • /system/etc/ 系统配置文件存放目录。
    • /system/framework/ Java平台架构核心库,存放 jar 包和 odex 优化的文件。
    • /system/lib/ 系统底层共享库,存放 .so 库文件。
    • /system/xbin/ 存放不常用的系统可执行程序,相当于 Linux 的 /sbin。
    • /system/build.prop 系统设置和变更属性文件。这是个文件,不是目录。
  • /data 存放用户软件和数据。
    • /data/app 普通 App 安装目录。

关于 Superuser

Superuser 是一个开源软件,源码在此。主要功能是监听并管理 App 对 su 的调用,给用户选择是否授予 root 权限。

主要原理是将 apk 层传入的本应放在 shell 进程中执行的命令,放到 daemonsu 创建 进程 sush 中执行。 其中 Daemonsu 为开机时启动的 su 守护进程(user 为 root)。 最重要的过程是 apk、su、daemonsu、sush、superuser 之间的通信。

通信过程大概为:

  1. 三方进程调用su,su 通过 socket 与 daemonsu 通信,
  2. daemonsu 创建sush,
  3. sush 通过 am 启动 superuser apk ,让用户选择是否授予其root权限。
  4. superuser 通过 socket 告知 sush 用户选择的结果
  5. sush 根据 apk 传过来的结果,选择继续执行或中断执行

详见 Superuser root 原理详细分析

动手篇

root 方法有以下 2 种:

  1. 利用 ADB 模式,执行命令行脚本,分步完成。
  2. 进入 Recovery 模式,用别人已经 root 完的 ROM,整个替换掉现有的系统。

Recovery 方式(刷机)

Recovery 模式,顾名思义,是 Android 系统提供的恢复操作系统(ROM)、清除用户数据、恢复出厂设置的模式。所谓“刷机”,就是在 Recovery 模式下,把已 root 、已修改过的系统 ROM“恢复”到盒子的存储中去,覆盖现有系统。

刷机方式的好处是简单,适合不懂(或不想懂)计算机原理的人操作。但前提是必须找到适合自己盒子的 ROM 版本。因为盒子不像手机,各省、各个运营商都对 ROM 做过定制,IPTV 的配置参数更是各不相同,刷错了就变砖了。

因此,刷机方式:

  • 必须找到和自己盒子版本完全相同的 ROM;
  • 难以保留 IPTV 功能。

步骤如下(详见华为悦盒EC6108V9系列-海思芯片通刷固件破解教程):

  1. U 盘格式化为 FAT32,在根目录建个 upgrade 文件夹(有些盒子是直接放入根目录),把需要刷入的 ROM(update.zip 文件)拷入;
  2. 进入 Recovery 模式。注意 2 种遥控器的进入方式不同。详见 华为悦盒怎么进入REC模式、升级、双清、恢复出厂教程

    屏幕上各个选项的含义如下(注意,各个型号的选项次序不一定相同):

    • Apply update from external storage 从外部存储中更新系统(刷机用)
    • Apply update from backup 从自带备份中更新系统(恢复出厂固件
    • Wipe dalvik-cache partition 清除 Dalvik 缓存数据
    • Wipe data/factory reset 清除系统数据 / 恢复出厂设置
    • Wipe userdata partition 清除用户数据
    • Reboot 重启
  3. 选择 Apply update from external storage,开刷。
  4. 等待完成,重启盒子。

不过我得保留IPTV功能,所以选择下一种方案。

ADB方式(执行脚本)

华为悦盒 EC6108V9U 的 ADB 模式,天然就是带 root 权限的,这就是华为为我们开的 backdoor,不需要再费心费力去找 Linux 的漏洞了。这和一些 Android 手机不同。

判断 ADB 是否已经获到了 root 权限,只要看 shell 的提示符即可。“#”是 root 用户的专属提示符。

> adb shell
$ // 普通用户权限
# // root 权限

基本步骤:

  1. 保证电脑和盒子的 IP 在同一个网段(子网)内。如果都是用 DHCP 获取 IP 的,默认就是同一网段。Wifi 或 有线网络均可,只是盒子优先认网线,想用 Wifi 就必须拔下网线。
  2. 开启盒子的“远程维护连接”,(设置--更多(或高级)--远程连接控制,设为允许),左下角会出现“DEBUG模式”。并记录本次连接的密码(每次开启都会生成新的密码,可以随时进来查看当前密码);
  3. 运行华为 STB 管理工具,导入同一目录下的许可证文件(*.dat);连接盒子,输入IP、连接密码;开启远程登录(ADB模式),提交。
  4. 运行破解脚本(*.bat),可能会有多个。
  5. 重启盒子。

详见华为悦盒电脑破解教程

关于同一个 IP 网段

盒子和电脑都设置为同一段 IP,才能从电脑上连接到盒子去。“同网段”由 IP 地址和掩码共同决定的,可参阅 IP地址的定义和含义

简单来说,就是掩码(mask)的每个字节(8 个二进制位)控制着对应 IP 字节是属于主机(Host)地址,还是属于网段地址,同一网段的掩码必定相同。IPv4 的地址由 4 个字节构成,相应的掩码也是 4 个字节。一般地,可以如下设置:

盒子 IP:192.168.0.1
盒子掩码:255.255.255.0 电脑 IP:192.168.0.2
电脑掩码:255.255.255.0

掩码为 255.255.255.0,表示 IP 地址的前 3 个字节(192.168.0.X)均为网段地址,用于识别网段,不用作识别主机。这时 IP 地址中的最后 1 个字节才是标识主机用的。各个主机必须设为不同的数字,总共有 256 (2 的 8 次方)种可能,再去掉第 1 个可用数字 0(固定用于代表本网段)和最后 1 个可用数字 255(固定表示本网段的广播地址),剩下 254 个可用数字(1-254)。也就是说,当掩码字节为 0 时,同网段最多可以接入 254 个主机。

当然,掩码可以是任意值,不一定非得是 0 或 255。这样 IP 拆分为网段和主机部分就得用二进制计算了,有专门的网站提供了方便,比如网络和IP地址计算器

详细解析破解脚本

一般会有一个或多个 .bat 文件供运行。.bat 文件是普通的文本文件,只是后缀改成 .bat 而已,用记事本打开就行了,里面都是 windows/DOS 能够运行的命令。下面逐条解释一下几条主要命令:

.\root\adb kill-server

运行 root 目录下的 adb 程序,参数为 kill-server。作用是关闭已经在运行的 adb 进程。

set /p ip=请输入盒子的IP地址,然后按回车键:

获取用户键盘录入,赋值给变量 ip。这里务必准确输入盒子的 IP,比如 192.168.0.1。

.\root\adb connect %ip%:5555

运行 root 目录下的 adb 程序,参数为 connect %ip%:5555。作用是连接 ip 指定的盒子 IP 地址,端口为 5555。ADB 默认服务端口即为 5555,因此可省略为 adb connect 192.168.0.1。

 .\root\adb shell mount -o remount,rw /system

运行 adb 程序,参数为 shell mount -o remount,rw /system,也即通过 ADB 在盒子上执行 mount -o remount,rw /system 命令。作用是将 /system 目录重新挂载为可读写模式,便于下面的写入操作,默认是只读的。

.\root\adb push .\root\su /system/xbin/su

运行 adb 程序,参数为 push .\root\su /system/xbin/su。作用是推送本地 root 目录下的 su 文件到盒子上的 /system/xbin/ 目录下,文件名仍然为 su。既然文件名不变,其实可以简写为 adb push .\root\su /system/xbin/。

.\root\adb shell "chmod 06755 /system/xbin/su"

运行 adb 程序,参数为 shell "chmod 06755 /system/xbin/su",即通过 ADB 在盒子上执行 chmod 06755 /system/xbin/su 命令。作用是将 /system/xbin/ 目录下的 su 文件的访问权限修改为 06755,也就是允许任意用户执行 su,详见 UNIX 文件权限

.\root\adb push .\root\Shafa.apk /system/app/Shafa.apk.apk

运行 adb 程序,参数为 shell .\root\Shafa.apk /system/app/Shafa.apk.apk。作用是推送本地 root 目录下的 Shafa.apk 文件到盒子上的 /system/app/ 目录下,文件名为 Shafa.apk.apk,使得沙发桌面应用成为系统预装应用

.\root\adb shell "settings put secure install_non_market_apps 1"

运行 adb 程序,参数为 shell "settings put secure install_non_market_apps 1",即通过 ADB 在盒子上执行 settings put secure install_non_market_apps 1 命令。作用是允许盒子安装非官方市场的 App

.\root\adb shell "chmod 0000 /system/app/UpgradeOnline.apk"

运行 adb 程序,参数为 shell "chmod 0000 /system/app/UpgradeOnline.apk",即通过 ADB 在盒子上执行 chmod 0000 /system/app/UpgradeOnline.apk 命令。作用是将 /system/app/ 目录下的 UpgradeOnline.apk 文件访问权限该为 0000,也即禁止任何用户访问,以禁止盒子自动升级系统

.\root\adb shell "echo 1 > /system/etc/.installed_su_daemon"

运行 adb 程序,参数为 shell "echo 1 > /system/etc/.installed_su_daemon",即通过 ADB 在盒子上执行 echo 1 > /system/etc/.installed_su_daemon 命令。作用是在 /system/etc/ 目录下生成 .installed_su_daemon 文件(如果已存在则覆盖),文件内容为一个字符“1”,启用 su 的守护(常驻内存)标志。

.\root\adb shell mkdir /system/etc/init.d

运行 adb 程序,参数为 shell mkdir /system/etc/init.d,即通过 ADB 在盒子上执行 mkdir /system/etc/init.d 命令。作用是在 /system/etc/ 目录下新建 init.d 目录。该目录下的所有文件都被 Linux 视为系统启动时自动执行的脚本。

.\root\adb push .\root\android /system/framework/android.policy.jar

运行 adb 程序,将本地 root 目录下的 android 文件推送到盒子的 /system/framework 目录下,文件名变为 android.policy.jar,如有同名文件则覆盖。作用是解决按遥控首页不回桌面的问题。

.\root\adb shell "> /system/checksum.img"

运行 adb 程序,将盒子 /system/ 目录下的 checksum.img 清为 0 个字节的文件。作用是去除系统被篡改的提示。盒子在启动时,会对几个关键文件进行校验,校验数据保存在 checksum.img 文件中,将其内容清为 0 就取不到校验数据了,也就不提示了。其实盒子提示被篡改也没啥关系,多点击一次确定罢了,继续用就是了。

adb pull /data/data/com.huawei.iptv.stb.stbconfig .\bak

运行 adb 程序,将盒子 /data/data/ 目录下的 com.huawei.iptv.stb.stbconfig 文件复制到本地的 bak 目录下。作用是备份用户数据

adb push .\bak\com.huawei.iptv.stb.stbconfig /data/data/

运行 adb 程序,将本地 bak 目录下的 com.huawei.iptv.stb.stbconfig 文件复制到盒子的 /data/data/ 下。作用是恢复用户数据

提取出厂固件

出厂时的固件,可以通过 Recovery 模式的 Apply update from backup 菜单进行恢复。出厂固件位于盒子存储的特定分区中,一般不会被覆盖,所以提取出来主要是为了修改里面的内容,比如制作已经 root 的 ROM。完整的命令如下(前面 2条是连接盒子和修改 /system 为读写模式):

adb connect 192.168.0.1
adb shell mount -o remount,rw /system
adb shell mkdir /tmp/bak
adb shell mount -t ext3 /dev/block/platform/hi_mci.1/by-name/backup /tmp/bak
adb pull /tmp/bak/update.zip ./update.zip

下面逐条解释一下这几条命令:

adb connect 192.168.0.1

运行 adb 程序,参数为 connect 192.168.0.1。作用是连接 192.168.0.1(盒子 IP 地址),端口用默认的(5555)。如接着前面的操作,则无需再执行了。

adb shell mount -o remount,rw /system

同上所述,将 /system 目录重新挂载为可读写模式。如接着前面的操作,则无需再执行了。

adb shell mkdir /tmp/bak

运行 adb 程序,在盒子上执行 mkdir /tmp/bak 命令。作用是在盒子的 /tmp/ 目录下新建一个名为 bak 的目录,用于挂载备份文件所在的分区。Unix 系统下要访问设备(存储设备分区也被视为一种设备),得先挂到某个目录下面,以便像访问文件一样访问设备。

adb shell mount -t ext3 /dev/block/platform/hi_mci.1/by-name/backup /tmp/bak

运行 adb 程序,在盒子上执行 mount -t ext3 /dev/block/platform/hi_mci.1/by-name/backup /tmp/bak 命令。作用是将 /dev/block/platform/hi_mci.1/by-name/backup 设备挂载为 /tmp/bak 目录,存储格式是 ext3。

adb pull /tmp/bak/update.zip

运行 adb 程序,从盒子的 /tmp/bak/ 目录下拉取 update.zip 文件,保存到当前目录下。这个就是盒子自带的 ROM 备份。

在拉取文件之前,还可以用以下命令查看一下挂载成功的分区(即 /tmp/bak 目录),我是看到里面只有一个 update.zip 文件的。

adb shell ls -l /tmp/bak

运行 adb 程序,列出盒子 /tmp/bak/ 目录下的文件。关于 ls 命令的详细信息,可参考 ls命令详解

观看本地视频

要不怎么说华为厚道呢,内置的媒体中心 App 天然就能播放本地视频,根本不需要安装什么暴风影音之类的!进入第三方桌面,就能打开媒体中心看视频了,简单吧。

结束语

在此感谢沙发网和当贝网,在里面学习了很多知识。智能电视/盒子已经是电脑、手机之外的第三大阵地了,门户之争,山雨欲来。

“天下武功,唯快不破”。只要抓住 root 的本质,略懂一点 Android 和 Linux,root 还是很容易的吧!

华为悦盒 EC6108V9U 破解过程全记录(root扫盲) [原创]的更多相关文章

  1. 破解电视盒 运营商送的,各种型号。通用 TTL 破解电视盒,更新华为悦盒

    ZTE   ZXV10B860AV1.1 准备工作,准备一个优盘,里面放上当贝桌面的apk 准备ttl线,淘宝10元以内包邮. 把优盘插打盒子上,打开盒子,用ttl连接上,只连gnd tx rx ,V ...

  2. 在CentOS6上配置MHA过程全记录

    在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...

  3. 在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录

    在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录 时间:2017年9月20日 一.软件环境: IP:192.168.1.71 Hostname:centos73-2.sur ...

  4. SAP S4HANA1610/Fiori安装过程全记录

    经历各种坑,从硬件到文件,终于安装成功. 有需要安装或使用S4HANA(含Fiori)的同学可以参考. 安装文件分享给大家 链接:http://pan.baidu.com/s/1mi7LfIS 密码: ...

  5. C#打包制作安装程序过程全记录

    该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署 ...

  6. 【JVM】JVM优化过程全记录

    请大神移步:https://segmentfault.com/a/1190000010510968?utm_source=tuicool&utm_medium=referral 今天看JVM群 ...

  7. 000 上传本地库到Github远程库过程全记录

    20220613 Github上新创建了一个CsImage库,之后本地创建了一个对应名称的目录,并创建本地库,进行了上传操作,记录一下过程 1.Github上CsImage库创建完成 Github上创 ...

  8. LFS(Linux From Scratch)构建过程全记录(三):下载所需的软件包

    写在前面 本文将记录构建LFS的过程中,下载软件包的全过程 准备下载的路径 注意请确保$LFS已经设置完毕 我们需要创建一个文件夹,地址为$LFS/sources,用于保存对应的源码 输入的指令如下: ...

  9. LFS(Linux From Scratch)构建过程全记录(二):磁盘分区

    写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...

随机推荐

  1. Git hook实现自动部署

    Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用.其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 ...

  2. Vue.js源码——事件机制

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...

  3. 【基础】26个命令玩转linux,菜鸟及面试必备

    1 查看目录与文件:ls #显示当前目录下所有文件的详细信息 ls -la 2 切换目录:cd #切换当前目录为/opt/test cd /opt/test 3 显示当前目录:pwd pwd 4 创建 ...

  4. [NOIP2001提高组]数的划分

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...

  5. Java经典编程题50道之二十五

    一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Example25 {    public static void main(Stri ...

  6. [工具]Microsoft To-Do,简约还是简陋?

    1. 简介 微软收购奇妙清单后,由奇妙清单的原班人马打造了一个全新的待办事项应用,就叫"To-Do"(简单粗暴,好像新浪微博直接就叫"微博"的感觉).这个应该刚 ...

  7. Python常用数据结构之heapq模块

    Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...

  8. Docker 入门之创建service(一)

    在一个分布式应用中,我们把应用的不同层叫做"Services".比如,一个视频共享应用,它包含存储数据到数据库的服务,用户上载后后台进行的视频解码服务,前端服务等等. 然而,一个服 ...

  9. Windows下nexus-3.*搭建Maven私服

    1.下载 从官网下载https://help.sonatype.com/display/NXRM3/Download 选择Windows archive https://download.sonaty ...

  10. MysqL错误之_ERROR! MySQL server PID file could not be found!

    在配置Mysql主从GTID模式下,启动Mysql服务时出现报错,搜索了一番,找到了一个简单可靠的方法,直接成功.如果遇到相同问题没有解决的童鞋,那就去试一下很多其他方案,如,强制杀掉进程重启,修改其 ...