利用第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文件。