Signal-Desktop:如何导出消息?

Gen*_*ack 9 backup signal-messenger

如何signal-desktop导出消息?

我想备份我的信件。

有可能吗?

Gen*_*ack 14

对的,这是可能的。

只需将其保存在一个文件中<yourFilename>

sigBase="${HOME}/.config/Signal/";
key=$( /usr/bin/jq -r '."key"' ${sigBase}config.json );
db="${HOME}/.config/Signal/sql/db.sqlite";
clearTextMsgs="${sigBase}clearTextMsgs.csv";

/usr/bin/sqlcipher -list -noheader "$db" "PRAGMA key = \"x'"$key"'\";select json from messages;" > "$clearTextMsgs";
Run Code Online (Sandbox Code Playgroud)

并通过bash <yourFilename>. 或者将其渲染为可执行文件chmod 700 <yourFilename>并直接调用它:./<yourFilename>

此脚本使用sqlcipherjq与信号桌面的数据库密钥一起打开、解密和提取所有JSON格式的消息到clearTextMsgs.csv您的信号桌面文件夹中~/.config/Signal

除了通过使用jq(from ~/.config/Signal/config.json)过滤 JSON 来提取密钥之外,关键的一点发生在这里:

sqlcipher -list -noheader <DB> <SQL>
Run Code Online (Sandbox Code Playgroud)

where<SQL>包含PRAGMA key定义和实际的 SQL 语句 ( SELECT json FROM messages;)。

然后可以使用jq从消息备份中访问任何键/值。

您必须安装sqlcipherjq为:

sudo apt install sqlcipher jq
Run Code Online (Sandbox Code Playgroud)

笔记:

虽然这确实提取了所有消息,但我们需要指定all信号桌面中的“ all messages actually loaded”具有“ ”的含义。因此,为了提取每条消息,活动联系人的滑块必须向上滑动,然后信号桌面将加载以前不可用的消息(泡沫冲洗重复直到满意为止)。在过去您希望加载消息时这样做。这很快就会变得乏味。请记住为所有联系人的历史记录这样做。

话虽如此,备份您的消息历史记录在技术上是可行的,实际上这是一项手动工作。解决此问题的一种方法可能是备份所有最近的消息的 cron 作业,可能每天一次。那么这很可能包含重复项,并且在重新启动信号桌面时可能会丢失消息。

在任何情况下,这种方法工作正常,如果(不太远 - 阅读:几个月也许)历史是可以在编程时一次搜索。

  • @rubo77 我刚刚试过这个(Debian 测试),我也得到了错误,sqlcipher 3.4.1。你提到了 3.30 版本,但没有这样的版本存在,你是说 3.3.0 吗?不幸的是,这似乎还不够。编辑:在本地构建 sqlcipher 4.4.0 后,它可以工作。:) (3认同)
  • 在 Ubuntu 19.10 上试过这个,但我只是收到错误 `Error: file is encrypted or is not a database ` (2认同)
  • 您需要最低 sqlcipher 版本 3.30 才能工作,手动编译,如:https://www.zetetic.net/sqlcipher/introduction/,然后将最后一行更改为 `/usr/local/bin/sqlcipher` (2认同)