Es scheint verschiedene JavaScript + Browser-spezifische Möglichkeiten zu geben, dies zu dekomprimieren, aber gibt es keine Möglichkeit, jsonlz4-Dateien in etwas zu transformieren, unlz4
das gelesen werden kann?
Es scheint verschiedene JavaScript + Browser-spezifische Möglichkeiten zu geben, dies zu dekomprimieren, aber gibt es keine Möglichkeit, jsonlz4-Dateien in etwas zu transformieren, unlz4
das gelesen werden kann?
Antworten:
Ich konnte den jsonlz4 mit lz4json
folgendem Befehl entpacken :
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
.json.mozlz4
Dateien, z. B. wie unter github.com/andikleen/lz4json/issues/1#issuecomment-336729026 gezeigt (Hinweis für sich selbst: Denken Sie daran, denken Sie daran, gmake
unter FreeBSD ...).
liblz4-dev
vor dem Erstellen installiert ). Das Tool von avih, OTOH, hat bei mir perfekt funktioniert.
Speichern Sie dieses Skript in einer Datei, zB 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
zu import lz4.block as lz4
, aber es immer noch nicht funktioniert hat . Einige Bytes versus Zeichenfolgenfehler. OTOH dieses Skript arbeitete mit der Importänderung
$ pip install lz4
.
Eigentlich sind fast alle Firefox-Profil- LZ4- Dateien MozLZ4- Dateien. Dies bedeutet, dass sie den gleichen "Dateiformat-Header" haben. Ausgenommen eine Datei. Ich spreche über die Datei webext.sc.lz4 . Es hat einen mozJSSCLz40v001\0
Dateikopf und möglicherweise eine sc
Packung, um eine Gruppe von Dateien in einen Byte-Stream zu packen.
Es ist ein Firefox - Add - on oder Kompresse lesen .mozlz4 Textdateien mozlz4-edit
Ausreichend hartnäckiges Googeln führt dazu, dass viele Lösungen gefunden werden, aber die meisten davon scheinen entweder (a) durch spätere Änderungen an den zugrunde liegenden Bibliotheken kaputt zu sein oder (b) unnötig komplex (zumindest nach meinem persönlichen Geschmack), was sie klobig macht in vorhandenen Code ablegen.
Das Folgende scheint zumindest auf Python 2.7 und 3.6 zu funktionieren, wenn eine aktuelle Version der Python LZ4-Bindungen verwendet wird :
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
Natürlich wird nicht versucht, Eingaben (oder Ausgaben) zu validieren, es ist nicht beabsichtigt, sicher zu sein usw., aber wenn man nur seine eigenen FF-Daten analysieren möchte, wird die grundlegende Arbeit erledigt.
Befehlszeilenversion hier , die im entsprechenden Verzeichnis gespeichert und über die Befehlszeile aufgerufen werden kann als:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>