Como as signal-desktop
mensagens podem ser exportadas?
Quero fazer backup da minha correspondência.
É possível de alguma forma?
Como as signal-desktop
mensagens podem ser exportadas?
Quero fazer backup da minha correspondência.
É possível de alguma forma?
Sim, é possível.
Basta salvar isso em um arquivo
<yourFilename>
:e chame-o via
bash <yourFilename>
. Ou torne-o executávelchmod 700 <yourFilename>
e chame-o diretamente:./<yourFilename>
Este script usa
sqlcipher
ejq
com a chave de banco de dados do signal-desktop para abrir, descriptografar e extrair todas as mensagens emJSON
formatoclearTextMsgs.csv
dentro de sua pasta signal-desktop~/.config/Signal
.Além da extração de chave filtrando JSON com
jq
(de~/.config/Signal/config.json
), a parte crucial acontece aqui:onde
<SQL>
contém aPRAGMA key
definição e a instrução SQL real (SELECT json FROM messages;
).Pode-se usar
jq
para acessar qualquer chave/valor do backup de mensagens.Você tem que instalar
sqlcipher
ejq
para isso:Observação:
Embora isso extraia todas as mensagens, precisamos especificar que "
all
" em signal-desktop tem o significado de "all messages actually loaded
". Assim, para extrair todas as mensagens, o controle deslizante do contato ativo deve ser deslizado para cima, então o signal-desktop carregará mensagens anteriormente não disponíveis (lavagem repetida até ficar satisfeito). Faça isso no passado que você gostaria que suas mensagens fossem carregadas. Isso fica tedioso rapidamente. Lembre-se de fazer isso para todos os históricos de seus contatos.Dito isso, é tecnicamente viável fazer backup do seu histórico de mensagens, na prática é um trabalho manual. Uma maneira de contornar isso pode ser um cron job fazendo backup de todas as mensagens recentes, talvez uma vez por dia. Então é provável que isso contenha duplicatas e possa perder mensagens caso o signal-desktop tenha sido reiniciado.
De qualquer forma, esse método está funcionando bem se o histórico (não muito longe - leia-se: alguns meses talvez) deve ser pesquisado programaticamente de vez em quando.
Basicamente como o Gen.Stack respondeu , mas instruções mais elaboradas para o Debian .
Eu também removi alguma complexidade desnecessária. Por exemplo:
jq '."key"'
também pode ser escrito como,jq .key
pois nenhum desses caracteres é dinâmico e, portanto, nunca precisará escapar com duas camadas de aspas. Variáveis como"$HOME"
ainda são citadas, pois podem conter caracteres que precisam ser citados.apt install build-essential libssl-dev tcl libsqlite3-dev
Não tenho certeza se libsqlite3-dev é necessário, mas instalei-o como parte de depuração.
Se você está perdendo uma dependência, mas
./configure
executou corretamente e tentoumake
, as compilações subsequentes falharão até que você remova manualmentesqlite3.h
, consulte https://github.com/sqlcipher/sqlcipher/issues/157git clone https://github.com/sqlcipher/sqlcipher.git
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
make
jq
para extrair sua chave de criptografia do banco de dados:apt install jq
db="$HOME/.config/Signal/sql/db.sqlite"
key="$(jq -r .key "$HOME/.config/Signal/config.json")
"./sqlcipher
abaixo. Se você não estiver mais no diretório de compilação, deverá especificar o caminho, por exemplo:~/Downloads/sqlcipher/sqlcipher -list ...
.messages
tabela :./sqlcipher -list -noheader "$db" "PRAGMA key = \"x'"$key"'\";select json from messages;" > Signal_messages.jsonl
.dump
comando:echo -e 'PRAGMA key = "x'\'"$key"\''";\n.dump\n' | ./sqlcipher -list -noheader "$db" > Signal_database.sql
.tables
, provavelmente, você obteve a chave errada ou digitou algo ou selecionou o arquivo errado (ou, em um caso raro, talvez, o arquivo possa estar danificado ).Et voilá, não foi tão fácil? Por que o Signal adicionaria um recurso de backup quando você pode apenas fazer o acima!
sigtop funcionou para mim e tem opções para formatos de exportação.
Encontre seu banco de dados db.sqlite criptografado (a chave de descriptografia está no arquivo config.json). Dependendo do seu sistema operacional e de como você instala o Signal, você pode encontrar esses arquivos em um destes locais:
Linux:
~/.config/Signal/
~/.var/app/org.signal.Signal/config/Signal
Janelas:
%AppData%\Signal\config.json
Mac OS:
~/Library/Application Support/Signal
O que você quer fazer é executar esta consulta SQL:
Ele retorna todas as mensagens em um formato razoável:
timestamp; número de telefone; nome da conversa; entrada saída; conteúdo da mensagem
Se você quiser uma GUI, você pode usar sqlitebrowser .
Vá para a 
Abra o sqlitebrowser, clique em Open, selecione Raw Key, insira sua chave com uma entrelinha
0x
conforme mostrado na captura de tela, selecioneSQLCipher 4 defaults
, clique em ok:Execute SQL
guia e cole a consulta acima mencionada e clique no botão de reprodução triangular azul para executar a consulta: