折腾第10代Kindle(一)

笔者在几年前购入一个Kindle(第10代)。购买Kindle为的是方便读小说,它很好 地满足了我阅读需求,而我也很好地抽出时间来读书。直到我的环境状况允许我接 触到大量实体书籍,这台Kindle大部分时间就被闲置在抽屉中。直到有一天想到, Kindle的这个墨水屏还是蛮大的,就这样放着不用感觉有些浪费了。于是决定抽空 把它拿出来折腾一下,顺便把过程记录一下。

在前年就有上网查询Kindle能怎么折腾。一番资料搜索后,发现Kindle的系统封闭 程度非常高,想折腾起来有些许难度。当时在 mobileread论坛上有读到有关 Kindle设备越狱的帖子,但是在确认后发现我的Kindle设备系统版本太新,暂时还 没有针对该软件版本的越狱手段,所以我把Kindle飞行模式打开以避免版本自动更 新后就再次将其放入抽屉中。

在近期上网冲浪时发现KindleModding 已经发布了能够对我所拥有的Kindle的系统进行越狱的手段,相关信息存在该组织 的wiki服务器。我的Kindle前8位序列号为 ‘G090 VB06’,在KindleModding Wiki的’Find My Jailbreak’中查到信息为:

Kindle Name	Kindle (10th Generation)
Released	2019
Kindle Nickname(s)	KT4
Recommended Jailbreak:
WinterBreak2 < 5.16.4
WinterBreak < 5.18.1
AdBreak 5.18.1
SpringBreak 5.18.1.1.1

我的Kindle版本为: Kindle 5.16.9 因此WinterBreak是我目前的可选手段。

因为笔者对越狱手段的原理感兴趣,所以决定花上些时间研究一下。根据 WinterBreak Wiki页面 描述,Winterbreak由Hackerdude发布。在 Hackerdude的博客中能找到 Winterbreak的原理描述

在这之前,先按照 该页面 所描述的那样,因为在jailbreak过程中会需要打开WiFi功能,因而可能触发 Kindle的系统自动更新,而我们能通过填充Kindle的存储以避免自动更新。

根据描述,Kindle会对商店页面的HTML文件进行缓存,而缓存的HTML文件就会储存 在一个叫.active_content_sandbox的文件夹内。在Hackerdude那里HTML被 存为:

.active_content_sandbox/store/resource/cachedResources/index.html

而如果把它替换成自己准备的HTML文件的话,再加以利用Kindle的飞行模式就能在 打开Kindle商店的时候使Kindle加载我们准备的这份伪装成缓存文件的HTML文件了。

但是在我的Kindle上,能看到的是一个sqlite3文件:

.active_content_sandbox/store/resource/LocalStorage/https_www.amazon.com_0.localstorage
$ file https_www.amazon.com_0.localstorage
https_www.amazon.com_0.localstorage: SQLite 3.x database ...

用命令行工具sqlite3读取一下里面有什么信息,会发现里面有一个叫 ‘ItemTable’的表格,读一下这个表格就能看到很多信息:

sqlite> .tables
ItemTable
sqlite> SELECT * FROM ItemTable;

输出是一组键值对,比较吸引我关注的是这对:

key:
*cache*_{"url":"/kindle-dbs/storefront.html?deviceType=juno&isUpdatedStore=1","params":{"locale":"en_US"}}

value:
{"data":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<html lang=\"en\">\n<head> \
\n    <!-- Enable flush CSS only when sail enabled -->\n    \n \
<style>\n        \n            \n            \n \
.scroll-to-top-button{font-family:dialog;width:100%;height:2rem; \
text-align:center;border-style:solid \
...

感觉跟Hackerdude所提及的index.html是相同的东西,验证的办法则是将 value改成我们自己准备的HTML文件内容,然后确认它能否被Kindle商店加载。

具体步骤跟启动Mesquito类似: 打开Kindle飞行模式,通过USB接口将.active_content_sandbox文件夹下的 https_www.amazon.com_0.localstorage中的HTML缓存内容进行修改:

对sqlite3文件运行以下指令来插入我们准备的HTML内容:

sqlite> UPDATE ItemTable
   ...> SET value='{"data":"<html> <body> Sherlock Holmes </body> </html>","requestId":null}'
   ...> WHERE key='*cache*_{"url":"/kindle-dbs/storefront.html?deviceType=juno&isUpdatedStore=1","params":{"locale":"en_US"}}';

文件修改好并且正确弹出和拔除USB接口后,长按Kindle底部按键然后在弹窗中选 择重启。启动后打开Kindle商店,同意关闭飞行模式的弹窗,然后就能看到我们准 备的HTML内容了,而非Kindle商店的页面。

能够运行我们自己准备的HTML内容很重要。Winterbreak是基于 Mesquito的,而运行Mesquito需 要Kindle能够加载Mesquito的HTML文件。

Copyright © 2026 Zhaoming Luo. The content is CC-BY-SA.