카카오톡 pc chat_data - kakaotog pc chat_data

카카오톡 PC버전 대화 백업하는 2가지 방법

  • 2017.11.25 09:12
  • 컴퓨터 TIP/유용한 정보

대한민국의 국민 대다수가 사용하는 채팅 프로그램 카카오톡. 이번에는 모바일을 넘어서 PC에서도 일상적으로 사용하고 있는 카카오톡인데요, 이번 글에서는 카카오톡의 PC버전의 대화내용을 백업하는 방법에 대해 알려드리려고 합니다.

카카오톡 pc chat_data - kakaotog pc chat_data

카톡 PC버전 대화내용 백업하기

방법은 2가지가 있습니다. 카카오톡에서 제공하는 백업 기능을 이용해 백업을 하는 것과 카카오톡의 대화 내용들이 들어가는 폴더를 수동으로 복사해서 백업하는 방법입니다. 두 방법의 차이는 다음과 같습니다.

카카오톡에서 제공하는 백업 특징

1. 인증 시점에 자동으로 복원 가능
2. 복원 기한 14일 이후 자동 삭제
3. 텍스트만 복원 가능. 사진, 동영상, 일반파일, 1,000자 이상의 장문 메시지 복원 불가
4. 백업이 간편함.

폴더로 수동 백업 방법

1. 복원 기한 무제한(파일 삭제하기 전엔 계속 가능)
2. 텍스트 외 썸네일 등도 복원 가능 (단, 많을수록 용량도 커짐)
3. 백업이 약간 복잡.
4. 다른 PC로 복사 불가능

※ 시작 전에 카카오톡 자체 백업을 미리 해놓는 걸 권장합니다.

그럼 한 번 시작해볼까요?

1. 카카오톡 자체 기능으로 백업하기

1. PC카톡 실행 후 설정 창에 들어간다.

2. 설정에서 고급으로 이동

3. 고급에서 대화 백업 하기 클릭

4. 백업 비밀번호 설정 후 백업 완료

5. 백업 확인하기

백업은 14일 이후 자동 삭제되므로 포맷 직전에 하는 것이 좋습니다. PC 인증을 해제하고 다시 설정할 때 백업을 불러올 수 있습니다. 인증 해제는 '설정->일반->PC인증 해제'로 가능합니다.

2. 수동 백업하기

1. Win+R로 실행창을 열고 %localappdata%입력

이후 Kakao\KakaoTalk\Users 폴더로 들어갑니다.

2. 이름이 긴 폴더에 들어갑니다. 폴더는 사용자마다 명칭이 다릅니다.

사용자가 여러 명이면 폴더 또한 여러 개이니 잘 확인해주세요.

3. chat_data 폴더를 압축합니다.

기억하기 좋게 압축한 날짜로 파일명을 만드는 것이 좋습니다.

※ 압축 전 카카오톡을 종료해주세요.

4. 복원할 때는 카톡 사용자 폴더에 압축을 해제하여 chat_data 폴더를 덮어씌우면 됩니다.

백업 파일은 OneDrive같은 클라우드 폴더에 넣어두면 보관하기 편리합니다.

1. 카카오톡 복호화

이번 2021 KDFS DFC 문제에 카카오톡 대화내역을 분석해야 할 일이 있어서 찾은 카카오톡 데이터 복호화 방법과 관련해서 포스팅 해보겠습니다.

카카오톡의 대화내역 암호화 방법은 카카오톡 어플을 디컴파일해서 소스코드를 보면 알 수 있다고 합니다.

이에 대해서는 이미 많은 분들이 분석을 진행하셨더라구요.

분석을 하셨던 분들이 내린 결론은 카카오톡의 정수 형태 사용자 ID 값을 암호화 키 값으로 사용한다는 것입니다. 그래서 카카오톡 ID 값을 복호화 키로 사용하고 복호화 소스코드를 작성해서 복호화를 하면 대화내역 원문을 얻어낼 수가 있다는 것입니다.

그런데 분석 방법을 포스팅하신 분들이 복호화 코드는 또 공유를 안하셔서 이리저리 찾다가 깃허브에서 카카오톡 복호화 코드를 찾을 수 있었습니다.

카카오톡 pc chat_data - kakaotog pc chat_data
https://github.com/jiru/kakaodecrypt

https://github.com/jiru/kakaodecrypt

GitHub - jiru/kakaodecrypt: Decrypt chat history from the local database of Kakaotalk’s Android app

Decrypt chat history from the local database of Kakaotalk’s Android app - GitHub - jiru/kakaodecrypt: Decrypt chat history from the local database of Kakaotalk’s Android app

github.com

카카오톡 pc chat_data - kakaotog pc chat_data

위 링크에 접속하면 파이썬으로 작성된 복호화 코드를 다운로드 할 수 있습니다. (저는 Python3로 복호화를 진행했습니다.)

카카오톡 pc chat_data - kakaotog pc chat_data
KakaTalk.db

카카오톡 db 파일은 다음 경로에 위치하고 있습니다.

/data/com.kakao.talk/databases

분석할 파일은 위 경로의 KakaoTalk.db 파일과 KakaoTalk2.db 파일입니다.

카카오톡 pc chat_data - kakaotog pc chat_data
KakaoTalk.db/chat_logs table

KakaoTalk.db 파일의 데이터 중 "chat_logs" 테이블에서 대화 내역을 저장해두고 있는 것을 알 수 있습니다. 하지만 복호화를 하지 않았기 때문에 "message", "attachment" 필드 값이 암호화되어 확인할 수 없는 상태입니다.

카카오톡 pc chat_data - kakaotog pc chat_data
KakaoTalk.db/chat_rooms table

같은 파일의 "chat_rooms" 테이블에서 마찬가지로 메세지 값을 암호화하여 확인할 수 없는 것을 볼 수 있습니다.


2. kakaodecrypt 사용법

카카오톡 pc chat_data - kakaotog pc chat_data
guess_user_id.py
python guess_user_id.py [KakaoTalk.db]

guess_user_id.py 코드로 카카오톡 사용자의 ID 값을 확인할 수 있습니다. 사실 이 부분은 암호화되지 않기 때문에 db 파일을 열어서 확인할 수 있는 데이터입니다.

카카오톡 pc chat_data - kakaotog pc chat_data
kakaodecrypt.py
python kakaodecrypt.py -u [KakaoTalk_User_ID] [KakaoTalk.db]

kakaodecrypt.py 코드를 사용해서 -u 옵션의 인자 값에 사용자 ID 값을 입력해주면 대화 내역을 복호화할 수 있습니다. 코드를 실행하면 "chat_logs_dec" , "chat_rooms_dec" 테이블이 생성되었다는 출력문을 확인할 수 있습니다.

파일로 새로 생성해주는 것이 아니라 기존 db 파일에 테이블을 추가해주는 형식입니다.


3-1. chat_logs table

카카오톡 pc chat_data - kakaotog pc chat_data
KakaoTalk.db/chat_logs_dec table

위와 같이 "chat_logs_dec" 라는 테이블이 새로 생성이 되었으며 message 값과 attachment 값이 복호화되어 원래의 값을 확인할 수 있습니다.

해당 테이블은 카카오톡의 모든 방의 대화 내역을 모아 놓은 테이블이며, 주목해야 할 필드 5개는 다음과 같습니다.

  • chat_id : 카카오톡 채팅방의 ID
  • user_id : 카카오톡 사용자의 ID
  • message : 카카오톡 채팅방에서 전송된 메시지
  • attachment : 카카오톡 채팅방에서 전송된 이모티콘과 업로드한 파일
  • created_at : 카카오톡 대화가 전송된 시간 (Unix epoch time)

chat_id 값으로 어떤 톡방에서 이루어진 대화인지,  user_id 값으로 어떤 사용자가 전송한 대화인지, created_at 값으로 언제 전송한 대화인지 분석할 수 있겠습니다.

3-2. chat_rooms table

카카오톡 pc chat_data - kakaotog pc chat_data
KakaoTalk.db/chat_rooms_dec table

"chat_rooms" 테이블 역시 복호화되어 "chat_rooms_dec" 테이블에서 값을 확인할 수 있습니다.

해당 테이블은 카카오톡의 채팅방에 대한 정보가 저장되어 있는 테이블이며, 주목해야 할 필드 5개는 다음과 같습니다.

  • id : 카카오톡 채팅방의 ID
  • type : 카카오톡 채팅방의 종류(1:1, 플러스챗, 그룹챗, 오픈챗)
  • members : 채팅방에 속해있는 사용자의 ID
  • last_message : 채팅방에 접속하기 전 보이는 미리보기 메시지
  • last_updated_at : 마지막으로 올라온 메시지의 전송된 시간 (Unix epoch time)

chat_logs_dec 테이블에서 봤던 chat_id 값을 chat_rooms 테이블에서 id 값으로 확인할 수 있습니다. 카카오톡 채팅방에 플러스 챗과 1:1 챗 기록 밖에 없어서 type 값은 플러스 챗과 1:1챗만 값을 확인할 수 있는데 아마도 오픈챗, 그룹챗도 값이 다를 것이라 예상됩니다. 추후 확인해봐야겠네요

members 도 그룹챗인 경우에 어떻게 표현이 될지 생각해봤는데, 멤버 1명당 행을 새로 추가할 것 같으면서도 사용자가 많은 그룹챗인 경우 몇 백 명의 데이터를 다 추가하기에는 좀 그렇지 않나는 생각이 들기도 하네요. 이에 대해서도 추후 확인해보겠습니다.


4. KakaoTalk2.db 분석

4-1. friends table

카카오톡 pc chat_data - kakaotog pc chat_data
KakaoTalk2.db/friends table

KakaoTalk2.db 파일의 friends 테이블에는 친구로 등록된 사용자에 대한 정보가 저장되어 있습니다. 그 중 주목해야 할 필드 몇 가지를 뽑아봤습니다.

  • id : 카카오톡 사용자의 ID
  • name : 카카오톡 사용자의 등록된 이름(nickname 필드는 별도 존재)
  • status_message : 카카오톡 사용자의 상태 메시지
  • involved_chat_ids : 해당 사용자와 연관있는 채팅방의 ID
  • created_at : 해당 사용자를 친구 추가한 시점으로 예상 (Unix epoch time) (검증해보진 않았습니다)

처음 봤을 때, 친구 테이블에 본인의 정보가 들어가 있어 의아했습니다. 생각을 해보니 카카오톡을 실행하고 친구 탭에 들어가면 본인의 정보도 같이 있더라구요. 아마 이 이유가 맞지 않을까 싶습니다.

KakaoTalk2.db 파일에는 friends 테이블 외에 item, item_resource 테이블이 추가로 복호화됩니다.

item 관련 테이블은 데이터가 부족해서 무슨 정보가 저장되어있는지 파악을 못했기 때문에 생략하도록 하겠습니다.

이번 포스팅은 복호화하는 방법을 중점으로 다루다보니 분석 방법에 대한 내용은 빈약하네요.

추후에 카카오톡 분석 포스팅을 추가로 올리게 된다면 다른 테이블들까지 참고해서 더 자세히 작성해보겠습니다.