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
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?
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
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'mozLz40mozlz4 -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'mozLz40mozlz4 -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% 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 mozJSSCLz40v001
cabeçalho de arquivo e talvez algum %code% de empacotamento para agrupar um grupo de arquivos em um fluxo de bytes. sc
Existe um addon do Firefox para ler ou comprimir arquivos de texto .mozlz4 mozlz4-edit
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"mozLz40chmod +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"mozLz40chmod +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
Tags firefox compression lz4