http://blog.sina.com.cn/s/blog_6441e0640100fxhk.html

 

按:本文译自<Hacking the Kindle part 3root 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