Quebre o banco de dados WeChat de um determinado ambiente host para obter seu histórico de bate-papo
Se você usar um bot WeChat como wechaty
, você só poderá conectar cada mensagem em tempo real e não poderá obter registros históricos completos do bate-papo.
Porém, se estiver dentro da estrutura do wechaty
, mais a API para obtenção de registros de chat, pode ser viável.
Como os registros de bate-papo do WeChat são armazenados no banco de dados, eles podem ser obtidos da perspectiva do banco de dados.
Como os registros de bate-papo do WeChat são armazenados em sqlcipher
, que é um banco de dados sqlite
que suporta criptografia e requer uma chave secreta para ser aberto, devemos primeiro obter a chave secreta do banco de dados.
Tomando o MacOS como exemplo, podemos usar alguns métodos reversos ( dtrace
) para conectar as atividades do banco de dados do programa. Como o programa que abre o banco de dados envolve a leitura da chave, podemos analisar essa ação de leitura para obter a chave secreta em texto simples.
Em teoria, ele pode ser implementado em qualquer plataforma, especialmente plataformas como Android e Windows. Existem mais engenheiros reversos e pode ser menos difícil de quebrar. No entanto, meu computador pessoal principal é Mac/iOS, então não considerei a compatibilidade. com o ecossistema Windows/Android por enquanto.
Em segundo lugar, as capacidades de engenharia no lado do PC são mais ricas do que as do lado móvel. Portanto, dar prioridade aos avanços no lado do PC é uma escolha rentável.
Atualmente, nosso script dtrace e toda a lógica do gancho precisam garantir que a versão do cliente MacOS WeChat esteja abaixo de 3.6 .
Endereço de download de versões anteriores do WeChat: Versões mais antigas do WeChat (Mac) |
No MacOS, um ambiente que possa ler e gravar sqlcipher deve ser configurado.
# 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
Você precisa segurar cmd + shift + R para entrar no modo de segurança (basta pressionar e segurar o botão liga / desliga no Mac Studio)
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
dica: você precisa garantir que está executando o programa WeChat correto com a versão correspondente.
# 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
dica: A ação de leitura da chave ocorrerá ao fazer login, então você precisa primeiro executar o programa e depois fazer login.
Como obtivemos o endereço de armazenamento, a chave secreta, a versão, etc. de cada banco de dados, podemos ler todos os dados programaticamente.
pysqlcipher
node-sqlcipher