Pecahkan database WeChat dari lingkungan host tertentu untuk mendapatkan riwayat obrolannya
Jika Anda menggunakan bot WeChat seperti wechaty
, Anda hanya dapat menghubungkan setiap pesan waktu nyata dan tidak dapat memperoleh catatan riwayat obrolan yang lengkap.
Namun, jika dalam kerangka wechaty
, ditambah API untuk mendapatkan catatan obrolan, hal itu mungkin dapat dilakukan.
Karena catatan obrolan WeChat disimpan dalam database, catatan tersebut dapat diperoleh dari perspektif database.
Karena catatan obrolan WeChat disimpan dalam sqlcipher
, yaitu database sqlite
yang mendukung enkripsi dan memerlukan kunci rahasia untuk membukanya, maka kita harus mendapatkan kunci rahasia database tersebut terlebih dahulu.
Mengambil MacOS sebagai contoh, kita dapat menggunakan beberapa metode terbalik ( dtrace
) untuk menghubungkan aktivitas database dari program tersebut. Karena program yang membuka database melibatkan pembacaan kunci, kita dapat mengurai tindakan pembacaan ini untuk mendapatkan kunci rahasia teks biasa.
Secara teori, ini dapat diimplementasikan pada platform apa pun, terutama platform seperti Android dan Windows. Ada lebih banyak reverse engineer dan mungkin lebih mudah untuk di-crack. Namun, komputer utama pribadi saya adalah Mac/iOS, jadi saya belum mempertimbangkan kompatibilitasnya dengan ekosistem Windows/Android untuk saat ini.
Kedua, kemampuan teknik pada sisi PC lebih kaya dibandingkan pada sisi seluler. Oleh karena itu, memprioritaskan terobosan pada sisi PC adalah pilihan yang hemat biaya.
Saat ini, skrip dtrace kami dan seluruh logika hook perlu memastikan bahwa versi klien MacOS WeChat di bawah 3.6 .
Alamat unduhan WeChat versi sebelumnya: WeChat versi lama (Mac) |
Di MacOS, lingkungan yang dapat membaca dan menulis sqlcipher harus dikonfigurasi.
# 1. check where is your `libcrypto.a`
brew list openssl | grep libcrypto.a
# 或者 find /usr/local/Cellar -name libcrypto.a
# 2. use the libcrypto.a with openssl version >= 3
LIBCRYPTO={YOUR-libcrypto.a}
# 3. install sqlcipher
git submodule add https://github.com/sqlcipher/sqlcipher
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS= " -DSQLITE_HAS_CODEC "
LDFLAGS= $LIBCRYPTO --with-crypto-lib=none
make
# need password
sudo make install
Anda perlu menahan cmd + shift + R untuk masuk ke mode aman (cukup tekan dan tahan tombol daya di Mac Studio)
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
tip: Anda perlu memastikan bahwa Anda menjalankan program WeChat yang benar dengan versi yang sesuai.
# comparing to `wechat-decipher-macos`, I make the script more robust.
# 由于key是固定的,也可以把输出内容持久化,只需要在命令后面加上 `> data/dbcracker.log`
pgrep -f /Applications/WeChat-3.6.0.app/Contents/MacOS/WeChat | xargs sudo core/dbcracker.d -p > .keys
tip: Tindakan membaca kunci akan terjadi saat login, jadi Anda harus menjalankan program terlebih dahulu lalu login.
Karena kami telah memperoleh alamat penyimpanan, kunci rahasia, versi, dll. dari setiap database, kami dapat membaca semua data secara terprogram.
pysqlcipher
node-sqlcipher