Làm cách nào để giải mã / giải mã định dạng .jsonlz4 độc quyền của Mozilla Firefox? (sessionstore-backups / recovery.jsonlz4)


19

Tôi đang cố gắng xử lý định dạng tệp độc quyền của Mozilla Firefox .jsonlz4, được sử dụng, ví dụ sessionstore-backups/recovery.jsonlz4, nhưng không có kết quả.

Làm cách nào để tôi lấy lại dữ liệu của mình, cụ thể, một số văn bản dài tôi đã nhập vào một số văn bản của phiên bị lỗi? Đó là dữ liệu của tôi!


10
Tôi sẽ không gọi định dạng độc quyền . Được cấp, đó là tùy chỉnh, không được sử dụng ở bất kỳ đâu ngoài các dự án Mozilla, nhưng vì toàn bộ Firefox, bao gồm cả mã nén (de) có liên quan là miễn phí và mã nguồn mở, định dạng này không nên được gọi là độc quyền. (PS Tôi không nói về việc xây dựng thương hiệu, được cấp phép khác.)
Ruslan

2
@Ruslan, nhưng thực tế nó là độc quyền - chỉ vì OSS không biến nó thành độc quyền, vì không có công cụ tiêu chuẩn nào để xem xét nội dung của các tệp này, trong khi tất cả các tệp khác, ngay cả định dạng JAR của Java, có thể dễ dàng được quản lý với 100% công cụ không độc quyền tiêu chuẩn có sẵn trong các cổng / gói của mọi hệ thống UNIX phong nha. OTOH, việc lấy lại dữ liệu của chính bạn từ các .jsonlz4tệp này là hoàn toàn không tầm thường .
cnst

2
JsonLZ4 là một ý tưởng tồi.
neverMind9

Câu trả lời:


19

Có một vài kết quả Google thực sự dẫn đến các giải pháp có thể thực hiện được, nhưng, theo https://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ , những điều sau đây dường như hoạt động đáng tin cậy nhất:

  • trong about:config, chuyển đổi devtools.chrome.enabledcài đặt từ mặc định falsethành giá trị củatrue

  • mở Scratchpad từ trong Firefox:

    • hoặc có fn+ Shift+ F4trên MacBook,
    • hoặc Shift+ F4,
    • hoặc thông qua thanh menu thông qua Công cụNhà phát triển webScratchpad
  • trong thanh menu trong Scratchpad của Firefox, thay đổi Môi trường từ Nội dung sang Trình duyệt (bỏ qua bước này sau đó sẽ dẫn đến các lỗi như Exception: ReferenceError: OS is not definedở bước tiếp theo)

  • sử dụng mã như sau trong Scratchpad của 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))
    });
    

    Tham số cuối cùng để JSON.stringifyxử lý có bao nhiêu khoảng trắng sẽ được sử dụng ở mỗi dòng; Đặt 0 khiến toàn bộ nội dung được in trên một dòng, đặt 1 chia tách các dòng đúng cách (đặt 2 sẽ tạo ra quá nhiều khoảng trắng vô dụng và tăng kích thước của tệp vì lợi ích ít)

  • nhấp vào Runnút

  • chạy fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifytừ trong ứng dụng Terminal


Điều này dường như không hoạt động trong FF 72 trên Linux. Scratchpad đã bị xóa, nhưng Console hiện hỗ trợ chế độ nhiều dòng. Tuy nhiên, OS.File.read(...dòng đưa ra: "ReferenceError: OS không được xác định".
mivk

@mivk lỗi đó được đề cập ở trên - xảy ra do môi trường sai; không có cách nào để có cơ hội môi trường?
cnst

Tôi chưa tìm thấy cài đặt "Môi trường" này hoặc bất cứ điều gì tương tự trong FF 72.0.1.
mivk

12

Thật không may, do tiêu đề không chuẩn, các công cụ tiêu chuẩn sẽ không hoạt động. Có một đề xuất mở để thay đổi điều đó. Rõ ràng tiêu đề Mozilla đã được nghĩ ra trước khi tồn tại định dạng khung lz4 tiêu chuẩn; nó không bọc một khối lz4 tiêu chuẩn.

Điều đó nói rằng, báo cáo lỗi tương tự bao gồm một vài phương pháp thay thế. Tôi sẽ liệt kê ngắn gọn:

  • Sử dụng công cụ dejsonlz4 , bao gồm các bản dựng nhị phân cho Windows và sẽ dễ dàng xây dựng trên * nix
    • lz4json là một công cụ tương tự, nhưng dựa vào liblz4 bên ngoài và có phần dễ dàng hơn để xây dựng trên * nix nhưng khó hơn trên Windows (bên ngoài WSL)
  • Sử dụng tập lệnh Python khá đơn giản này: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (yêu cầu gói lz4 qua pip hoặc trình quản lý gói của bạn) - tập lệnh dường như là python3 nhưng có thể thích ứng với python2
  • Có một webextension có sẵn để có thể mở chúng. NB: trong khi nguồn có sẵn, tôi chưa xác minh nó và các quyền mà nó yêu cầu có một chút liên quan ( đặc biệt là phản hồi cho các mối quan tâm )
  • Về lý thuyết, bạn sẽ có thể loại bỏ 8 byte đầu tiên (ví dụ với dd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) và điều đó sẽ khiến bạn có khối lz4 hợp lệ. Lưu ý rằng đây là khác biệt với khung lz4 . Mặc dù hầu hết các ngôn ngữ lập trình đều có thư viện có thể dễ dàng giải mã một khối, nhưng việc tìm kiếm một công cụ dựng sẵn để làm điều đó là khó khăn hơn, ví dụ như liblz4-toolgói chỉ chấp nhận định dạng khung.

1
Tại sao LZ4 cần thiết ở vị trí đầu tiên? LZ4 là một ý tưởng hoàn toàn biến thái.
neverMind9

BTW, đây là lz4json biên dịch sạch trên UNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD và NetBSD - github.com/cnst/lz4json .
cnst

5

Tôi đã có thể trích xuất các URL từ tệp {profile-dir} /sessionstore-backups/recovery.jsonlz4 bằng công cụ trực tuyến miễn phí sau đây được thiết kế rõ ràng cho mục đích này:

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

Cùng một trang web cung cấp một công cụ tương tự để giải mã các tệp jsonlz4 từ thư mục {profile-dir} / bookmarkbackups .


2
Cũng chỉ tìm thấy điều này, hoạt động hoàn hảo.
lowTechsun

1

Trên các hệ thống UNIX® và UNIX , như Mac OS X với MacPorts, FreeBSD, OpenBSD hoặc NetBSD với pkgsrc, https://github.com/cnst/lz4json của lz4json cũng có thể được sử dụng để biên dịch sạch khỏi hộp, ví dụ, trên Mac OS X w / 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.