华为悦盒 EC6108V9U 破解过程全记录(root扫盲) [原创]
电信宽带送的 IPTV 盒子,型号 EC6108V9U,CPU 为 Hi3798M,1G 内存,8G 存储,支持 H.265 硬解码,系统为 Android 4.4.2,却只能看电视,岂不浪费?好在华为厚道,还是留了后门供 DIY。于是,经历了10余次刷机之后,终于破解成功,在此记录,与君分享。(听说还有个 CA 版的,不过我不是。)
快捷方式
- 进入 Recovery 模式
- 按遥控首页不回桌面
- 去除系统被篡改的提示
- 系统预装应用
- 允许盒子安装非官方市场的 App
- 禁止盒子自动升级系统
- 备份用户数据
- 恢复用户数据
- 提取出厂固件
- 恢复出厂固件
- 观看本地视频
目标
- 不破坏 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 权限。
基本步骤如下:
- 将可被任何用户执行的 su 可执行文件放入 /system/xbin 目录;
- 预装 Superuser/SuperSU 之类的 root 权限管理 App(放入 /system/app 目录);
- 将 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 之间的通信。
通信过程大概为:
- 三方进程调用su,su 通过 socket 与 daemonsu 通信,
- daemonsu 创建sush,
- sush 通过 am 启动 superuser apk ,让用户选择是否授予其root权限。
- superuser 通过 socket 告知 sush 用户选择的结果
- sush 根据 apk 传过来的结果,选择继续执行或中断执行
动手篇
root 方法有以下 2 种:
- 利用 ADB 模式,执行命令行脚本,分步完成。
- 进入 Recovery 模式,用别人已经 root 完的 ROM,整个替换掉现有的系统。
Recovery 方式(刷机)
Recovery 模式,顾名思义,是 Android 系统提供的恢复操作系统(ROM)、清除用户数据、恢复出厂设置的模式。所谓“刷机”,就是在 Recovery 模式下,把已 root 、已修改过的系统 ROM“恢复”到盒子的存储中去,覆盖现有系统。
刷机方式的好处是简单,适合不懂(或不想懂)计算机原理的人操作。但前提是必须找到适合自己盒子的 ROM 版本。因为盒子不像手机,各省、各个运营商都对 ROM 做过定制,IPTV 的配置参数更是各不相同,刷错了就变砖了。
因此,刷机方式:
- 必须找到和自己盒子版本完全相同的 ROM;
- 难以保留 IPTV 功能。
步骤如下(详见华为悦盒EC6108V9系列-海思芯片通刷固件破解教程):
- U 盘格式化为 FAT32,在根目录建个 upgrade 文件夹(有些盒子是直接放入根目录),把需要刷入的 ROM(update.zip 文件)拷入;
- 进入 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 重启
- 选择 Apply update from external storage,开刷。
- 等待完成,重启盒子。
不过我得保留IPTV功能,所以选择下一种方案。
ADB方式(执行脚本)
华为悦盒 EC6108V9U 的 ADB 模式,天然就是带 root 权限的,这就是华为为我们开的 backdoor,不需要再费心费力去找 Linux 的漏洞了。这和一些 Android 手机不同。
判断 ADB 是否已经获到了 root 权限,只要看 shell 的提示符即可。“#”是 root 用户的专属提示符。
> adb shell
$ // 普通用户权限
# // root 权限
基本步骤:
- 保证电脑和盒子的 IP 在同一个网段(子网)内。如果都是用 DHCP 获取 IP 的,默认就是同一网段。Wifi 或 有线网络均可,只是盒子优先认网线,想用 Wifi 就必须拔下网线。
- 开启盒子的“远程维护连接”,(设置--更多(或高级)--远程连接控制,设为允许),左下角会出现“DEBUG模式”。并记录本次连接的密码(每次开启都会生成新的密码,可以随时进来查看当前密码);
- 运行华为 STB 管理工具,导入同一目录下的许可证文件(*.dat);连接盒子,输入IP、连接密码;开启远程登录(ADB模式),提交。
- 运行破解脚本(*.bat),可能会有多个。
- 重启盒子。
详见华为悦盒电脑破解教程。
关于同一个 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扫盲) [原创]的更多相关文章
- 破解电视盒 运营商送的,各种型号。通用 TTL 破解电视盒,更新华为悦盒
ZTE ZXV10B860AV1.1 准备工作,准备一个优盘,里面放上当贝桌面的apk 准备ttl线,淘宝10元以内包邮. 把优盘插打盒子上,打开盒子,用ttl连接上,只连gnd tx rx ,V ...
- 在CentOS6上配置MHA过程全记录
在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...
- 在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录
在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录 时间:2017年9月20日 一.软件环境: IP:192.168.1.71 Hostname:centos73-2.sur ...
- SAP S4HANA1610/Fiori安装过程全记录
经历各种坑,从硬件到文件,终于安装成功. 有需要安装或使用S4HANA(含Fiori)的同学可以参考. 安装文件分享给大家 链接:http://pan.baidu.com/s/1mi7LfIS 密码: ...
- C#打包制作安装程序过程全记录
该文是根据网上的文章并结合自己实际打包的过程而整理的. 开发平台:VisualStudio2005中文版. 步骤如下: 1. 创建一个安装向导项目或安装部署项目 新建项目-〉其他项目类型-〉安装与部署 ...
- 【JVM】JVM优化过程全记录
请大神移步:https://segmentfault.com/a/1190000010510968?utm_source=tuicool&utm_medium=referral 今天看JVM群 ...
- 000 上传本地库到Github远程库过程全记录
20220613 Github上新创建了一个CsImage库,之后本地创建了一个对应名称的目录,并创建本地库,进行了上传操作,记录一下过程 1.Github上CsImage库创建完成 Github上创 ...
- LFS(Linux From Scratch)构建过程全记录(三):下载所需的软件包
写在前面 本文将记录构建LFS的过程中,下载软件包的全过程 准备下载的路径 注意请确保$LFS已经设置完毕 我们需要创建一个文件夹,地址为$LFS/sources,用于保存对应的源码 输入的指令如下: ...
- LFS(Linux From Scratch)构建过程全记录(二):磁盘分区
写在前面 本文将会详细记录LFS中,构建分区,构建文件系统和挂载分区的全过程 准备新硬盘 为了更加符合"从零开始构建Linux"的要求,我在虚拟机中,新建了一个磁盘 我们将会在这个 ...
随机推荐
- Git hook实现自动部署
Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用.其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 ...
- Vue.js源码——事件机制
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...
- 【基础】26个命令玩转linux,菜鸟及面试必备
1 查看目录与文件:ls #显示当前目录下所有文件的详细信息 ls -la 2 切换目录:cd #切换当前目录为/opt/test cd /opt/test 3 显示当前目录:pwd pwd 4 创建 ...
- [NOIP2001提高组]数的划分
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...
- Java经典编程题50道之二十五
一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Example25 { public static void main(Stri ...
- [工具]Microsoft To-Do,简约还是简陋?
1. 简介 微软收购奇妙清单后,由奇妙清单的原班人马打造了一个全新的待办事项应用,就叫"To-Do"(简单粗暴,好像新浪微博直接就叫"微博"的感觉).这个应该刚 ...
- Python常用数据结构之heapq模块
Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...
- Docker 入门之创建service(一)
在一个分布式应用中,我们把应用的不同层叫做"Services".比如,一个视频共享应用,它包含存储数据到数据库的服务,用户上载后后台进行的视频解码服务,前端服务等等. 然而,一个服 ...
- Windows下nexus-3.*搭建Maven私服
1.下载 从官网下载https://help.sonatype.com/display/NXRM3/Download 选择Windows archive https://download.sonaty ...
- MysqL错误之_ERROR! MySQL server PID file could not be found!
在配置Mysql主从GTID模式下,启动Mysql服务时出现报错,搜索了一番,找到了一个简单可靠的方法,直接成功.如果遇到相同问题没有解决的童鞋,那就去试一下很多其他方案,如,强制杀掉进程重启,修改其 ...