Exporte registros de chat de WeChat a csv.
Actualmente, solo se prueba en macOS . No estoy seguro de si los registros de chat en otras plataformas también están en la base de datos sqlite3 cifrada con AES, este método también debería usarse.
Se proporciona una demostración, en demo.py
, este no es un script que viene listo para usar , es posible que deba hacerlo usted mismo.
Quizás puedas usar pysqlcipher más tarde.
Supongamos que la información de WeChat se almacena en el archivo de base de datos sqlite3 cifrado con AES correspondiente en el directorio 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
Encuentre una manera de descifrar el archivo de la base de datos para obtener la información que desea.
lldb -p $(pgrep WeChat)
br set -n sqlite3_key
continue
memory read --size 1 --format x --count 32 $rsi
Verá un resultado similar al siguiente
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
Luego asigne el valor de wechat_raw_key
a 'e88d4ad0826ae28f777054d48e723a1b0ae79c895f49b0ec79df2a68d59cb8f5'
en demo.py
Debería poder encontrar otros métodos en línea. Si lo prueba y funciona, las relaciones públicas son bienvenidas.
# 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 ;
Utilice el método anterior para exportar la base de datos descifrada msg_0.db
Es posible que algunos de los datos más recientes no estén en la base de datos. Más tarde, descubrí que WeChat ha habilitado wal y se puede fusionar a través del punto de control.
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 ;