ส่งออกบันทึกการแชท WeChat เป็น CSV
ปัจจุบันมีการทดสอบบน macOS เท่านั้น ฉันไม่แน่ใจว่าบันทึกการแชทบนแพลตฟอร์มอื่นอยู่ในฐานข้อมูล sqlite3 ที่เข้ารหัส AES หรือไม่ หากเป็นเช่นนั้น ก็ควรใช้วิธีนี้ด้วย
มีการสาธิตใน demo.py
นี่ ไม่ใช่สคริปต์ที่แกะกล่อง คุณอาจต้องทำเอง
บางทีคุณสามารถใช้ pysqlcipher ในภายหลังได้
สมมติว่าข้อมูล WeChat ถูกจัดเก็บไว้ในไฟล์ฐานข้อมูล sqlite3 ที่เข้ารหัส AES ที่เกี่ยวข้องภายใต้ไดเรกทอรี wechat_root=~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/xxx_version/xxx
:
wechat_root/Contanct/wccontact_new2.db
wechat_root/Group/group_new.db
wechat_root/Message/msg_xxx.db
ค้นหาวิธีถอดรหัสไฟล์ฐานข้อมูลเพื่อรับข้อมูลที่คุณต้องการ
lldb -p $(pgrep WeChat)
br set -n sqlite3_key
continue
memory read --size 1 --format x --count 32 $rsi
คุณจะเห็นผลลัพธ์ที่คล้ายกับภาพต่อไปนี้
0x60000243xxxx: 0xe8 0x8d 0x4a 0xd0 0x82 0x6a 0xe2 0x8f
0x60000243xxxx: 0x77 0x70 0x54 0xd4 0x8e 0x72 0x3a 0x1b
0x60000243xxxx: 0x0a 0xe7 0x9c 0x89 0x5f 0x49 0xb0 0xec
0x60000243xxxx: 0x79 0xdf 0x2a 0x68 0xd5 0x9c 0xb8 0xf5
จากนั้นกำหนดค่าของ wechat_raw_key
ให้กับ 'e88d4ad0826ae28f777054d48e723a1b0ae79c895f49b0ec79df2a68d59cb8f5'
ใน demo.py
คุณควรจะสามารถหาวิธีอื่นทางออนไลน์ได้ หากคุณลองใช้แล้วได้ผล PR ก็ยินดีต้อนรับ
# open encrypted database by sqlcipher
sqlcipher wccontact_new2.db
# set decryption parameter in sqlcipher
PRAGMA key = " x'your_aes_key_here' " ;
PRAGMA cipher_page_size = 1024 ;
PRAGMA kdf_iter = ' 64000 ' ;
PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1 ;
PRAGMA cipher_hmac_algorithm = HMAC_SHA1 ;
# check decryption succeed or not
SELECT COUNT( * ) FROM sqlite_master ;
# dump decrypted database to xxx_dec.db
ATTACH DATABASE ' xxx_dec.db ' AS plaintext KEY ' ' ;
SELECT sqlcipher_export( ' plaintext ' ) ;
DETACH DATABASE plaintext ;
ใช้วิธีการข้างต้นเพื่อส่งออกฐานข้อมูลที่ถอดรหัสแล้ว ข้อมูลล่าสุดบางส่วนอาจไม่อยู่ในฐานข้อมูล ต่อมาฉันพบว่า WeChat เปิดใช้งาน wal และสามารถรวมเข้าด้วยกันผ่านจุดตรวจ msg_0.db
เป็นตัวอย่าง:
mkdir wd
cp msg_0.db msg_0.db-shm msg_0.db-wal wd/
cd wd
# open encrypted database by sqlcipher
sqlcipher msg_0.db
# set decryption parameter in sqlcipher
PRAGMA key = " x'your_aes_key_here' " ;
PRAGMA cipher_page_size = 1024 ;
PRAGMA kdf_iter = ' 64000 ' ;
PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1 ;
PRAGMA cipher_hmac_algorithm = HMAC_SHA1 ;
# check decryption succeed or not
# SELECT COUNT(*) FROM sqlite_master;
# merge wal
PRAGMA wal_checkpoint ;
# dump decrypted database to xxx_dec.db
ATTACH DATABASE ' xxx_dec.db ' AS plaintext KEY ' ' ;
SELECT sqlcipher_export( ' plaintext ' ) ;
DETACH DATABASE plaintext ;