PERINGATAN: Alat ini HANYA digunakan untuk memecahkan db Anda sendiri. JANGAN menggunakannya dalam keadaan ilegal APAPUN.
(Alat ini dapat memecahkan masalah yang tercantum di https://github.com/ppwwyyxx/wechat-dump/wiki, pysqlcipher.dbapi2.DatabaseError: file dienkripsi atau bukan database)
Pada beberapa perangkat, Anda mungkin mendapatkan pesan kesalahan: "file dienkripsi atau bukan database", ketika mencoba mendekripsi EnMicroMsg.db dengan "md5(imei + uin)[:7]". Salah satu kemungkinan alasannya adalah WeChat menggunakan ID perangkat lain selain IMEI untuk membuat kata sandi.
Beruntung bagi kami karena password 28-bit (total 16^7 kombinasi) tidak cukup kuat untuk menahan serangan brute force.
WeChat menggunakan sqlcipher v2 untuk mengenkripsi database. Bagian dari fitur keamanan tercantum sebagai berikut (dari https://www.zetetic.net/sqlcipher/design/):
Jadi, fellowing adalah strategi kami: dapatkan halaman pertama; memperoleh infus dari 16B terakhir dan garam dari 16B pertama; ulangi semua kombinasi frasa sandi yang mungkin; turunkan kunci yang sesuai. Dekripsi db.
Kita tahu bahwa header asli sqlite db adalah string 16B: "SQLite format 3 ", yang digantikan oleh garam dalam kasus terenkripsi. Berikut ini adalah 2B untuk mendeskripsikan ukuran halaman (0x04 0x00), versi tulis 1B ( 0x01 0x02) dan versi baca 1B ( 0x01 0x02). Kami memiliki 4 byte identik untuk menguji apakah kami mendapatkan teks biasa yang benar. (12-04-2019) Dari Wechat 7, Tencent menggunakan versi tulis/baca baru (0x02), yang akan mematahkan deteksi kami sebelumnya. Sekarang kita akan menggunakan tiga byte tetap berikut untuk menguji apakah kita mendapatkan teks biasa yang benar: 1. fraksi muatan tertanam maksimum (0x40) dengan offset 5; 2. fraksi muatan tertanam minimum (0x20) dengan offset 6; 3. pecahan payload daun (0x20) dengan offset 7. (Di sini kita bisa mengabaikan tabrakan saja. Jika Anda berhasil mendapatkan pass tetapi masih tidak dapat membuka db, lewati saja "peringatan palsu" dan mulai dari pass berikutnya.)
Dibutuhkan sekitar 5 ms untuk melakukan satu PBKDF2 dengan 4000 iterasi. Jadi dalam kasus terburuk, dibutuhkan 16^7 * 0,005 /3600/24 = 15,5 hari untuk memecahkannya. Pada PC 8-core, waktu tersebut berkurang menjadi 2 hari (kedengarannya masuk akal sekarang).
Sebelum melakukan crack, silakan gunakan ekstrak_key_from_cfg_files.py untuk mendapatkan kunci jika systemInfo.cfg dan KompatibelInfo.cfg tersedia.
Ada dua versi untuk dipilih: versi C dan versi Python. Yang pertama harusnya sedikit lebih cepat (intinya bergantung pada openssl. Tidak ada perbedaan dalam menghitung 4000 iterasi).
$ sudo apt-get install libssl-dev
$ gcc password_cracker.c -l crypto -o password_cracker.o
ubah parameter di "crack_enmicromsg_db_(C_version)". process_no: total inti yang digunakan. Catatan: Jika Anda berhasil mendapatkan pass tetapi masih tidak dapat membuka db, mulailah dari pass berikutnya dengan mengubah "pass_start".
awal:
$ python2 crack_enmicromsg_db_(C_version).py
Tujuan demo. Tidak ditulis dengan baik.
Gunakan wechat-dump indah yang ditulis oleh Yuxin Wu untuk membuang seluruh db. Anda perlu mengubah beberapa baris di "decrypt-db.py" untuk menggunakan kuncinya. Selamat bersenang-senang!
decrypt_db_with_password.py: bila Anda sudah mengetahui kata sandinya, gunakan skrip ini untuk mendapatkan database terdekripsi yang dapat dilihat/diedit oleh DB Browser untuk SQLite.
encrypt_db_again.py: mengenkripsi db lagi. Catatan: (2018 Feb 04) tidak menguji apakah WeChat dapat membukanya dengan benar.
ekstrak_kunci_dari_cfg_files.py : skrip ini dapat mengekstrak kunci dari KompatibelInfo.cfg dan systemInfo.cfg . Harap dicatat bahwa ini ditulis dengan Python 3 . Ubah search_path terlebih dahulu lalu jalankan skripnya
$ python3 extract_key_from_cfg_files.py
sqlcipher-tools/decrypt.c banyak membantu saya untuk memahami cara kerja sqlcipher.
wechat-dump/decrypt-db.py menyediakan parameter kunci WeChat db.
dokumentasi sqlcipher : fitur keamanan terperinci.
Perbaiki masalah #4: Tidak dapat dikompilasi dengan openssl 1.1 : terima kasih @couling untuk patch openssl 1.1.