Show
대한민국의 국민 대다수가 사용하는 채팅 프로그램 카카오톡. 이번에는 모바일을 넘어서 PC에서도 일상적으로 사용하고 있는 카카오톡인데요, 이번 글에서는 카카오톡의 PC버전의 대화내용을 백업하는 방법에 대해 알려드리려고 합니다. 카톡 PC버전 대화내용 백업하기방법은 2가지가 있습니다. 카카오톡에서 제공하는 백업 기능을 이용해 백업을 하는 것과 카카오톡의 대화 내용들이 들어가는 폴더를 수동으로 복사해서 백업하는 방법입니다. 두 방법의 차이는 다음과 같습니다. 카카오톡에서 제공하는 백업 특징1. 인증 시점에 자동으로 복원 가능 폴더로 수동 백업 방법1. 복원 기한 무제한(파일 삭제하기 전엔 계속 가능) ※ 시작 전에 카카오톡 자체 백업을 미리 해놓는 걸 권장합니다. 그럼 한 번 시작해볼까요? 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 값을 복호화 키로 사용하고 복호화 소스코드를 작성해서 복호화를 하면 대화내역 원문을 얻어낼 수가 있다는 것입니다. 그런데 분석 방법을 포스팅하신 분들이 복호화 코드는 또 공유를 안하셔서 이리저리 찾다가 깃허브에서 카카오톡 복호화 코드를 찾을 수 있었습니다. https://github.com/jiru/kakaodecrypthttps://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 위 링크에 접속하면 파이썬으로 작성된 복호화 코드를 다운로드 할 수 있습니다. (저는 Python3로 복호화를 진행했습니다.) KakaTalk.db카카오톡 db 파일은 다음 경로에 위치하고 있습니다. /data/com.kakao.talk/databases 분석할 파일은 위 경로의 KakaoTalk.db 파일과 KakaoTalk2.db 파일입니다. KakaoTalk.db/chat_logs tableKakaoTalk.db 파일의 데이터 중 "chat_logs" 테이블에서 대화 내역을 저장해두고 있는 것을 알 수 있습니다. 하지만 복호화를 하지 않았기 때문에 "message", "attachment" 필드 값이 암호화되어 확인할 수 없는 상태입니다. KakaoTalk.db/chat_rooms table같은 파일의 "chat_rooms" 테이블에서 마찬가지로 메세지 값을 암호화하여 확인할 수 없는 것을 볼 수 있습니다. 2. kakaodecrypt 사용법guess_user_id.py
guess_user_id.py 코드로 카카오톡 사용자의 ID 값을 확인할 수 있습니다. 사실 이 부분은 암호화되지 않기 때문에 db 파일을 열어서 확인할 수 있는 데이터입니다. kakaodecrypt.py
kakaodecrypt.py 코드를 사용해서 -u 옵션의 인자 값에 사용자 ID 값을 입력해주면 대화 내역을 복호화할 수 있습니다. 코드를 실행하면 "chat_logs_dec" , "chat_rooms_dec" 테이블이 생성되었다는 출력문을 확인할 수 있습니다. 파일로 새로 생성해주는 것이 아니라 기존 db 파일에 테이블을 추가해주는 형식입니다. 3-1. chat_logs tableKakaoTalk.db/chat_logs_dec table위와 같이 "chat_logs_dec" 라는 테이블이 새로 생성이 되었으며 message 값과 attachment 값이 복호화되어 원래의 값을 확인할 수 있습니다. 해당 테이블은 카카오톡의 모든 방의 대화 내역을 모아 놓은 테이블이며, 주목해야 할 필드 5개는 다음과 같습니다.
chat_id 값으로 어떤 톡방에서 이루어진 대화인지, user_id 값으로 어떤 사용자가 전송한 대화인지, created_at 값으로 언제 전송한 대화인지 분석할 수 있겠습니다. 3-2. chat_rooms tableKakaoTalk.db/chat_rooms_dec table"chat_rooms" 테이블 역시 복호화되어 "chat_rooms_dec" 테이블에서 값을 확인할 수 있습니다. 해당 테이블은 카카오톡의 채팅방에 대한 정보가 저장되어 있는 테이블이며, 주목해야 할 필드 5개는 다음과 같습니다.
chat_logs_dec 테이블에서 봤던 chat_id 값을 chat_rooms 테이블에서 id 값으로 확인할 수 있습니다. 카카오톡 채팅방에 플러스 챗과 1:1 챗 기록 밖에 없어서 type 값은 플러스 챗과 1:1챗만 값을 확인할 수 있는데 아마도 오픈챗, 그룹챗도 값이 다를 것이라 예상됩니다. 추후 확인해봐야겠네요 members 도 그룹챗인 경우에 어떻게 표현이 될지 생각해봤는데, 멤버 1명당 행을 새로 추가할 것 같으면서도 사용자가 많은 그룹챗인 경우 몇 백 명의 데이터를 다 추가하기에는 좀 그렇지 않나는 생각이 들기도 하네요. 이에 대해서도 추후 확인해보겠습니다. 4. KakaoTalk2.db 분석4-1. friends tableKakaoTalk2.db/friends tableKakaoTalk2.db 파일의 friends 테이블에는 친구로 등록된 사용자에 대한 정보가 저장되어 있습니다. 그 중 주목해야 할 필드 몇 가지를 뽑아봤습니다.
처음 봤을 때, 친구 테이블에 본인의 정보가 들어가 있어 의아했습니다. 생각을 해보니 카카오톡을 실행하고 친구 탭에 들어가면 본인의 정보도 같이 있더라구요. 아마 이 이유가 맞지 않을까 싶습니다. KakaoTalk2.db 파일에는 friends 테이블 외에 item, item_resource 테이블이 추가로 복호화됩니다. item 관련 테이블은 데이터가 부족해서 무슨 정보가 저장되어있는지 파악을 못했기 때문에 생략하도록 하겠습니다. 이번 포스팅은 복호화하는 방법을 중점으로 다루다보니 분석 방법에 대한 내용은 빈약하네요. 추후에 카카오톡 분석 포스팅을 추가로 올리게 된다면 다른 테이블들까지 참고해서 더 자세히 작성해보겠습니다. |