以 root 登录,提示要输入密码:Emmm…密码?从以前的 Kindle 使用经验中,我知道可以用 Kindle 的序列号生成密码。然后我找到了 这个网站,它会为一个特定的设备生成许多可能的密码:我的 Kindle root 登录密码是第三个。
为防止网站倒闭,这里是 Javascript 生成密码的关键片段:
var md5 = hex_md5(serial); document.getElementById("rootpw").innerHTML = "fiona" + md5.substring(7,11); document.getElementById("rootpw2").innerHTML = "fiona" + md5.substring(7,10); document.getElementById("rootpw3").innerHTML = "fiona" + md5.substr(13,3);对对,我忘了说我是如何拿到设备序列号的。Kindle 以非工作状态插上 USB,即,你不能将这些演示设备作为磁盘。但在这个状态的 Kindle 可用 Linux 的 dmesg 命令输出序列号(你也可以在 uboot 中使用 printenv 命令得到序列号,当它显示 “Hit any key to stop autoboot” 时按 Enter 回车键):
[128033.676587] usb 1-2: new high-speed USB device number 51 using xhci_hcd [128033.829631] usb 1-2: New USB device found, idVendor=1949, idProduct=0004, bcdDevice= 1.00 [128033.829638] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [128033.829642] usb 1-2: Product: Amazon Kindle [128033.829645] usb 1-2: Manufacturer: Amazon [128033.829648] usb 1-2: SerialNumber: XXXXXXXXXXXXXXXXCool!我们有 root 权限,可以登录了!现在来看看如何让它更方便地使用。
转储系统一般来说,第一步是将磁盘信息转到另一台计算机上进行分析。
检查 /proc/mounts,显示主磁盘 /dev/mmcblk0 上有多个分区。
运行 fdisk /dev/mmcblk0 会得到如下结果:
Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/mmcblk0p1 * 1025 12224 358400 83 Linux /dev/mmcblk0p2 12225 14272 65536 83 Linux /dev/mmcblk0p3 14273 15296 32768 83 Linux /dev/mmcblk0p4 15297 59776 1423360 b Win95 FAT32四个分区:三个 Linux 系统,一个 FAT32 系统。
第一个磁盘开始时离磁盘很远:原来内核存储在那个 “丢失的” 区域。
深入研究后发现分区 1 是正常系统,2 是一种诊断工具,3 是存储 Kindle 私密信息(例如 Wi-Fi 密码)。当你通过 USB 插入 Kindle 时,你会看到分区 4:你电子书的存储地方。
— 分区 4 挂载在 /mnt/us”`。
我用 dd 命令将磁盘和分区 1-3 转储到 /mnt/us 上(一般我中意备份一个完整的原始映像,以便在出现问题时可以恢复它):
dd if=http://www.likecs.com/dev/mmcblk0 of=http://www.likecs.com/mnt/us/kindle.img bs=32768 count=15297虽然这款 Kindle 不能在 USB 上显示为磁盘,但因为我有 root 权限能让它这样:
rmmod g_file_storage modprobe g_file_storage file=http://www.likecs.com/dev/mmcblk0p4它会出现在我的笔记本上,然后我把所有东西都复制了下来。
分析系统终于,我用以下命令在笔记本安装 kindle.img 中的分区:
kpartx -v kindle.img接着,我将 Kindle 各个分区安装到我的笔记本电脑上。我把所有分区文件放在一个文件夹中,这样我可以方便地用 grep 命令查看它们。我发现:
Kindle 用 rc.d 作为它的系统初始化系统,文件夹中有很多优雅的纯文本脚本。
Init level 5 是运行电子书软件的 “通用” 系统
电子书软件在 /opt/amazon目录,用 Java 编写(我知道要快速复习 Java 了)。
Kindle 有一堆有意思的纯文本 “diag” 脚本用来测试。
有一个相当漂亮的 wifid daemon 来管理 Wi-Fi 连接:我从 diag 脚本中找到了与它对话的方法。
用 /usr/sbin/eps 命令(文档见这里)从命令行写入数据到水墨屏。
我没找到可见的 “turn off demo mode” 开关:看样子演示模式是 Java 电子书软件的定制功能。
以下系统服务与不支持的功能或电子书软件有关,或与 Amazon 联系:S50wan S70wand S75phd S81usbnetd S93webreaderd S94browserd S95framework S96boot_finished。
对话 Wifid你可以用 Kindle 内置的 wifid 连接 Wi-Fi,并管理你的 Wi-Fi 配置文件。对啦,如果你的 Wi-Fi 连接失败,一定要记住许多 Kindle 只支持 2.4Ghz Wi-Fi