机器型号:智能机顶盒(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,仍然正常。遥控器关机,正常!