Crackear la base de datos WeChat de un determinado entorno de host para obtener su historial de chat
Si utiliza un bot de WeChat como wechaty
, solo puede conectar cada mensaje en tiempo real y no puede obtener registros históricos completos del chat.
Sin embargo, si está dentro del marco de wechaty
, más la API para obtener registros de chat, puede ser factible.
Dado que los registros de chat de WeChat se almacenan en la base de datos, se pueden obtener desde la perspectiva de la base de datos.
Debido a que los registros de chat de WeChat se almacenan en sqlcipher
, que es una base de datos sqlite
que admite cifrado y requiere una clave secreta para abrirse, primero debemos obtener la clave secreta de la base de datos.
Tomando MacOS como ejemplo, podemos usar algunos métodos inversos ( dtrace
) para enganchar las actividades de la base de datos del programa. Dado que el programa que abre la base de datos implica leer la clave, podemos analizar esta acción de lectura para obtener la clave secreta en texto plano.
En teoría, se puede implementar en cualquier plataforma, especialmente en plataformas como Android y Windows. Hay más ingeniería inversa y puede ser menos difícil de descifrar. Sin embargo, mi computadora personal principal es Mac/iOS, por lo que no he considerado la compatibilidad. con el ecosistema Windows/Android por el momento.
En segundo lugar, las capacidades de ingeniería en el lado de las PC son más ricas que las del lado móvil, por lo que dar prioridad a los avances en el lado de las PC es una opción rentable.
En la actualidad, nuestro script dtrace y toda la lógica de enlace deben garantizar que la versión del cliente MacOS WeChat sea inferior a 3.6 .
Dirección de descarga de versiones anteriores de WeChat: Versiones anteriores de WeChat (Mac) |
En MacOS, se debe configurar un entorno que pueda leer y escribir sqlcipher.
# 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
Debes mantener presionado cmd + shift + R para ingresar al modo seguro (simplemente presiona y mantén presionado el botón de encendido en Mac Studio)
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
Consejo: Debes asegurarte de que estás ejecutando el programa WeChat correcto con la versión correspondiente.
# 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
Consejo: La acción de lectura de la clave se producirá al iniciar sesión, por lo que primero debe ejecutar el programa y luego iniciar sesión.
Como hemos obtenido la dirección de almacenamiento, la clave secreta, la versión, etc. de cada base de datos, podemos leer todos los datos mediante programación.
pysqlcipher
node-sqlcipher