¿Cómo decodificar / descifrar el formato .jsonlz4 propiedad de Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)

19

Estoy tratando de manejar el formato de archivo propietario de Mozilla Firefox .jsonlz4, que se usa, por ejemplo, para sessionstore-backups/recovery.jsonlz4, pero fue en vano.

¿Cómo recupero mis datos, específicamente, un texto largo que he escrito en algunas áreas de texto de una sesión bloqueada? ¡Son mis datos!

cnst
fuente
10
No llamaría al formato propietario . Por supuesto, es personalizado, no se usa en ningún lugar fuera de los proyectos de Mozilla, pero dado que todo Firefox, incluido el código de (des) compresión relevante, es gratuito y de código abierto, este formato no debería llamarse propietario. (PD: No estoy hablando de la marca, que tiene una licencia diferente.)
Ruslan
2
@Ruslan, pero de hecho es propietario, solo porque es OSS no lo hace no propietario, ya que no hay herramientas estándar para analizar el contenido de estos archivos, mientras que todos los demás archivos, incluso el formato JAR de Java, pueden fácilmente se administrará con herramientas no propietarias 100% estándar que están disponibles en puertos / paquetes de cada sistema UNIX decente. OTOH, es completamente no trivial recuperar sus propios datos de estos .jsonlz4archivos.
cnst
2
JsonLZ4 fue una mala idea.
neverMind9

Respuestas:

19

Hay pocos resultados de Google que realmente den como resultado soluciones factibles, pero, según https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , lo siguiente parece funcionar de manera más confiable:

  • en about:config, alternar la devtools.chrome.enabledconfiguración por defecto de falseun valor detrue

  • abrir Bloc de notas desde Firefox:

    • ya sea con fn+ Shift+ F4en una MacBook,
    • o Shift+ F4,
    • o a través de la barra de menú a través de HerramientasDesarrollador webBloc de notas
  • en la barra de menú dentro de Scratchpad de Firefox, cambie el Entorno de Contenido a Navegador (omitir este paso posteriormente generaría errores como Exception: ReferenceError: OS is not defineden el siguiente)

  • use código como el siguiente en el Bloc de notas de 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))
    });
    

    El parámetro final para JSON.stringifymanejar cuántos espacios se usarían en cada línea; poner 0 hace que todo se imprima en una sola línea, poner 1 divide las líneas correctamente (poner 2 crearía demasiado espacio en blanco inútil y aumentaría el tamaño del archivo para poco beneficio)

  • haz clic en el Runbotón

  • ejecutar fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifydesde la aplicación Terminal

cnst
fuente
Esto no parece funcionar en FF 72 en Linux. Se ha eliminado el bloc de notas, pero la consola ahora admite el modo multilínea. Sin embargo, la OS.File.read(...línea muestra: "ReferenceError: OS no está definido".
mivk
@mivk ese error se menciona anteriormente; ocurre debido a un entorno incorrecto; ¿No hay forma de arriesgar el medio ambiente?
cnst
No he encontrado esta configuración de "Entorno" ni nada similar en FF 72.0.1.
mivk
12

Desafortunadamente, debido a un encabezado no estándar, las herramientas estándar no funcionarán. Hay una propuesta abierta para cambiar eso. Aparentemente, el encabezado de Mozilla fue ideado antes de que existiera un formato de marco estándar lz4; sí envuelve un bloque estándar lz4.

Dicho esto, el mismo informe de error incluye algunos métodos alternativos. Los enumeraré brevemente:

  • Use la herramienta dejsonlz4 , que incluye compilaciones binarias para Windows y debería ser fácil de construir en * nix
    • lz4json es una herramienta similar, pero se basa en un liblz4 externo y es algo más fácil de construir en * nix pero más difícil en Windows (fuera de WSL)
  • Use este script Python bastante simple: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (requiere el paquete lz4 a través de pip o su administrador de paquetes): el script parece ser python3 pero es trivialmente adaptable a python2
  • Hay una extensión web disponible que debería poder abrirlos. NB: aunque la fuente está disponible, no la he verificado, y los permisos que solicita son un poco preocupantes ( especialmente la respuesta a las preocupaciones )
  • En teoría, debería poder quitar los primeros 8 bytes (por ejemplo, con dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) y eso debería dejarle un bloque válido lz4. Tenga en cuenta que esto es distinto de un marco lz4 . Si bien la mayoría de los lenguajes de programación tienen bibliotecas que pueden decodificar fácilmente un bloque, encontrar una herramienta preconstruida para hacerlo es más difícil, por ejemplo, el liblz4-toolpaquete solo acepta el formato de marco.
Beto
fuente
1
¿Por qué fue necesario LZ4 en primer lugar? LZ4 es una idea absolutamente imbécil.
neverMind9
Por cierto, aquí está el lz4json que se compila limpiamente en UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD y NetBSD: github.com/cnst/lz4json .
cnst
5

Pude extraer las URL del archivo {profile-dir} /sessionstore-backups/recovery.jsonlz4 usando la siguiente herramienta gratuita en línea diseñada expresamente para este propósito:

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

El mismo sitio ofrece una herramienta similar para descifrar archivos jsonlz4 del directorio {profile-dir} / bookmarkbackups .

MikeOnline
fuente
2
También acabo de encontrar esto, funciona a la perfección.
lowtechsun
1

En sistemas UNIX® y similares a UNIX , como Mac OS X con MacPorts, FreeBSD, OpenBSD o NetBSD con pkgsrc, la siguiente bifurcación https://github.com/cnst/lz4json de lz4json también podría usarse para compilar limpiamente cuadro, por ejemplo, en Mac OS X con 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
fuente