Как декодировать / расшифровать собственный формат Mozilla Firefox .jsonlz4? (Sessionstore-подпорка / recovery.jsonlz4)

19

Я пытаюсь разобраться в собственном формате файлов Mozilla Firefox, который .jsonlz4используется, например, для sessionstore-backups/recovery.jsonlz4, но безрезультатно.

Как мне вернуть мои данные, в частности, какой-нибудь длинный текст, который я набрал в некоторых текстовых областях сбойного сеанса? Это мои данные!

CNST
источник
10
Я бы не назвал этот формат закрытым . Конечно, это пользовательский, не используемый где-либо за пределами проектов Mozilla, но, поскольку весь Firefox, включая соответствующий (де) код сжатия, является бесплатным и открытым исходным кодом, этот формат не следует называть проприетарным. (PS Я не говорю о брендинге, который лицензируется по-разному.)
Руслан
2
@Ruslan, но на самом деле он проприетарный - только потому, что OSS не делает его непатентованным, поскольку существуют нулевые стандартные инструменты для просмотра содержимого этих файлов, тогда как все остальные файлы, даже формат JAR Java, могут легко управляться с помощью 100% стандартных непатентованных инструментов, которые доступны в портах / пакетах каждой приличной системы UNIX. ОТО, совершенно нетривиально на самом деле получить ваши собственные данные из этих .jsonlz4файлов.
CNST
2
JsonLZ4 была плохой идеей.
neverMind9

Ответы:

19

Есть немного результатов Google, которые фактически приводят к выполнимым решениям, но, согласно https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , следующее выглядит наиболее надежно:

  • в about:config, переключите devtools.chrome.enabledнастройку со значения по умолчанию falseна значениеtrue

  • откройте Scratchpad из Firefox:

    • либо с fn+ Shift+ F4на MacBook,
    • или Shift+ F4,
    • или через строку меню через СервисВеб-разработчикСкретчпад
  • в строке меню в Scratchpad Firefox измените Среду с Контента на Браузер (если пропустить этот шаг, это приведет к ошибкам, как Exception: ReferenceError: OS is not definedна следующем этапе)

  • используйте код вроде следующего в Scratchpad Firefox:

    var file = "/Users/…/sessionstore-backups/recovery.baklz4";
    //OS.File.read(file, { compression: "lz4" }).then(bytes => 
    //  OS.File.writeAtomic(file + ".uncompressed", bytes));
    
    OS.File.read(file, { compression: "lz4" }).then(bytes => {
      OS.File.writeAtomic(file + ".uncompressed.stringify",
        JSON.stringify(JSON.parse(new TextDecoder().decode(bytes)),null,1))
    });
    

    Последний параметр для JSON.stringifyобработки количества пробелов в каждой строке; установка 0 приводит к тому, что все это печатается в одну строку, а установка 1 правильно разделяет строки (установка 2 создаст слишком много бесполезных пробелов и увеличит размер файла для небольшой выгоды)

  • нажмите Runкнопку

  • запустить fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyиз приложения терминала

CNST
источник
Это не работает в FF 72 в Linux. Блокнот был удален, но консоль теперь поддерживает многострочный режим. Тем не менее, OS.File.read(...строка дает: «ReferenceError: ОС не определена».
Мивк
@mivk эта ошибка упоминается выше - происходит из-за неправильной среды; нет ли возможности подвергнуть риску окружающую среду?
CNST
Я не нашел эту настройку «Среда» или что-то подобное в FF 72.0.1.
Мивк
12

К сожалению, из-за нестандартного заголовка стандартные инструменты не будут работать. Есть открытое предложение изменить это. Очевидно, заголовок Mozilla был разработан до появления стандартного формата фрейма lz4; он оборачивает стандартный блок lz4.

Тем не менее, тот же отчет об ошибке включает в себя несколько альтернативных методов. Я кратко перечислю их:

  • Используйте инструмент dejsonlz4 , который включает в себя двоичные сборки для Windows и его легко собрать на * nix
    • lz4json - аналогичный инструмент, но он основан на внешнем liblz4 и его несколько проще собрать на * nix, но сложнее на Windows (за пределами WSL)
  • Используйте этот довольно простой скрипт Python: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (требуется пакет lz4 через pip или менеджер пакетов) - скрипт выглядит как python3, но его легко адаптировать к python2
  • Существует доступное веб-расширение, которое должно быть в состоянии открыть их. NB: хотя источник доступен, я не проверял его, и запрашиваемые им разрешения немного касаются ( особенно ответ на вопросы )
  • Теоретически, вы должны быть в состоянии удалить первые 8 байтов (например, с помощью dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1), и это должно оставить вас с действительным блоком lz4. Обратите внимание, что это отличается от кадра lz4 . В то время как большинство языков программирования имеют библиотеки, которые могут легко декодировать блок, найти готовый инструмент для этого сложнее, например, liblz4-toolпакет принимает только формат кадра.
боб
источник
1
Почему LZ4 был необходим в первую очередь? LZ4 - абсолютно дебильная идея.
neverMind9
Кстати, вот lz4json, который аккуратно компилируется в UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD и NetBSD - github.com/cnst/lz4json .
CNST
5

Мне удалось извлечь URL-адреса из файла {profile-dir} /sessionstore-backups/recovery.jsonlz4, используя следующий бесплатный онлайн-инструмент, разработанный специально для этой цели:

https://www.jeffersonscher.com/ffu/scrounger.html

На этом же сайте есть аналогичный инструмент для расшифровки файлов jsonlz4 из каталога {profile-dir} / bookmarkbackups .

MikeOnline
источник
2
Также только что нашел это, работает безупречно.
lowtechsun
1

В UNIX® и UNIX-подобных системах , таких как Mac OS X с MacPorts, FreeBSD, OpenBSD или NetBSD с pkgsrc, следующий https://github.com/cnst/lz4json форк lz4json также может быть использован для чистой компиляции из поле, например, в Mac OS X с MacPorts:

sudo port install lz4
git clone https://github.com/cnst/lz4json.git
cd lz4json
make
./lz4jsoncat ~/Library/Application\ Support/Firefox/Profiles/CHANGE\
THIS.default/sessionstore-backups/recovery.jsonlz4 \
| python -m json.tool | fgrep :textarea | more
CNST
источник