http://blog.sina.com.cn/s/blog_6441e0640100fxhk.html
按:本文译自<Hacking the Kindle part 3: root shell and runtime system>,可惜原站点已经无法访问,只能从Google的网页快照来翻译。
Root Shell
在我下载并解开根文件系统的镜像后,我很快地执行了John the Ripper来破解/etc/shadow文件,很快破出root的口令为"fiona"(也放这是kindle编码者的名字吧)。不过我在控制台上键入这个口令后,发现不能登录。在启动内核时加上 "init=/bin/sh" 或 "single"参数也不行。于是我开始更新固件,几次后,终于通过执行一个脚本,mount了根文件率统的可读写部分,并且导出了它的/etc/shadow 文件,果然有另外一个口令的散列加密。显然,从出厂到到期最终用户的某个过程中口令被更改了。我很快用一个脚步本把shadow文件改回了原始的那个。
你可以用下面的ZIP更新文件完成这个工作。
kindle_update_maker-0.1.zip
更换了shadow文件后,我能够登录进去。执行某个命令的结果如下:
[root@kindle root]#ls -la /
drwxr-xr-x 2 root root 592 Oct 30 2007 bin
drwxr-xr-x 1 root root 0 Jan 1 00:00 dev
lrwxrwxrwx 1 root root 7 Oct 30 2007 etc -> opt/etc
drwxr-xr-x 2 root root 3 Oct 30 2007 home
drwxr-xr-x 2 root root 3 Oct 30 2007 initrd
drwxr-xr-x 2 root root 586 Oct 30 2007 lib
lrwxrwxrwx 1 root root 11 Oct 30 2007 linuxrc -> bin/busybox
drwxr-xr-x 5 root root 34 Oct 30 2007 mnt
drwxr-xr-x 10 root root 1024 Nov 5 2007 opt
dr-xr-xr-x 101 root root 0 Jan 1 15:42 proc
drwxr-xr-x 2 root root 506 Oct 30 2007 sbin
drwxr-xr-x 10 root root 0 Jan 1 15:42 sys
drwxrwxrwx 5 root root 0 Jan 1 15:44 tmp
drwxr-xr-x 10 root root 95 Oct 30 2007 usr
drwxr-xr-x 2 root root 55 Oct 30 2007 var
[root@kindle root]# mount
devfs on /dev type devfs (rw)
/dev/bml0/6 on / type squashfs (ro)
/dev/stl0/8 on /opt type ext3 (rw,sync,noatime,nodiratime)
/proc on /proc type proc (rw,nodiratime)
sysfs on /sys type sysfs (rw)
devfs on /dev type devfs (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
devpts on /dev/pts type devpts (rw)
tmpfs on /tmp type tmpfs (rw)
/dev/bml0/7 on /mnt/dc type squashfs (ro)
[root@kindle root]# ps -A f
PID TTY STAT TIME COMMAND
1 ? S 0:01 [swapper]
2 ? SN 0:00 [ksoftirqd/0]
3 ? S< 0:00 [events/0]
4 ? S< 0:00 \_ [khelper]
20 ? S< 0:10 \_ [kblockd/0]
87 ? S 0:02 \_ [pdflush]
89 ? S< 0:00 \_ [aio/0]
86 ? S 0:00 \_ [pdflush]
10 ? S 0:00 [sleepd]
33 ? S 0:00 [khubd]
88 ? S 0:00 [kswapd0]
676 ? S 0:12 [voltd]
678 ? S 0:02 [pnlcd_animate]
681 ? S 0:00 [kseriod]
710 ? S 0:00 [wantph]
709 ? S 0:00 [wanend]
721 ? S 0:00 [mmcdd]
727 ? S 0:00 [hpdetd]
740 ? Ss 0:00 init
1116 tts/2 Ss 0:00 \_ -sh
2344 tts/2 R+ 0:00 \_ ps -A f
831 ? S 0:00 [kjournald]
884 ? S 0:03 /sbin/syslogd -m 0 -b 1 -S -s 250
887 ? S 0:01 /sbin/klogd
976 ? S 0:00 [eink_fb_apt]
974 ? S 0:04 [eink_fb_udt]
975 ? S 0:00 [eink_fb_sst]
1023 ? S 0:07 [f-s-gadget]
1024 ? S 0:00 [f-s-activity]
1063 ? S 0:00 [wdtpmd]
1071 ? S 0:00 /usr/sbin/watchdogd -k 9 -t 30
1079 ? S 0:00 /usr/sbin/netwatchd -d 20 -t 5 -p www.amazon.com
1086 ? S 0:03 /usr/sbin/nomkd -v 80 -r 44 -d 23 cvm
1092 ? S 0:00 crond -l 9 -c /etc/crontab
1097 ? S 0:00 /bin/sh /usr/sbin/tphmonitor
1101 ? S 0:00 \_ /usr/sbin/tphserver -f
1119 ? S 0:00 /bin/sh /usr/sbin/execmonitor
1128 ? S 0:00 \_ /usr/sbin/execserver
1123 ? S 0:00 /bin/sh /opt/amazon/ebook/bin/run_framework
1169 ? S 0:00 \_ /bin/sh /opt/amazon/ebook/bin/start.sh
1173 ? SL 0:18 \_ /usr/java/bin/cvm -Xmx16m -Dsun.boot.library.path=/opt/usr/java/lib:/usr/java/lib -cp :/opt/amazon/ebook/lib/MobiCore-impl.jar:/opt/amazon/ebook/lib/MobipocketCoreReader.jar:/opt/amazon/ebook/lib/ReaderSDK.jar:/opt/amazon/ebook/lib/SearchSDK.jar:/opt/amazon/ebook/lib/framework-api.jar:/opt/amazon/ebook/lib/framework-impl.jar:/opt/amazon/ebook/lib/jdbm.jar:/opt/amazon/ebook/lib/json.jar:/opt/amazon/ebook/lib/kxml2.jar:/opt/amazon/ebook/lib/xyml.jar:/opt/amazon/ebook/booklet/AudiblePlayer.jar:/opt/amazon/ebook/booklet/AudioPlayer.jar:/opt/amazon/ebook/booklet/Browser.jar:/opt/amazon/ebook/booklet/ContentManager.jar:/opt/amazon/ebook/booklet/Demo.jar:/opt/amazon/ebook/booklet/Experimental.jar:/opt/amazon/ebook/booklet/Home.jar:/opt/amazon/ebook/booklet/MobiReader.jar:/opt/amazon/ebook/booklet/PictureViewer.jar:/opt/amazon/ebook/booklet/PrefBooklet.jar:/opt/amazon/ebook/booklet/Search.jar:/opt/amazon/ebook/booklet/XymlBooklet.jar:/opt/amazon/ebook/booklet/msp.jar:/opt/usr/java/lib/libjnisystem.jar -Ddebug=1 -Dcheck_comm_stack=true -Dhttp.keepalive.timeout=60000 -Dhttp.maxConnections=16 -Dallow_demo=false -Dawt_fb_enable=0 -Dextkeyboard=false -Dconfig=/opt/amazon/ebook/config/framework-unix.conf -DENABLE_SEARCH_INDEXING_THREAD=true -Dprintdebugtime=false com.amazon.ebook.framework.Main
(around 30 cvm copies skipped)
2298 ? S 0:00 [mmcqd]
正象你看到的,/opt是可写的,而/etc是指向它的。在出厂时可读写分区落在/usr/default/opt.tar.gz文件。
这里有全部文件系统的列表:list.zip.
意外收获:
图形用户界面(GUI)和主干编码是用java写的,框架是十分优秀的,可以用“booklets”扩展。
在花了一些时间用jad进行研究后,我发现了一些未见于文档的热键、特点和复活节彩蛋。罗列如下。
图片观看
我不知道amazon为什么不公开(也放是因为翻页有一点慢吧)。有几个基本的方法可以加速图片查看。
1)在kindle的U盘或者SD的根目录下建一个pictures,Kindle也检查照像机生成的"dcim"目录。
2)把你的照片当作单个的“book"放入这个目录下面的一个目录,子文件夹的名字必需和书名一样,支持的格式有jpg, png, gif。
3)在HOME界面下,键入ALT+Z,就会出现一本新的书,你可以在里面看到你的图片。
4)在本地菜单,你可切换抖动,改变合适的大小,全屏显示。
键盘的热键
一些没见于文档或者隐藏的热键,我用黑体列在下面:
全局热键
Alt-Shift-R 重启kindle
Alt-Shift-. 重启图形用户界面(GUI)
Alt-Shift-G 屏幕截图因为执行上的BUG,屏幕截图只能保存在SD卡而不能保存在主存贮区,在卡的根目录保存为一个GIF文件。
Shift-Sym 开始一个演示。
只有在java命令行设置了allow_demo=true时才有效,而且需要在SD卡上有一个特殊的演示脚本
Home菜单下
Alt-Shift-M 挖地雷游戏(Minesweeper)
Alt-Z 重新检查图片目录
Alt-T 显示时间
阅读时
Alt-B 切换到书签
Alt-T 读出时间
Alt-0 打开/关闭换灯片效果
Alt-1 打开换灯片效果(如果有效的话)
Alt-2 关闭换灯片效果
Alt-PageForward/PageBackward 切换到前/后一个标记或切换到前/后一段(一段为全文的1/20)
设置
411 显示诊断数据
511 运行一个回环调用测试
611 调用诊断数据服务c/e/s
126 Lab126 小组成员
字体列表时
J 显示/隐藏对齐选项
浏览图片时
Alt-Shift-0 设置当前的图为屏保图片
F 切换到期全屏模式
玩挖地雷游戏(Minesweeper)时
I,J,K,L 上,左,下,右
M 记时间
R 重新开始
空格键(Space) 打开一个单元
Scroll 上/下移动光标
Alt-Scroll 左/右移动光标
H 返回到Home菜单
文本输入时
Alt-Backspace 清除所有字符
Alt-H/Alt-J 移动光标
(因为某些原因,下面的键在搜索输入时无效)
Alt-6 ?
Alt-7 ,
Alt-8 :
Alt-9 "
Alt-0 '
浏览器中
在CDMA模式下好象具有定位(GPS)功能。国为我不在美国,无法进行验证,但是下面的热键在浏览器下是有效的。
Alt-1 显示在Google地图中的当前位置
Alt-2 找到附近的加气站
Alt-3 找到附近的餐馆
Alt-4
Alt-5 找到用户定义的关键词
Alt-D 把debug信息导出到日志并切换到默认的高亮条目
Alt-Z 切换区域并且显示日志内容
音频播放时
Alt-F 下一个
Alt-P 播放/停止
搜索命令
这些命令只能工作在搜索框,只能在命令行的开始输入,如果足够的话,这些命令是唯一的。
公共命令(总是有效)
@help
@web
@wiki/@wikipedia
@store
@time
半私有命令(有效但没有在@help中提及)
;dumpMessages 导出当前的debug日志到"documents"目录
;debugOn 设置日志水平(log level=2)为2并允许执行私有命令
;debugOff 设置日志水平(log level=1)为1并关闭私有命令的执行
私有命令
注: 下面的命令强列不建议终端用户使用。其中的一部分命令会损坏你的Kindle并让你失去保修资格。使用这些命令风险自负。
`help 列出私有命令
`7777 设置版本为TOPmk-xyz-77770 (将关闭OTA更新?)
`voltLog <1|0> 打开/关闭电压表的debug
`batteryLoggingDelay 设置电池的日志延时(以秒为单位)
`pppStop 关闭广域网的点对占连接
`disableIndexing
`logOpenFiles
`startIndexing
`dumpBattery
`indexStatus
`compliance
`einkAdjustments
`allocate [MB]
`log611
`reloadContentRoster
`indexForever
`downloadIndex
`consumeMemory
`terminal
`checkForUpdate
`applyUpdate
`stopIndexing
`processNowNow
`processTodo
`countUnmergedDownloadedIndexes
`dumpIndexStats
`memInfo