Як розшифрувати / розшифрувати фірмовий формат .jsonlz4 Mozilla Firefox? (sessionstore-резервне копіювання / recovery.jsonlz4)


19

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

Як я можу отримати свої дані, зокрема, довгий текст, який я набрав у деяких текстових областях розбитого сеансу? Це мої дані!


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з додатка Terminal


Схоже, це не працює в FF 72 в Linux. Scratchpad видалено, але консоль тепер підтримує багаторядковий режим. Однак OS.File.read(...рядок дає: "ReferenceError: OS не визначено".
mivk

@mivk, що помилка згадується вище - трапляється через неправильне оточення; чи немає способу навряд чи навколишнє середовище?
cnst

Я не знайшов цього параметра "Навколишнє середовище" чи іншого подібного у FF 72.0.1.
mivk

12

На жаль, через нестандартний заголовок стандартні інструменти не працюватимуть. Є відкрита пропозиція змінити це. Мабуть, заголовок Mozilla був розроблений до існування стандартного формату кадру lz4; він обертає стандартний блок lz4.

Однак, той самий звіт про помилку включає кілька альтернативних методів. Я коротко перерахую їх:

  • Використовуйте інструмент dejsonlz4 , який включає бінарні збірки для Windows, і він повинен бути простим для побудови на * nix
    • lz4json - подібний інструмент, але покладається на зовнішній liblz4 і дещо простіше будувати * nix, але складніше в Windows (за межами WSL)
  • Використовуйте цей досить простий скрипт Python: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (потрібен пакет lz4 через pip або ваш менеджер пакунків) - сценарій, здається, python3, але тривіально адаптується до python2
  • Існує доступ до веб- розширення, яке повинно мати можливість відкривати їх. Зверніть увагу: поки джерело доступне, я не перевірив його, і дозволи, які він запитує, мають певний ступінь ( особливо відповідь на занепокоєння )
  • Теоретично ви повинні мати можливість зняти перші 8 байт (наприклад, з dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1), і це повинно залишити вас дійсним блоком lz4. Зауважте, що це відрізняється від lz4 кадру . Хоча в більшості мов програмування є бібліотеки, які можуть легко розшифрувати блок, знайти складний інструмент для цього складніше, наприклад, liblz4-toolпакет приймає лише формат кадру.

1
Чому LZ4 був необхідний в першу чергу? LZ4 - абсолютно дивна ідея.
neverMind9

BTW, ось 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 .


2
Також щойно це знайшли, працює бездоганно.
lowtechsun

1

Для UNIX® та UNIX-подібних систем , таких як Mac OS X з MacPorts, FreeBSD, OpenBSD або NetBSD з pkgsrc, наступний https://github.com/cnst/lz4json fork of lz4json також може бути використаний для чистого компіляції з наприклад, на Mac OS X w / 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.