Signal-Desktop: 메시지를 내보내는 방법은 무엇입니까?

Signal-Desktop: 메시지를 내보내는 방법은 무엇입니까?

메시지를 내보내는 방법은 무엇입니까 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 keySELECT 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"인용되어야 하는 문자를 포함할 수 있기 때문에 여전히 인용됩니다.

  1. 적어도 2022년부터는 소스에서 sqlcipher를 컴파일해야 합니다. sid의 버전도 충분히 새롭지 않습니다.rubo77의 댓글
    1. 종속성 설치:
      apt install build-essential libssl-dev tcl libsqlite3-dev
      libsqlite3-dev가 필요한지 확실하지 않지만 디버깅 작업의 일부로 설치했습니다.
      종속성이 누락되었지만 ./configure올바르게 실행되고 이를 수행하려고 하면 make수동으로 제거할 때까지 후속 빌드가 실패합니다 sqlite3.h.https://github.com/sqlcipher/sqlcipher/issues/157
    2. 다운로드 코드:
      git clone https://github.com/sqlcipher/sqlcipher.git
      cd sqlcipher
    3. 동적 연결을 구성하고 컴파일합니다.
      ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
      make
  2. jq데이터베이스 암호화 키를 추출하려면 설치하세요 .
    apt install jq
  3. 환경 변수 설정을 용이하게 하려면:
    db="$HOME/.config/Signal/sql/db.sqlite"
    key="$(jq -r .key "$HOME/.config/Signal/config.json")"
  4. 메시지를 내보냅니다. 을 사용하고 있으니 참고하세요 ./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를 열고 "열기"를 클릭한 후 "원래 키"를 선택하고 (스크린샷에 표시된 대로)
선행 키를 입력한 후 을 선택하고 "확인"을 클릭합니다.0xSQLCipher 4 defaults
여기에 이미지 설명을 입력하세요. 탭 으로 이동 Execute SQL하여 위 쿼리를 붙여넣고 파란색 삼각형 재생 버튼을 클릭하여 쿼리를 실행합니다. 여기에 이미지 설명을 입력하세요.

관련 정보