메시지를 내보내는 방법은 무엇입니까 signal-desktop
?
메일을 백업하고 싶어요.
가능합니까?
답변1
예, 가능합니다.
파일에 저장하면 됩니다 <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";
그리고 그것을 호출함으로써 bash <yourFilename>
. 또는 실행 가능하게 만들고 chmod 700 <yourFilename>
직접 호출하십시오../<yourFilename>
이 스크립트는 signal-desktop의 데이터베이스 키를 사용하여 sqlcipher
모든 jq
메시지를 열고, 해독하고, signal-desktop 폴더 JSON
로 추출합니다 .clearTextMsgs.csv
~/.config/Signal
jq
키를 추출하기 위해 JSON을 필터링하는 것 외에도 ~/.config/Signal/config.json
중요한 부분은 여기서 발생합니다.
sqlcipher -list -noheader <DB> <SQL>
여기에는 정의와 실제 SQL 문( )이 <SQL>
포함되어 있습니다 .PRAGMA key
SELECT json FROM messages;
그런 다음 사람들은 이를 사용하여 jq
메시지 백업의 모든 키/값에 액세스할 수 있습니다.
sqlcipher
이를 위해서는 다음 을 설치해야 합니다 jq
.
sudo apt install sqlcipher jq
노트:
all
이것이 모든 메시지를 추출하는 동안 signal-desktop의 ""가 ""의 의미를 갖도록 지정해야 합니다 all messages actually loaded
. 따라서 각 메시지를 추출하려면 활성 연락처의 슬라이더를 위쪽으로 이동해야 하며, 그런 다음 Signal 데스크톱은 이전에 사용할 수 없었던 메시지를 로드합니다(만족할 때까지 버블 린스 반복). 로드하려는 메시지를 가능한 한 빨리 로드하세요. 이것은 빨리 지루해질 수 있습니다. 모든 연락처 기록에 대해 이 작업을 수행하는 것을 잊지 마세요.
하지만 메시지 기록을 백업하는 것은 기술적으로 가능하지만 실제로는 수동 작업입니다. 이 문제에 대한 해결책은 크론 작업을 사용하여 하루에 한 번 모든 최근 메시지를 백업하는 것일 수 있습니다. 그러면 여기에 중복된 내용이 포함될 수 있으며 신호 데스크탑을 다시 시작할 때 메시지가 손실될 수 있습니다.
어쨌든 프로그래밍 방식으로 가끔(너무 멀지는 않지만 읽기: 몇 달 정도) 기록을 검색하려는 경우 이 접근 방식이 제대로 작동할 것입니다.
답변2
간판나를 위해 일했으며 형식을 내보내는 옵션이 있습니다.
답변3
기본적으로Gen.Stack이 답변했습니다., 하지만데비안에 대한 추가 개발 지침.
불필요한 복잡성도 제거했습니다. 예를 들어 다음 jq '."key"'
과 같이 작성할 수도 있습니다 . jq .key
이러한 문자는 모두 동적이므로 큰따옴표로 이스케이프할 필요가 없습니다. 이와 같은 변수는 "$HOME"
인용되어야 하는 문자를 포함할 수 있기 때문에 여전히 인용됩니다.
- 적어도 2022년부터는 소스에서 sqlcipher를 컴파일해야 합니다. sid의 버전도 충분히 새롭지 않습니다.rubo77의 댓글
- 종속성 설치:
apt install build-essential libssl-dev tcl libsqlite3-dev
libsqlite3-dev가 필요한지 확실하지 않지만 디버깅 작업의 일부로 설치했습니다.
종속성이 누락되었지만./configure
올바르게 실행되고 이를 수행하려고 하면make
수동으로 제거할 때까지 후속 빌드가 실패합니다sqlite3.h
.https://github.com/sqlcipher/sqlcipher/issues/157 - 다운로드 코드:
git clone https://github.com/sqlcipher/sqlcipher.git
cd sqlcipher
- 동적 연결을 구성하고 컴파일합니다.
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
make
- 종속성 설치:
jq
데이터베이스 암호화 키를 추출하려면 설치하세요 .
apt install jq
- 환경 변수 설정을 용이하게 하려면:
db="$HOME/.config/Signal/sql/db.sqlite"
key="$(jq -r .key "$HOME/.config/Signal/config.json")
" - 메시지를 내보냅니다. 을 사용하고 있으니 참고하세요
./sqlcipher
. 더 이상 컴파일 디렉터리에 없으면 경로를 지정해야 합니다(예: )~/Downloads/sqlcipher/sqlcipher -list ...
.- 출구그냥 너의
messages
테이블:
./sqlcipher -list -noheader "$db" "PRAGMA key = \"x'"$key"'\";select json from messages;" > Signal_messages.jsonl
- 출구전체 데이터베이스사용
.dump
명령:
echo -e 'PRAGMA key = "x'\'"$key"\''";\n.dump\n' | ./sqlcipher -list -noheader "$db" > Signal_database.sql
- 오직데이터베이스 찾아보기:
$ echo "$key" SECRETSECRET $ ./sqlcipher -list -noheader "$db" sqlite> PRAGMA key = "x'SECRETSECRET'"; ok sqlite> .tables attachment_downloads messages_fts_config sessions badgeImageFiles messages_fts_content signedPreKeys ...
.tables
잘못된 키를 입력했거나 잘못된 내용을 입력했거나 잘못된 파일을 선택했을 가능성이 높습니다(또는 드물지만 파일이 손상되었을 수 있음). . - 출구그냥 너의
보세요, 쉽지 않나요? 위와 같은 작업을 수행할 수 있는데 왜 Signal에 백업 기능을 추가해야 할까요?
답변4
암호화된 db.sqlite 데이터베이스를 찾습니다(암호 해독 키는 config.json 파일에 있음). 운영 체제 및 Signal 설치 방법에 따라 다음 위치 중 하나에서 이러한 파일을 찾을 수 있습니다.
리눅스:
~/.config/Signal/
~/.var/app/org.signal.Signal/config/Signal
윈도우:
%AppData%\Signal\config.json
애플 시스템:
~/Library/Application Support/Signal
당신이 원하는 것은 다음 SQL 쿼리를 실행하는 것입니다.
SELECT M.sent_at, M.source, C.name, M.type, M.body
FROM messages AS M
JOIN conversations AS C
ON M.conversationId = C.id
ORDER BY M.sent_at;
모든 메시지를 적절한 형식으로 반환합니다:
전화번호, 수신/발신 메시지 내용;
GUI를 원한다면 사용할 수 있습니다SQLite 브라우저. sqlitebrowser를 열고 "열기"를 클릭한 후 "원래 키"를 선택하고 (스크린샷에 표시된 대로)
선행 키를 입력한 후 을 선택하고 "확인"을 클릭합니다.0x
SQLCipher 4 defaults
탭 으로 이동 Execute SQL
하여 위 쿼리를 붙여넣고 파란색 삼각형 재생 버튼을 클릭하여 쿼리를 실행합니다.