11

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

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

3 ответа3

10

Есть немного результатов 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 измените Environment с Content на Browser (пропуск этого шага впоследствии приведет к ошибкам, таким как 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 из приложения терминала

6

К сожалению, из-за нестандартного заголовка стандартные инструменты не будут работать. Есть открытое предложение изменить это. Очевидно, заголовок 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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .