Il semble y avoir plusieurs façons spécifiques de décompresser JavaScript + navigateur, mais n'y a-t-il pas un moyen de transformer les fichiers jsonlz4 en quelque chose qui unlz4
va être lu?
Il semble y avoir plusieurs façons spécifiques de décompresser JavaScript + navigateur, mais n'y a-t-il pas un moyen de transformer les fichiers jsonlz4 en quelque chose qui unlz4
va être lu?
Réponses:
J'ai pu déballer le jsonlz4 en utilisant lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
.json.mozlz4
fichiers, par exemple, comme indiqué sur github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (note à soi: souviens-toi, souviens-toi, gmake
sur FreeBSD…).
liblz4-dev
avant de le construire). L'outil d'avih, OTOH, a parfaitement fonctionné pour moi.
Enregistrez ce script dans un fichier, par exemple mozlz4
:
#!/usr/bin/env python
from sys import stdin, stdout, argv, stderr
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\0' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40\0'
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\n')
stderr.write('Examples:\n')
stderr.write('\t%s -d < infile.json.mozlz4 > outfile.json\n' % argv[0])
stderr.write('\t%s -c < infile.json > outfile.json.mozlz4\n' % argv[0])
exit(1)
import lz4
pour import lz4.block as lz4
, mais cela n'a toujours pas fonctionné. Certains octets par rapport à une erreur liée à une chaîne. OTOH, ce script a fonctionné avec la modification d'importation: gist.github.com/Tblue/62ff47bef7f894e92ed5
$ pip install lz4
.
En fait, presque tous les fichiers lz4 du profil Firefox sont des fichiers mozlz4 . Cela signifie qu'ils ont le même "en-tête de format de fichier". Sauf un fichier. Je parle du fichier webext.sc.lz4 . Il a mozJSSCLz40v001\0
un en-tête de fichier et peut-être un sc
emballage pour emballer un groupe de fichiers dans un flux d'octets.
Il y a un addon Firefox pour lire ou Compresser .mozlz4 fichiers texte mozlz4-edit
Googler suffisamment persistant pour cela se révèle beaucoup de solutions, mais la plupart d'entre elles semblent être soit (a) cassées par des modifications ultérieures des bibliothèques sous-jacentes, ou (b) inutilement complexes (au moins à mon goût personnel), les rendant maladroites à déposer dans le code existant.
Les éléments suivants semblent fonctionner au moins sur Python 2.7 et 3.6 à l'aide d'une version récente des liaisons 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\0" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
Bien sûr, cela ne tente pas de valider les entrées (ou les sorties), n'est pas destiné à être sécurisé, etc., mais si l'on veut simplement pouvoir analyser ses propres données FF, cela fait le travail de base.
Version de ligne de commande ici , qui pourrait être enregistrée dans le répertoire approprié et invoquée à partir de la ligne de commande en tant que:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>