电信宽带送的 IPTV 盒子,型号 EC6108V9U,CPU 为 Hi3798M,1G 内存,8G 存储,支持 H.265 硬解码,系统为 Android 4.4.2,却只能看电视,岂不浪费?好在华为厚道,还是留了后门供 DIY。于是,经历了10余次刷机之后,终于激活成功教程成功,在此记录,与君分享。(听说还有个 CA 版的,不过我不是。)
话说 root 这个词儿,源自 Unix/Linux。因为在 Unix 的世界里,root 用户就是超级用户,是系统管理员,相当于 Windows 系统中的 Administrator,也就是一个 Unix 系统中的 “上帝”!
Android 系统是基于 Linux 的,出于安全考虑,很多系统文件、目录不允许普通用户访问。“激活成功教程”Android 的目标,就是为了能自由访问系统文件,从而实现系统优化,或自行管理 App 的安装和卸载。所谓“root”一个 Android 系统,真正的含义其实是:让任意用户获取底层 Linux 的 root 用户权限。
关于 root 的基本原理,比较完整的解释:Android root 原理,简化一点的解释:Android的Root原理。
所有的 root 方法,都不过是想尽一切办法找到某个厂家 Android 的漏洞,以便能把修改后的 su 放进系统的可执行目录,获得 root 权限。 基本步骤如下:
将可被任何用户执行的 su 可执行文件放入 /system/xbin 目录;预装 Superuser/SuperSU 之类的 root 权限管理 App(放入 /system/app 目录);将 Superuser 之类 App 的服务程序做成随 Linux 自启动的后台守护进程(比如写入 etc/init.d/)。所有的 root 工具,都不过是将这个过程自动化,以便能自动判断手机型号、根据 Linux 的不同版本选择 su,仅此而已。
其实 su 是 Unix/Linux 自带的程序,功能就是让普通用户能够临时成为 root 用户干活。但是在运行 Android 的 Linux 中,多半是被拿掉了,或者是被修改成仅供 root 用户运行的。因为 Linux 是开源的,所以就有好人用源码编译出一个带有正常功能的 su 的可执行文件,只要选对 Linux 的版本即可拿来用了。
下面列出最紧要的几个,其他目录可参阅 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 是一个开源软件,源码在此。主要功能是监听并管理 App 对 su 的调用,给用户选择是否授予 root 权限。
主要原理是将 apk 层传入的本应放在 shell 进程中执行的命令,放到 daemonsu 创建 进程 sush 中执行。 其中 Daemonsu 为开机时启动的 su 守护进程(user 为 root)。 最重要的过程是 apk、su、daemonsu、sush、superuser 之间的通信。
详见 Superuser root 原理详细分析。
root 方法有以下 2 种:
利用 ADB 模式,执行命令行脚本,分步完成。进入 Recovery 模式,用别人已经 root 完的 ROM,整个替换掉现有的系统。Recovery 模式,顾名思义,是 Android 系统提供的恢复操作系统(ROM)、清除用户数据、恢复出厂设置的模式。所谓“刷机”,就是在 Recovery 模式下,把已 root 、已修改过的系统 ROM“恢复”到盒子的存储中去,覆盖现有系统。
刷机方式的好处是简单,适合不懂(或不想懂)计算机原理的人操作。但前提是必须找到适合自己盒子的 ROM 版本。因为盒子不像手机,各省、各个运营商都对 ROM 做过定制,IPTV 的配置参数更是各不相同,刷错了就变砖了。
因此,刷机方式:
必须找到和自己盒子版本完全相同的 ROM;难以保留 IPTV 功能。不过我得保留IPTV功能,所以选择下一种方案。
华为悦盒 EC6108V9U 的 ADB 模式,天然就是带 root 权限的,这就是华为为我们开的 backdoor,不需要再费心费力去找 Linux 的漏洞了。这和一些 Android 手机不同。
判断 ADB 是否已经获到了 root 权限,只要看 shell 的提示符即可。“#”是 root 用户的专属提示符。
> adb shell $ // 普通用户权限 # // root 权限
详见华为悦盒电脑激活成功教程教程。
盒子和电脑都设置为同一段 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 能够运行的命令。下面逐条解释一下几条主要命令:
. ootadb kill-server
运行 root 目录下的 adb 程序,参数为 kill-server。作用是关闭已经在运行的 adb 进程。
set /p ip=请输入盒子的IP地址,然后按回车键:
获取用户键盘录入,赋值给变量 ip。这里务必准确输入盒子的 IP,比如 192.168.0.1。
. ootadb connect %ip%:5555
运行 root 目录下的 adb 程序,参数为 connect %ip%:5555。作用是连接 ip 指定的盒子 IP 地址,端口为 5555。ADB 默认服务端口即为 5555,因此可省略为 adb connect 192.168.0.1。
. ootadb shell mount -o remount,rw /system
运行 adb 程序,参数为 shell mount -o remount,rw /system,也即通过 ADB 在盒子上执行 mount -o remount,rw /system 命令。作用是将 /system 目录重新挂载为可读写模式,便于下面的写入操作,默认是只读的。
. ootadb push . ootsu /system/xbin/su
运行 adb 程序,参数为 push . ootsu /system/xbin/su。作用是推送本地 root 目录下的 su 文件到盒子上的 /system/xbin/ 目录下,文件名仍然为 su。既然文件名不变,其实可以简写为 adb push . ootsu /system/xbin/。
. ootadb 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 文件权限。
. ootadb push . ootShafa.apk /system/app/Shafa.apk.apk
运行 adb 程序,参数为 shell . ootShafa.apk /system/app/Shafa.apk.apk。作用是推送本地 root 目录下的 Shafa.apk 文件到盒子上的 /system/app/ 目录下,文件名为 Shafa.apk.apk,使得沙发桌面应用成为系统预装应用。
. ootadb 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。
. ootadb 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,也即禁止任何用户访问,以禁止盒子自动升级系统。
. ootadb 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 的守护(常驻内存)标志。
. ootadb shell mkdir /system/etc/init.d
运行 adb 程序,参数为 shell mkdir /system/etc/init.d,即通过 ADB 在盒子上执行 mkdir /system/etc/init.d 命令。作用是在 /system/etc/ 目录下新建 init.d 目录。该目录下的所有文件都被 Linux 视为系统启动时自动执行的脚本。
. ootadb push . ootandroid /system/framework/android.policy.jar
运行 adb 程序,将本地 root 目录下的 android 文件推送到盒子的 /system/framework 目录下,文件名变为 android.policy.jar,如有同名文件则覆盖。作用是解决按遥控首页不回桌面的问题。
. ootadb shell "> /system/checksum.img"
运行 adb 程序,将盒子 /system/ 目录下的 checksum.img 清为 0 个字节的文件。作用是去除系统被篡改的提示。盒子在启动时,会对几个关键文件进行校验,校验数据保存在 checksum.img 文件中,将其内容清为 0 就取不到校验数据了,也就不提示了。其实盒子提示被篡改也没啥关系,多点击一次确定罢了,继续用就是了。
adb pull /data/data/com.huawei.iptv.stb.stbconfig .ak
运行 adb 程序,将盒子 /data/data/ 目录下的 com.huawei.iptv.stb.stbconfig 文件复制到本地的 bak 目录下。作用是备份用户数据。
adb push .akcom.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 还是很容易的吧!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167909.html原文链接:https://javaforall.cn
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!本文分享自作者个人站点/博客:https://javaforall.cn复制如有侵权,请联系 本站 删除。