利用第10代Kindle内的版本为5.16.9的固件的漏洞加载自己准备的HTML文件

在前年就有上网查询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文件。