วิธีการถอดรหัส / ถอดรหัสรูปแบบ. jsonlz4 Mozilla Firefox ที่เป็นกรรมสิทธิ์? (sessionstore-สำรองข้อมูล / recovery.jsonlz4)


19

ฉันกำลังพยายามจะจัดการกับรูปแบบไฟล์ที่เป็นกรรมสิทธิ์ของ Mozilla Firefox ที่.jsonlz4ใช้ยกตัวอย่างเช่นสำหรับsessionstore-backups/recovery.jsonlz4แต่ไม่มีประโยชน์

ฉันจะรับข้อมูลของฉันกลับมาได้อย่างไรโดยเฉพาะข้อความยาว ๆ ที่ฉันพิมพ์ใน textareas ของเซสชั่นที่ล้มเหลว มันเป็นข้อมูลของฉัน!


10
ฉันจะไม่เรียกรูปแบบที่เป็นกรรมสิทธิ์ ได้รับมันเป็นเรื่องที่กำหนดเองไม่ได้ใช้ที่ใดก็ได้นอกโครงการ Mozilla แต่เนื่องจาก Firefox ทั้งหมดรวมถึงรหัสการบีบอัดที่เกี่ยวข้องนั้นฟรีและโอเพ่นซอร์สรูปแบบนี้จึงไม่ควรเรียกว่าเป็นกรรมสิทธิ์ (PS ฉันไม่ได้พูดถึงตราสินค้าซึ่งได้รับใบอนุญาตแตกต่างกันไป)
Ruslan

2
@Ruslan แต่ในความเป็นจริงแล้วกรรมสิทธิ์ - เพียงเพราะ OSS ไม่ได้ทำให้ไม่มีกรรมสิทธิ์เนื่องจากไม่มีเครื่องมือมาตรฐานที่จะตรวจสอบเนื้อหาของไฟล์เหล่านี้ในขณะที่ไฟล์อื่น ๆ แม้แต่รูปแบบ JAR ของ Java สามารถทำได้อย่างง่ายดาย ได้รับการจัดการด้วยเครื่องมือที่ไม่ใช่กรรมสิทธิ์มาตรฐาน 100% ที่มีอยู่ในพอร์ต / แพ็คเกจของระบบยูนิกซ์ที่เหมาะสมทุกระบบ OTOH มันไม่สำคัญเลยที่จะเรียกคืนข้อมูลของคุณจาก.jsonlz4ไฟล์เหล่านี้
cnst

2
JsonLZ4 เป็นความคิดที่ไม่ดี
neverMind9

คำตอบ:


19

มีผลลัพธ์ของ Google เพียงเล็กน้อยที่ส่งผลให้เกิดโซลูชั่นที่เป็นไปได้ แต่ตามhttps://www.reddit.com/r/firefox/comments/2ps6wg/jsonlz4_bookmark_backups/ตามที่ปรากฏด้านล่างนี้จะทำงานได้อย่างน่าเชื่อถือที่สุด:

  • ในabout:configสลับการdevtools.chrome.enabledตั้งค่าจากค่าเริ่มต้นfalseเป็นค่าtrue

  • เปิดScratchpadจากภายใน Firefox:

    • ทั้งที่มีfn+ Shift+ F4บน MacBook
    • หรือShift+ F4,
    • หรือผ่านแถบเมนูผ่านเครื่องมือนักพัฒนาเว็บScratchpad
  • ในแถบเมนูภายในScratchpadของ Firefox เปลี่ยนสภาพแวดล้อมจากเนื้อหาเป็นเบราว์เซอร์ (การข้ามขั้นตอนนี้จะส่งผลให้เกิดข้อผิดพลาดเช่นException: ReferenceError: OS is not definedในขั้นตอนถัดไป)

  • ใช้รหัสเช่นต่อไปนี้ภายในScratchpadของ 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))
    });
    

    พารามิเตอร์สุดท้ายเพื่อJSON.stringifyจัดการจำนวนช่องว่างที่จะใช้ในแต่ละบรรทัด การใส่ 0 ทำให้ทุกสิ่งถูกพิมพ์บนบรรทัดเดียวการวาง 1 แยกบรรทัดอย่างถูกต้อง (การวาง 2 จะสร้างช่องว่างที่ไม่มีประโยชน์มากเกินไปและเพิ่มขนาดของไฟล์เพื่อผลประโยชน์เพียงเล็กน้อย)

  • คลิกที่Runปุ่ม

  • เรียกใช้fgrep :textarea /Users/…/sessionstore-backups/recovery.baklz4.uncompressed.stringifyจากภายในแอปTerminal


ดูเหมือนจะไม่ทำงานใน FF 72 บน Linux Scratchpad ถูกลบแล้ว แต่ตอนนี้ Console รองรับโหมดหลายบรรทัด อย่างไรก็ตามOS.File.read(...บรรทัดจะให้: "ReferenceError: OS ไม่ได้ถูกกำหนด"
mivk

@ mivk ข้อผิดพลาดดังกล่าวข้างต้น - เกิดขึ้นเนื่องจากสภาพแวดล้อมที่ผิด ไม่มีทางที่จะเสี่ยงต่อสิ่งแวดล้อมหรือไม่
cnst

ฉันไม่พบการตั้งค่า "สภาพแวดล้อม" นี้หรืออะไรที่คล้ายกันใน FF 72.0.1
mivk

12

น่าเสียดายเนื่องจากส่วนหัวที่ไม่ได้มาตรฐานเครื่องมือมาตรฐานจะไม่ทำงาน มีข้อเสนอแบบเปิดที่จะเปลี่ยนแปลงสิ่งนั้น เห็นได้ชัดว่าส่วนหัว Mozilla ได้รับการวางแผนก่อนที่จะมีรูปแบบเฟรม lz4 มาตรฐานอยู่ มันห่อบล็อก lz4 มาตรฐาน

ที่กล่าวว่ารายงานข้อผิดพลาดเดียวกันรวมถึงวิธีการทางเลือกไม่กี่ ฉันจะเขียนรายการสั้น ๆ :

  • ใช้เครื่องมือdejsonlz4ซึ่งรวมถึงการสร้างแบบไบนารีสำหรับ Windows และควรสร้างได้ง่ายบน * nix
    • lz4jsonเป็นเครื่องมือที่คล้ายกัน แต่อาศัย liblz4 ภายนอกและค่อนข้างง่ายต่อการสร้างบน * ระวัง แต่ยากบน Windows (นอก WSL)
  • ใช้สคริปต์ Python ที่ค่อนข้างง่ายนี้: https://gist.github.com/Tblue/62ff47bef7f894e92ed5 (ต้องใช้แพคเกจ lz4 ผ่าน pip หรือผู้จัดการแพ็คเกจของคุณ) - สคริปต์ดูเหมือนจะเป็น python3 แต่สามารถปรับใช้กับ python2 ได้เล็กน้อย
  • มีwebextensionให้ใช้งานซึ่งควรจะเปิดได้ หมายเหตุ: ในขณะที่แหล่งที่มาพร้อมใช้งานฉันยังไม่ได้ตรวจสอบและการอนุญาตที่ร้องขอเป็นบิตที่เกี่ยวข้อง ( โดยเฉพาะการตอบสนองต่อข้อกังวล )
  • ในทางทฤษฎีคุณควรจะสามารถตัด 8 ไบต์แรก (เช่นด้วยdd if=original.jsonlz4 of=stripped.lz4 bs=8 skip=1) และควรปล่อยให้คุณมีบล็อก lz4 ที่ถูกต้อง โปรดทราบว่านี้แตกต่างจาก LZ4 กรอบ ในขณะที่ภาษาการเขียนโปรแกรมส่วนใหญ่มีไลบรารีที่สามารถถอดรหัสบล็อกได้อย่างง่ายดายการค้นหาเครื่องมือที่สร้างไว้ล่วงหน้าเพื่อทำนั้นยากกว่าเช่นliblz4-toolแพคเกจยอมรับเฉพาะรูปแบบเฟรม

1
ทำไม LZ4 จึงมีความจำเป็นตั้งแต่แรก? LZ4 เป็นความคิดที่ผิดปกติอย่างแน่นอน
neverMind9

BTW นี่คือ lz4json ที่คอมไพล์เรียบร้อยในUNIX®, Mac OS X, MacOS, FreeBSD, OpenBSD และ NetBSD - github.com/cnst/lz4json
cnst

5

ฉันสามารถแยก URL ออกจากไฟล์{profile-dir} /sessionstore-backups/recovery.jsonlz4โดยใช้เครื่องมือออนไลน์ฟรีต่อไปนี้ที่ออกแบบมาอย่างชัดเจนเพื่อจุดประสงค์นี้:

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

เว็บไซต์เดียวกันมีเครื่องมือที่คล้ายกันสำหรับการถอดรหัสjsonlz4ไฟล์จาก{รายละเอียด-dir} / bookmarkbackupsไดเรกทอรี


2
เพิ่งค้นพบสิ่งนี้ทำงานได้อย่างไร้ที่ติ
lowtechsun

1

บนระบบที่เหมือนUNIX®และ UNIXเช่น Mac OS X ที่มี MacPorts, FreeBSD, OpenBSD หรือ NetBSD พร้อมกับ pkgsrc, https://github.com/cnst/lz4json fork lz4json ที่แยกออกมาอย่างหมดจดสามารถใช้ในการคอมไพล์อย่างหมดจดจาก lz4json กล่องเช่นบน Mac OS X ด้วย 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.