Exportez les enregistrements de discussion WeChat au format CSV.
Actuellement, il n'est testé que sur macOS . Je ne sais pas si les enregistrements de discussion sur d'autres plates-formes se trouvent également dans la base de données sqlite3 cryptée en AES. Si c'est le cas, cette méthode doit également être utilisée.
Une démo est fournie, dans demo.py
, ce n'est pas un script prêt à l'emploi , vous devrez peut-être le faire vous-même.
Vous pourrez peut-être utiliser pysqlcipher plus tard.
Supposons que les informations WeChat soient stockées dans le fichier de base de données sqlite3 chiffré AES approprié sous le répertoire 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
Trouvez un moyen de décrypter le fichier de base de données pour obtenir les informations souhaitées.
lldb -p $(pgrep WeChat)
br set -n sqlite3_key
continue
memory read --size 1 --format x --count 32 $rsi
Vous verrez un résultat similaire à celui-ci
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
Attribuez ensuite la valeur de wechat_raw_key
à 'e88d4ad0826ae28f777054d48e723a1b0ae79c895f49b0ec79df2a68d59cb8f5'
dans demo.py
Vous devriez pouvoir trouver d'autres méthodes en ligne. Si vous l'essayez et que cela fonctionne, les PR sont les bienvenus.
# 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 ;
Utilisez la méthode ci-dessus pour exporter la base de données déchiffrée msg_0.db
Certaines des données les plus récentes peuvent ne pas être dans la base de données. Plus tard, j'ai découvert que WeChat avait activé wal et pouvait être fusionné via le point de contrôle.
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 ;