从Linux bash解析FB-Purity的Firefox idb(索引数据库API)object_data blob

问题描述 投票:2回答:1

[从Linux bash脚本中,我想读取由称为FB-Purity的特定Firefox附加组件存储的结构化数据。

[我已经找到一个名为.mozilla/firefox/b8eab5j0.default/storage/default/moz-extension+++37a9788c-671d-4cae-ba5c-fbdb8788499a^userContextId=4294967295/的文件夹,其中包含一个包含字符串.metadatamoz-extension://37a9788c-671d-4cae-ba5c-fbdb8788499a文件,该URL在Firefox中打开时显示了附件的详细信息,因此,我很确定此文件夹属于附件。

该文件夹包含一个idb目录,听起来像Indexed Database API,这是W3C标准apparently used since last year by Firefox,用于存储加载项数据。

idb文件夹仅包含一个空文件夹和一个SQLite文件。

不幸的是,SQLite文件没有包含很多应用程序结构化数据,但是object_data表包含95KB的blob,其中可能包含实际的结构化数据:

INSERT INTO `object_data` VALUES (1,'0pmegsjfoetupsf.742612367',NULL,NULL,
X'e08b0d0403000101c0f1ffe5a201000400ffff7b00220032003100380035003000320022003a002
2005300610074006f0072007500200055007205105861006e00690022002c00220036003100350036
[... 95KB ...]
00780022007d00000000000000');

问题:知道这个Blob的格式是什么?如何将其提取(使用命令行或任何库或Linux工具)为JSON或任何其他可读格式?

sqlite firefox-addon blob indexeddb firefox-webextensions
1个回答
0
投票

名称key(名称)和data(值)均使用Mozilla专有格式,该文档此时唯一的文档似乎就是其源代码。

键使用特殊的针对此用例的编码,其粗略描述在mozilla-central/dom/indexedDB/Key.cpp中可用–该文件还包含唯一的已知实现。它的独特卖点似乎是这样的事实:它相对紧凑,同时与所有可能的索引类型websites may throw at you兼容,并且默认情况下处于正确的二进制排序顺序。

    值使用SpiderMonkey的内部StructuredClone表示存储,当在浏览器中的进程之间移动值时也使用该表示。再次有no docs to speak of but one can read the source code,它很容易理解。但是,在将生成的二进制文件添加到数据库之前,使用Google的Snappy compression对其进行即时压缩,“其目标不是最大压缩[而是...]目标是非常高的速度和合理的压缩” –可能不是一个坏主意考虑到我们正在处理浪费的Web内容。
  • 要为扩展程序的本地存储数据找到正确的indexedDB文件,需要将扩展​​程序的静态ID解析为所谓的“内部UUID”,其值在每个浏览器配置文件实例中均不同(以基于已安装的插件进行跟踪,很难)。映射表以pref(“ extensions.webextensions.uuids”)存储在
  • prefs.js
  • 中。然后,IDB路径为
  • $ {MOZ_PROFILE} / storage / default / moz-extension +++ $ {EXT_UUID} ^ userContextId = 4294967295 / idb / 3647222921wleabcEoxlt-eengsairo.sqlite
  • 出于所有实际目的,您可以通过下载上述项目来读取任何扩展名的单个存储密钥的值。基本用法是:
$ ./moz-idb-edit --extension "${EXT_ID}" --profile "${MOZ_PROFILE}" "${STORAGE_KEY}" ${EXT_ID}是扩展名的静态ID(如果不确定,请检查其manifest.json文件或查看about:support#extensions-tbody),${MOZ_PROFILE}是Firefox配置文件目录(也在about:support中),${STORAGE_KEY}是扩展名您要查询的密钥的名称(不幸的是,尚不支持查询所有密钥)。

当前也不支持写入数据。

我将在实现更多功能时更新此答案(或在项目页面上给我一个问题!)。
© www.soinside.com 2019 - 2024. All rights reserved.