wechat_history_export
1.0.0
WeChat 채팅 기록을 csv로 내보냅니다.
현재는 macOS에서만 테스트됩니다 . 다른 플랫폼의 채팅 기록도 AES로 암호화된 sqlite3 데이터베이스에 있는지 확실하지 않습니다. 동일한 경우 PR도 사용해야 합니다.
데모가 demo.py
에 제공됩니다. 이것은 기본적으로 제공되는 스크립트가 아니므 로 직접 수행해야 할 수도 있습니다.
나중에 pysqlcipher를 사용할 수도 있습니다.
WeChat 정보가 wechat_root=~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/xxx_version/xxx
디렉터리 아래의 관련 AES 암호화 sqlite3 데이터베이스 파일에 저장되어 있다고 가정합니다.
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
그런 다음 demo.py
에서 'e88d4ad0826ae28f777054d48e723a1b0ae79c895f49b0ec79df2a68d59cb8f5'
에 wechat_raw_key
값을 할당합니다.
온라인에서 다른 방법을 찾을 수 있을 것입니다. 시도해 보고 효과가 있다면 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 ;