Como descompactar arquivos jsonlz4 (backups de favoritos do Firefox) usando a linha de comando?

17

Parece haver várias maneiras específicas do navegador JavaScript + de descompactar isso, mas não há alguma maneira de transformar arquivos jsonlz4 em algo que unlz4 leia?

    
por l0b0 29.11.2016 / 21:15

4 respostas

14

Consegui descompactar o jsonlz4 usando lz4json :

apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
    
por 20.01.2017 / 14:19
10

Salve este script como, por exemplo, mozlz4 :

#!/usr/bin/env python
from sys import *
import os
try:
    import lz4.block as lz4
except ImportError:
    import lz4

stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')

if argv[1:] == ['-c']:
    stdout.write(b'mozLz40
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
' + lz4.compress(stdin.read())) elif argv[1:] == ['-d']: assert stdin.read(8) == b'mozLz40
#!/usr/bin/env python
from sys import *
import os
try:
    import lz4.block as lz4
except ImportError:
    import lz4

stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')

if argv[1:] == ['-c']:
    stdout.write(b'mozLz40
mozlz4 -d <previous.jsonlz4 >previous.json
mozlz4 -c <previous.json >previous.jsonlz4
' + lz4.compress(stdin.read())) elif argv[1:] == ['-d']: assert stdin.read(8) == b'mozLz40%pre%' stdout.write(lz4.decompress(stdin.read())) else: stderr.write('Usage: %s -c|-d <infile >outfile\n' % argv[0]) stderr.write('Compress or decompress Mozilla-flavor LZ4 files.\n') exit(1)
' stdout.write(lz4.decompress(stdin.read())) else: stderr.write('Usage: %s -c|-d <infile >outfile\n' % argv[0]) stderr.write('Compress or decompress Mozilla-flavor LZ4 files.\n') exit(1)

Uso:

%pre%     
por 01.04.2018 / 21:11
5

Na verdade, quase todos os arquivos lz4 do perfil do Firefox são arquivos mozlz4 . Isso significa que eles têm o mesmo "cabeçalho de formato de arquivo". Exceto um arquivo. Eu falo sobre o arquivo webext.sc.lz4 . Ele tem mozJSSCLz40v001sc cabeçalho de arquivo e talvez algum %code% de empacotamento para agrupar um grupo de arquivos em um fluxo de bytes.

Existe um addon do Firefox para ler ou comprimir arquivos de texto .mozlz4 mozlz4-edit

    
por 24.03.2018 / 20:18
2

Pesquisas com persistência suficiente para isso resultam em muitas soluções, mas a maioria delas parece ser (a) interrompida por mudanças subseqüentes em bibliotecas subjacentes ou (b) desnecessariamente complexa (pelo menos para meu gosto pessoal), tornando -los desajeitado para cair no código existente.

O seguinte parece funcionar pelo menos no Python 2.7 e 3.6 usando uma versão recente das ligações do Python LZ4 :

def mozlz4_to_text(filepath):
    # Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file, 
    # return the uncompressed text.
    import lz4.block
    bytestream = open(filepath, "rb")
    bytestream.read(8)  # skip past the b"mozLz40
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
" header valid_bytes = bytestream.read() text = lz4.block.decompress(valid_bytes) return text

É claro que isso não tenta validar entradas (ou saídas), não se destina a ser seguro, etc., mas se alguém quiser apenas analisar seus próprios dados de FF, ele fará o trabalho básico.

Versão de linha de comando aqui , que pode ser salvo no diretório relevante e invocado na linha de comando como:

def mozlz4_to_text(filepath):
    # Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file, 
    # return the uncompressed text.
    import lz4.block
    bytestream = open(filepath, "rb")
    bytestream.read(8)  # skip past the b"mozLz40
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
" header valid_bytes = bytestream.read() text = lz4.block.decompress(valid_bytes) return text
    
por 31.01.2019 / 07:53