ZXV10 B760E root success

机器型号:智能机顶盒(Wi-Fi)中兴ZXV10 B760E(H)

USB-TTL

拆开B760E,pcb上有两排针脚,以x1为基准,各针脚定义如下:

(5 ) (6 )

(3 ) (4 )

(X1) (2 )

6 = GND

2 = TX

X1 = RX

usb-ttl上的gnd、rx、tx分别接pcb主板上的gnd、tx、rx

启动机顶盒

即当B760E提示“root@android:/ # ”时,发出:

adbd & 回车

也就是让adbd服务在后台运行等待连接。速度要快,不然就一闪而过。

下载好adb软件,放到C:根目录。

打开windows命令行cmd.exe,在C:根目录运行 adb connect xxx.xxx.xxx.xxx:5555

提示 connected to xxx.xxx.xxx.xxx:5555

OK

adb install xxx.apk,试装了个ES浏览器,提示SUCCESS。

下载悟空助手装上,设定PC和B760E的IP内网同网段,显示找到机顶盒的IP,OK

这里注意要确保机顶盒上adbd是正在运行的,因为悟空助手实际也是同过adb机制操作的。

现在关键是要有一个桌面launcher替换掉B760E内置的:

当贝桌面,下载apk,拖进悟空助手就自动安装了。

装好后,B760E已经在TV界面上提示了,选择当贝桌面,DONE!

有了当贝桌面,能安装新应用,怎么都好办了。

此后使用时,只要按遥控器应用键,就会出现桌面选择。

要注意的是,开始用adb install 返回消息是SUCCESS,但是盒子上找不到安装的软件。而用悟空助手安装当贝桌面就成功。

所以,悟空助手安装是必须的。关键是悟空助手安装完后立即提示并启动了当贝桌面。为什么这样,我还不清楚。

后续其它软件安装,用当贝桌面,常用的都可以装。有些小众软件,比如quicksshd,下载APK

adb push quicksshd.apk /tmp

然后在盒子上es浏览器安装就行。

root

下载supersuer3.2:

http://www.mediafire.com/download/cr209hb5e2fr910/Superuser-3.2-RC3-arm-signed.zip

http://d-h.st/kjn

1) 回到dos命令行,提取Superuser-3.2-RC3-arm-signed\system\的2个文件:app\Superuser.apk以及bin\su

adb push su /tmp

adb push Superuser.apk /tmp

2) 杀掉stbmc进程。这个应该是中兴自己搞的,启动时通过zte_init.rc加载。目的就是监控并删掉/system/bin和xbin下的su

adb shell 连接到B760E,

ps | grep stbmc 得到stbmc的PID

kill PID 杀掉stbmc对应的进程号

mv /system/bin/stbmc /system/bin/stbmc.bak

这样重启后stbmc也无法再启动。不知道是否有其他影响,暂时先改个名好了。

3)没有root,先有鸡还是先有蛋?所以指望Superuser自己装好su是不现实的。必须 adb shell

cp /tmp/su /system/bin/su

cp /tmp/su /system/xbin/su

chmod 4755 /system/bin/su

chmod 4755 /system/xbin/su

4 ) 然后,在盒子TV界面上启动ES文件浏览器,到/tmp文件夹下,启动并安装Superuser.apk

5)这样root好了,再有需要root权限的APP,Superuser会自动弹提示,点允许就可以了。

创建sshd

USB-TTL是终端直连倒不要紧,但是一个root权限的adbd开着,连密码认证都不要而且WIFI可以连接,安全风险太大了。

所以最好是开sshd,平时把adbd关掉,需要时再打开。其实就是用SSH连接机制取代adb shell

1) 下载quicksshd的APK,

adb push quicksshd.apk /tmp

2) 用es浏览器安装,并设置密码,启动sshd服务。quicksshd默认的用户名只是root,密码随便设。设置后看提示确保sshd在后台等待。

3)在PC端启动putty,设置盒子IP,选SSH,端口2222。我习惯把连接快捷方式保存为IPTV SSH。点open

4) 输入登录名root,密码。就登录到盒子了。

5)测试/system/xbin/su, TV界面上提示申请root权限,点允许。得到#提示符,ok。这样就有了可以升级root权限的ssh shell

6) ps | grep adbd 然后杀掉adbd的PID。

今后需要adb连接时,启动quicksshd,PC端putty登录,su 然后 adbd&就可以了

那么ssh登录,搜索下看看:

root@android:/system/bin # cat stbmc.bak | grep \/system\/bin\/su

/system/bin/su

@@@@@======> /system/bin/su exist, delete it.

rm -r /system/bin/su

root@android:/system/bin # cat stbmc.bak | grep \/system\/xbin\/su

/system/xbin/su

@@@@@======> /system/xbin/su exist, delete it.

rm -r /system/xbin/su

‘\’是转义符,发现stbmc中果然内置了删除su的命令。而且是明文shell命令,那这样的话,直接改掉应该可以吧?

sed ‘/^rm -r \/system\/bin\/su/ s/^rm/#m/’ stbmc.bak > stbmc.tmp

sed ‘/^rm -r \/system\/xbin\/su/ s/^rm/#m/’ stbmc.tmp > stbmc

sed命令容易出错,我是实验OK才进入实际操作的。说明一下:

1) ‘\’是转义符,’\/’实际就被解释成’/’

2) 所以sed命令前半段就是搜索包含’rm -r /system/bin/su’的行

3) ‘s/^rm/#m/’ 就是把行首的’rm’替换成’#m’, bash会认为#开始的是注释行而忽略后续

上面的sed命令实质就是把rm这行shell命令给注释掉了。

注意因为stbmc是编译的可执行文件,我怕有绝对地址引用,修改时尽量不要影响文件其它部分,包括文件大小,因此只改了行首一个#使得这行删除命令失效就够了。

完成后,测试下:

root@android:/system/bin # ls -l stb*

-rwxr-xr-x root shell 68292 2008-08-01 20:00 stbcfg

-rw-rw-rw- root root 304660 2015-04-09 23:11 stbmc

-rwxr-xr-x root shell 304660 2008-08-01 20:00 stbmc.bak

-rw-rw-rw- root root 304660 2015-04-09 23:10 stbmc.tmp

root@android:/system/bin # cat stbmc | grep \/system\/bin\/su

/system/bin/su

@@@@@======> /system/bin/su exist, delete it.

#m -r /system/bin/su

root@android:/system/bin # cat stbmc | grep \/system\/xbin\/su

/system/xbin/su

@@@@@======> /system/xbin/su exist, delete it.

#m -r /system/xbin/su

可以看到文件大小保持不变,而且stbmc原先的删除su的命令失效了。

然后恢复文件。

rm /system/bin/stbmc.tmp

chgrp shell stbmc

chmod 755 stbmc

重新启动盒子,因为stbmc又回来了,zte_init.rc启动时加载为后台进程。

但是其中的 rm su的命令已经实效了,su不会被自动删除了。

测试root,仍然正常。遥控器关机,正常!