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>
此脚本使用sqlcipher
并jq
与信号桌面的数据库密钥一起打开、解密和提取所有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
从消息备份中访问任何键/值。
您必须安装sqlcipher
并jq
为:
sudo apt install sqlcipher jq
Run Code Online (Sandbox Code Playgroud)
笔记:
虽然这确实提取了所有消息,但我们需要指定all
信号桌面中的“ all messages actually loaded
”具有“ ”的含义。因此,为了提取每条消息,活动联系人的滑块必须向上滑动,然后信号桌面将加载以前不可用的消息(泡沫冲洗重复直到满意为止)。在过去您希望加载消息时这样做。这很快就会变得乏味。请记住为所有联系人的历史记录这样做。
话虽如此,备份您的消息历史记录在技术上是可行的,实际上这是一项手动工作。解决此问题的一种方法可能是备份所有最近的消息的 cron 作业,可能每天一次。那么这很可能包含重复项,并且在重新启动信号桌面时可能会丢失消息。
在任何情况下,这种方法工作正常,如果(不太远 - 阅读:几个月也许)历史是可以在编程时一次搜索。